diff options
Diffstat (limited to 'src/classlibnative/bcltype/system.cpp')
-rw-r--r-- | src/classlibnative/bcltype/system.cpp | 306 |
1 files changed, 25 insertions, 281 deletions
diff --git a/src/classlibnative/bcltype/system.cpp b/src/classlibnative/bcltype/system.cpp index 8bb3409974..c36d2e1066 100644 --- a/src/classlibnative/bcltype/system.cpp +++ b/src/classlibnative/bcltype/system.cpp @@ -31,9 +31,6 @@ #include "array.h" #include "eepolicy.h" -#if !defined(FEATURE_CORECLR) -#include "metahost.h" -#endif // !FEATURE_CORECLR #ifdef FEATURE_WINDOWSPHONE Volatile<BOOL> g_fGetPhoneVersionInitialized; @@ -44,14 +41,37 @@ typedef BOOL (*pfnGetPhoneVersion)(LPOSVERSIONINFO lpVersionInformation); pfnGetPhoneVersion g_pfnGetPhoneVersion = NULL; #endif +typedef void(WINAPI *pfnGetSystemTimeAsFileTime)(LPFILETIME lpSystemTimeAsFileTime); +extern pfnGetSystemTimeAsFileTime g_pfnGetSystemTimeAsFileTime; + +void WINAPI InitializeGetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime) +{ + pfnGetSystemTimeAsFileTime func = NULL; + +#ifndef FEATURE_PAL + HMODULE hKernel32 = WszLoadLibrary(W("kernel32.dll")); + if (hKernel32 != NULL) + { + func = (pfnGetSystemTimeAsFileTime)GetProcAddress(hKernel32, "GetSystemTimePreciseAsFileTime"); + } + if (func == NULL) +#endif + { + func = &::GetSystemTimeAsFileTime; + } + + g_pfnGetSystemTimeAsFileTime = func; + func(lpSystemTimeAsFileTime); +} + +pfnGetSystemTimeAsFileTime g_pfnGetSystemTimeAsFileTime = &InitializeGetSystemTimeAsFileTime; FCIMPL0(INT64, SystemNative::__GetSystemTimeAsFileTime) { FCALL_CONTRACT; INT64 timestamp; - - ::GetSystemTimeAsFileTime((FILETIME*)×tamp); + g_pfnGetSystemTimeAsFileTime((FILETIME*)×tamp); #if BIGENDIAN timestamp = (INT64)(((UINT64)timestamp >> 32) | ((UINT64)timestamp << 32)); @@ -83,20 +103,6 @@ FCIMPLEND; -#ifndef FEATURE_CORECLR -INT64 QCALLTYPE SystemNative::GetWorkingSet() -{ - QCALL_CONTRACT; - - DWORD memUsage = 0; - - BEGIN_QCALL; - memUsage = WszGetWorkingSet(); - END_QCALL; - - return memUsage; -} -#endif // !FEATURE_CORECLR VOID QCALLTYPE SystemNative::Exit(INT32 exitcode) { @@ -312,24 +318,7 @@ FCIMPLEND FCIMPL0(StringObject*, SystemNative::GetDeveloperPath) { -#ifdef FEATURE_FUSION - FCALL_CONTRACT; - - STRINGREF refDevPath = NULL; - LPWSTR pPath = NULL; - DWORD lgth = 0; - - HELPER_METHOD_FRAME_BEGIN_RET_1(refDevPath); - - SystemDomain::System()->GetDevpathW(&pPath, &lgth); - if(lgth) - refDevPath = StringObject::NewString(pPath, lgth); - - HELPER_METHOD_FRAME_END(); - return (StringObject*)OBJECTREFToObject(refDevPath); -#else return NULL; -#endif } FCIMPLEND @@ -377,24 +366,6 @@ FCIMPL0(StringObject*, SystemNative::GetHostBindingFile); } FCIMPLEND -#ifndef FEATURE_CORECLR - -void QCALLTYPE SystemNative::_GetSystemVersion(QCall::StringHandleOnStack retVer) -{ - QCALL_CONTRACT; - BEGIN_QCALL; - - WCHAR wszVersion[_MAX_PATH]; - DWORD dwVersion = _MAX_PATH; - - // Get the version - IfFailThrow(g_pCLRRuntime->GetVersionString(wszVersion, &dwVersion)); - retVer.Set(wszVersion); - - END_QCALL; -} - -#endif INT32 QCALLTYPE SystemNative::GetProcessorCount() { @@ -439,16 +410,7 @@ LPVOID QCALLTYPE SystemNative::GetRuntimeInterfaceImpl( BEGIN_QCALL; -#ifdef FEATURE_CORECLR IfFailThrow(E_NOINTERFACE); -#else - HRESULT hr = g_pCLRRuntime->GetInterface(clsid, riid, &pUnk); - - if (FAILED(hr)) - hr = g_pCLRRuntime->QueryInterface(riid, &pUnk); - - IfFailThrow(hr); -#endif END_QCALL; @@ -560,11 +522,9 @@ void SystemNative::GenericFailFast(STRINGREF refMesgString, EXCEPTIONREF refExce #ifndef FEATURE_PAL // If we have the exception object, then try to setup // the watson bucket if it has any details. -#ifdef FEATURE_CORECLR // On CoreCLR, Watson may not be enabled. Thus, we should // skip this, if required. if (IsWatsonEnabled()) -#endif // FEATURE_CORECLR { BEGIN_SO_INTOLERANT_CODE(pThread); if ((gc.refExceptionForWatsonBucketing == NULL) || !SetupWatsonBucketsForFailFast(gc.refExceptionForWatsonBucketing)) @@ -649,36 +609,6 @@ FCIMPL2(VOID, SystemNative::FailFastWithException, StringObject* refMessageUNSAF } FCIMPLEND - -#ifndef FEATURE_CORECLR -BOOL QCALLTYPE SystemNative::IsCLRHosted() -{ - QCALL_CONTRACT; - - BOOL retVal = false; - BEGIN_QCALL; - retVal = (CLRHosted() & CLRHOSTED) != 0; - END_QCALL; - - return retVal; -} - -void QCALLTYPE SystemNative::TriggerCodeContractFailure(ContractFailureKind failureKind, LPCWSTR pMessage, LPCWSTR pCondition, LPCWSTR exceptionAsString) -{ - QCALL_CONTRACT; - - BEGIN_QCALL; - - GCX_COOP(); - - EEPolicy::HandleCodeContractFailure(pMessage, pCondition, exceptionAsString); - // Note: if the host chose to throw an exception, we've returned from this method and - // will throw that exception in managed code, because it's easier to pass the right parameters there. - - END_QCALL; -} -#endif // !FEATURE_CORECLR - FCIMPL0(FC_BOOL_RET, SystemNative::IsServerGC) { FCALL_CONTRACT; @@ -704,195 +634,9 @@ BOOL QCALLTYPE SystemNative::WinRTSupported() #endif // FEATURE_COMINTEROP -// Helper method to retrieve OS Version based on the environment. -BOOL GetOSVersionForEnvironment(LPOSVERSIONINFO lpVersionInformation) -{ -#ifdef FEATURE_WINDOWSPHONE - // Return phone version information if it is available - if (!g_fGetPhoneVersionInitialized) - { - HMODULE hPhoneInfo = WszLoadLibrary(W("phoneinfo.dll")); - if(hPhoneInfo != NULL) - g_pfnGetPhoneVersion = (pfnGetPhoneVersion)GetProcAddress(hPhoneInfo, "GetPhoneVersion"); - - g_fGetPhoneVersionInitialized = true; - } - - if (g_pfnGetPhoneVersion!= NULL) - return g_pfnGetPhoneVersion(lpVersionInformation); -#endif // FEATURE_WINDOWSPHONE - - return ::GetOSVersion(lpVersionInformation); -} - - -/* - * SystemNative::GetOSVersion - Fcall corresponding to System.Environment.GetVersion - * It calls clr!GetOSVersion to get the real OS version even when running in - * app compat. Calling kernel32!GetVersionEx() directly will be shimmed and will return the - * fake OS version. In order to avoid this the call to getVersionEx is made via mscoree.dll. - * Mscoree.dll resides in system32 dir and is never lied about OS version. - */ - -FCIMPL1(FC_BOOL_RET, SystemNative::GetOSVersion, OSVERSIONINFOObject *osVer) -{ - FCALL_CONTRACT; - - OSVERSIONINFO ver; - ver.dwOSVersionInfoSize = osVer->dwOSVersionInfoSize; - - BOOL ret = GetOSVersionForEnvironment(&ver); - - if(ret) - { - osVer->dwMajorVersion = ver.dwMajorVersion; - osVer->dwMinorVersion = ver.dwMinorVersion; - osVer->dwBuildNumber = ver.dwBuildNumber; - osVer->dwPlatformId = ver.dwPlatformId; - - HELPER_METHOD_FRAME_BEGIN_RET_1(osVer); - SetObjectReference((OBJECTREF*)&(osVer->szCSDVersion), StringObject::NewString(ver.szCSDVersion), GetAppDomain()); - HELPER_METHOD_FRAME_END(); - } - - FC_RETURN_BOOL(ret); -} -FCIMPLEND - -/* - * SystemNative::GetOSVersionEx - Fcall implementation for System.Environment.GetVersionEx - * Similar as above except this takes OSVERSIONINFOEX structure as input - */ - -FCIMPL1(FC_BOOL_RET, SystemNative::GetOSVersionEx, OSVERSIONINFOEXObject *osVer) -{ - FCALL_CONTRACT; - - OSVERSIONINFOEX ver; - ver.dwOSVersionInfoSize = osVer->dwOSVersionInfoSize; - - BOOL ret = GetOSVersionForEnvironment((OSVERSIONINFO *)&ver); - - if(ret) - { - osVer->dwMajorVersion = ver.dwMajorVersion; - osVer->dwMinorVersion = ver.dwMinorVersion; - osVer->dwBuildNumber = ver.dwBuildNumber; - osVer->dwPlatformId = ver.dwPlatformId; - osVer->wServicePackMajor = ver.wServicePackMajor; - osVer->wServicePackMinor = ver.wServicePackMinor; - osVer->wSuiteMask = ver.wSuiteMask; - osVer->wProductType = ver.wProductType; - osVer->wReserved = ver.wReserved; - - HELPER_METHOD_FRAME_BEGIN_RET_1(osVer); - SetObjectReference((OBJECTREF*)&(osVer->szCSDVersion), StringObject::NewString(ver.szCSDVersion), GetAppDomain()); - HELPER_METHOD_FRAME_END(); - } - - FC_RETURN_BOOL(ret); -} -FCIMPLEND - - -#ifndef FEATURE_CORECLR -// -// SystemNative::LegacyFormatMode - Fcall implementation for System.TimeSpan.LegacyFormatMode -// checks for the DWORD "TimeSpan_LegacyFormatMode" CLR config option -// -FCIMPL0(FC_BOOL_RET, SystemNative::LegacyFormatMode) -{ - FCALL_CONTRACT; - - DWORD flag = 0; - BEGIN_SO_INTOLERANT_CODE_NOTHROW(GetThread(), FCThrow(kStackOverflowException)); - flag = CLRConfig::GetConfigValue(CLRConfig::EXTERNAL_TimeSpan_LegacyFormatMode); - END_SO_INTOLERANT_CODE; - if (flag) - FC_RETURN_BOOL(TRUE); - else - FC_RETURN_BOOL(FALSE); -} -FCIMPLEND -#endif // !FEATURE_CORECLR -#ifndef FEATURE_CORECLR -// -// SystemNative::CheckLegacyManagedDeflateStream - Fcall implementation for System.IO.Compression.DeflateStream -// checks for the DWORD "NetFx45_LegacyManagedDeflateStream" CLR config option -// -// Move this into a separate CLRConfigQCallWrapper class once CLRConfig has been refactored! -// -FCIMPL0(FC_BOOL_RET, SystemNative::CheckLegacyManagedDeflateStream) -{ - FCALL_CONTRACT; - - DWORD flag = 0; - - BEGIN_SO_INTOLERANT_CODE_NOTHROW(GetThread(), FCThrow(kStackOverflowException)); - flag = CLRConfig::GetConfigValue(CLRConfig::EXTERNAL_NetFx45_LegacyManagedDeflateStream); - END_SO_INTOLERANT_CODE; - - if (flag) - FC_RETURN_BOOL(TRUE); - else - FC_RETURN_BOOL(FALSE); -} -FCIMPLEND -#endif // !FEATURE_CORECLR - -#ifndef FEATURE_CORECLR -// -// SystemNative::CheckThrowUnobservedTaskExceptions - Fcall implementation for System.Threading.Tasks.TaskExceptionHolder -// checks for the DWORD "ThrowUnobservedTaskExceptions" CLR config option -// -FCIMPL0(FC_BOOL_RET, SystemNative::CheckThrowUnobservedTaskExceptions) -{ - FCALL_CONTRACT; - - DWORD flag = 0; - - BEGIN_SO_INTOLERANT_CODE_NOTHROW(GetThread(), FCThrow(kStackOverflowException)); - flag = CLRConfig::GetConfigValue(CLRConfig::EXTERNAL_ThrowUnobservedTaskExceptions); - END_SO_INTOLERANT_CODE; - - if (flag) - FC_RETURN_BOOL(TRUE); - else - FC_RETURN_BOOL(FALSE); -} -FCIMPLEND - -BOOL QCALLTYPE SystemNative::LegacyDateTimeParseMode() -{ - QCALL_CONTRACT; - - BOOL retVal = false; - BEGIN_QCALL; - retVal = (BOOL) CLRConfig::GetConfigValue(CLRConfig::EXTERNAL_DateTime_NetFX35ParseMode); - END_QCALL; - - return retVal; -} - -// -// This method used with DateTimeParse to fix the parsing of AM/PM like "1/10 5 AM" case -// -BOOL QCALLTYPE SystemNative::EnableAmPmParseAdjustment() -{ - QCALL_CONTRACT; - - BOOL retVal = false; - BEGIN_QCALL; - retVal = (BOOL) CLRConfig::GetConfigValue(CLRConfig::EXTERNAL_DateTime_NetFX40AmPmParseAdjustment); - END_QCALL; - - return retVal; -} - -#endif // !FEATURE_CORECLR |