Changeset 81161 in vbox for trunk/src/VBox/HostDrivers/Support/win
- Timestamp:
- Oct 8, 2019 3:21:59 PM (5 years ago)
- svn:sync-xref-src-repo-rev:
- 133795
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/HostDrivers/Support/win/SUPDrv-win.cpp
r81106 r81161 1903 1903 1904 1904 1905 /**1906 * Checks whether we're allowed by Hyper-V to modify CR4.1907 */1908 int VBOXCALL supdrvOSGetRawModeUsability(void)1909 {1910 int rc = VINF_SUCCESS;1911 1912 #ifdef RT_ARCH_AMD641913 /*1914 * Broadwell running W10 17083.100:1915 * CR4: 0x1706781916 * Evil mask: 0x1706381917 * X86_CR4_SMEP - evil1918 * X86_CR4_FSGSBASE - evil1919 * X86_CR4_PCIDE - evil1920 * X86_CR4_OSXSAVE - evil1921 * X86_CR4_OSFXSR - evil1922 * X86_CR4_OSXMMEEXCPT - evil1923 * X86_CR4_PSE - evil1924 * X86_CR4_PAE - evil1925 * X86_CR4_MCE - okay1926 * X86_CR4_DE - evil1927 */1928 if (ASMHasCpuId())1929 {1930 uint32_t cStd = ASMCpuId_EAX(0);1931 if (ASMIsValidStdRange(cStd))1932 {1933 uint32_t uIgn = 0;1934 uint32_t fEdxFeatures = 0;1935 uint32_t fEcxFeatures = 0;1936 ASMCpuIdExSlow(1, 0, 0, 0, &uIgn, &uIgn, &fEcxFeatures, &fEdxFeatures);1937 if (fEcxFeatures & X86_CPUID_FEATURE_ECX_HVP)1938 {1939 RTCCUINTREG const fOldFlags = ASMIntDisableFlags();1940 RTCCUINTXREG const fCr4 = ASMGetCR4();1941 1942 RTCCUINTXREG const fSafeToClear = X86_CR4_TSD | X86_CR4_DE | X86_CR4_PGE | X86_CR4_PCE1943 | X86_CR4_FSGSBASE | X86_CR4_PCIDE | X86_CR4_SMEP | X86_CR4_SMAP1944 | X86_CR4_OSXSAVE | X86_CR4_OSFXSR | X86_CR4_OSXMMEEXCPT;1945 RTCCUINTXREG fLoadCr4 = fCr4 & ~fSafeToClear;1946 RTCCUINTXREG const fCleared = fCr4 & fSafeToClear;1947 if (!(fCleared & X86_CR4_TSD) && (fEdxFeatures & X86_CPUID_FEATURE_EDX_TSC))1948 fLoadCr4 |= X86_CR4_TSD;1949 if (!(fCleared & X86_CR4_PGE) && (fEdxFeatures & X86_CPUID_FEATURE_EDX_PGE))1950 fLoadCr4 |= X86_CR4_PGE;1951 __try1952 {1953 ASMSetCR4(fLoadCr4);1954 }1955 __except(EXCEPTION_EXECUTE_HANDLER)1956 {1957 rc = VERR_SUPDRV_NO_RAW_MODE_HYPER_V_ROOT;1958 }1959 if (RT_SUCCESS(rc))1960 ASMSetCR4(fCr4);1961 ASMSetFlags(fOldFlags);1962 }1963 }1964 }1965 #endif1966 return rc;1967 }1968 1969 1970 1905 #define MY_SystemLoadGdiDriverInSystemSpaceInformation 54 1971 1906 #define MY_SystemUnloadGdiDriverInformation 27
Note:
See TracChangeset
for help on using the changeset viewer.