Changeset 52941 in vbox for trunk/src/VBox
- Timestamp:
- Oct 3, 2014 7:58:01 PM (11 years ago)
- svn:sync-xref-src-repo-rev:
- 96381
- Location:
- trunk/src/VBox
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/HostDrivers/Support/SUPLibInternal.h
r52795 r52941 313 313 { 314 314 SUPR3HARDENEDMAINSTATE_NOT_YET_CALLED = 0, 315 SUPR3HARDENEDMAINSTATE_WIN_EP_CALLED, 316 SUPR3HARDENEDMAINSTATE_WIN_IMPORTS_RESOLVED, 317 SUPR3HARDENEDMAINSTATE_WIN_VERSION_INITIALIZED, 315 318 SUPR3HARDENEDMAINSTATE_VERIFY_TRUST_READY, 316 319 SUPR3HARDENEDMAINSTATE_INIT_RUNTIME, … … 452 455 extern char g_szSupLibHardenedExePath[RTPATH_MAX]; 453 456 # endif 457 DECLHIDDEN(void) supR3HardenedWinCompactHeaps(void); 454 458 #endif 455 459 -
trunk/src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp
r52940 r52941 227 227 { 228 228 for (;;) 229 { 229 230 #ifdef RT_OS_WINDOWS 230 RtlExitProcess(rcExit); 231 if (g_enmSupR3HardenedMainState >= SUPR3HARDENEDMAINSTATE_WIN_IMPORTS_RESOLVED) 232 ExitProcess(rcExit); 233 if (RtlExitUserProcess != NULL) 234 RtlExitUserProcess(rcExit); 235 NtTerminateProcess(NtCurrentProcess(), rcExit); 231 236 #else 232 237 _Exit(rcExit); 233 238 #endif 239 } 234 240 } 235 241 -
trunk/src/VBox/HostDrivers/Support/win/SUPR3HardenedMain-win.cpp
r52940 r52941 3916 3916 */ 3917 3917 supR3HardenedWinFlushLoaderCache(); 3918 RtlCompactHeap(GetProcessHeap(), 0 /*dwFlags*/);3918 supR3HardenedWinCompactHeaps(); 3919 3919 3920 3920 /* … … 5051 5051 5052 5052 g_cSuplibHardenedWindowsMainCalls++; 5053 g_enmSupR3HardenedMainState = SUPR3HARDENEDMAINSTATE_WIN_EP_CALLED; 5053 5054 5054 5055 /* … … 5057 5058 */ 5058 5059 supR3HardenedWinInitImports(); 5060 g_enmSupR3HardenedMainState = SUPR3HARDENEDMAINSTATE_WIN_IMPORTS_RESOLVED; 5059 5061 5060 5062 /* … … 5070 5072 */ 5071 5073 supR3HardenedWinInitVersion(); 5074 g_enmSupR3HardenedMainState = SUPR3HARDENEDMAINSTATE_WIN_VERSION_INITIALIZED; 5072 5075 5073 5076 /* -
trunk/src/VBox/HostDrivers/Support/win/SUPR3HardenedMainA-win.asm
r52940 r52941 162 162 %define SUPHARNT_COMMENT(a_Comment) 163 163 %define SUPHARNT_IMPORT_SYSCALL(a_Name, a_cbParamsX86) SupHardNtImport a_Name, a_cbParamsX86, SUPHNTIMP_SYSCALL, 1 164 %define SUPHARNT_IMPORT_STDCALL(a_Name, a_cbParamsX86) SupHardNtImport a_Name, a_cbParamsX86, 0, 0 165 %define SUPHARNT_IMPORT_STDCALL_EARLY(a_Name, a_cbParamsX86) SupHardNtImport a_Name, a_cbParamsX86, 0, 1 164 %define SUPHARNT_IMPORT_STDCALL(a_Name, a_cbParamsX86) SupHardNtImport a_Name, a_cbParamsX86, 0, 0 165 %define SUPHARNT_IMPORT_STDCALL_EARLY(a_Name, a_cbParamsX86) SupHardNtImport a_Name, a_cbParamsX86, 0, 1 166 %define SUPHARNT_IMPORT_STDCALL_EARLY_OPTIONAL(a_Name, a_cbParamsX86) SUPHARNT_IMPORT_STDCALL_EARLY(a_Name, a_cbParamsX86) 166 167 %include "import-template-ntdll.h" 167 168 %include "import-template-kernel32.h" -
trunk/src/VBox/HostDrivers/Support/win/SUPR3HardenedMainImports-win.cpp
r52940 r52941 72 72 * during early process initialization. */ 73 73 PFNRT pfnEarlyDummy; 74 /** Indicates whether this is an optional import and failure to locate it 75 * should set it to NULL instead of freaking out. */ 76 bool fOptional; 74 77 } SUPHNTIMPFUNC; 75 78 /** Pointer to an import table entry. */ … … 156 159 #define SUPHARNT_IMPORT_STDCALL_EARLY(a_Name, a_cbParamsX86) \ 157 160 extern PFNRT RT_CONCAT(g_pfn, a_Name); 161 #define SUPHARNT_IMPORT_STDCALL_EARLY_OPTIONAL(a_Name, a_cbParamsX86) SUPHARNT_IMPORT_STDCALL_EARLY(a_Name, a_cbParamsX86) 158 162 #define SUPHARNT_IMPORT_SYSCALL(a_Name, a_cbParamsX86) \ 159 163 SUPHARNT_IMPORT_STDCALL_EARLY(a_Name, a_cbParamsX86) \ … … 175 179 #undef SUPHARNT_IMPORT_SYSCALL 176 180 #undef SUPHARNT_IMPORT_STDCALL_EARLY 181 #undef SUPHARNT_IMPORT_STDCALL_EARLY_OPTIONAL 177 182 #undef SUPHARNT_IMPORT_STDCALL 178 #define SUPHARNT_IMPORT_SYSCALL(a_Name, a_cbParamsX86) { #a_Name, &RT_CONCAT(g_pfn, a_Name), NULL }, 179 #define SUPHARNT_IMPORT_STDCALL_EARLY(a_Name, a_cbParamsX86) { #a_Name, &RT_CONCAT(g_pfn, a_Name), NULL }, 180 #define SUPHARNT_IMPORT_STDCALL(a_Name, a_cbParamsX86) { #a_Name, &RT_CONCAT(g_pfn, a_Name), RT_CONCAT(a_Name,_Early) }, 183 #define SUPHARNT_IMPORT_SYSCALL(a_Name, a_cbParamsX86) \ 184 { #a_Name, &RT_CONCAT(g_pfn, a_Name), NULL, false }, 185 #define SUPHARNT_IMPORT_STDCALL_EARLY(a_Name, a_cbParamsX86) \ 186 { #a_Name, &RT_CONCAT(g_pfn, a_Name), NULL, false }, 187 #define SUPHARNT_IMPORT_STDCALL_EARLY_OPTIONAL(a_Name, a_cbParamsX86) \ 188 { #a_Name, &RT_CONCAT(g_pfn, a_Name), NULL, true }, 189 #define SUPHARNT_IMPORT_STDCALL(a_Name, a_cbParamsX86) \ 190 { #a_Name, &RT_CONCAT(g_pfn, a_Name), RT_CONCAT(a_Name,_Early), false }, 181 191 static const SUPHNTIMPFUNC g_aSupNtImpNtDllFunctions[] = 182 192 { … … 197 207 #undef SUPHARNT_IMPORT_STDCALL 198 208 #undef SUPHARNT_IMPORT_STDCALL_EARLY 209 #undef SUPHARNT_IMPORT_STDCALL_EARLY_OPTIONAL 199 210 #ifdef RT_ARCH_AMD64 200 211 # define SUPHARNT_IMPORT_STDCALL(a_Name, a_cbParamsX86) \ … … 208 219 { &RT_CONCAT(g_uApiNo, a_Name), &RT_CONCAT(a_Name,_SyscallType1), &RT_CONCAT(a_Name, _SyscallType2), a_cbParamsX86 }, 209 220 #endif 210 #define SUPHARNT_IMPORT_STDCALL_EARLY(a_Name, a_cbParamsX86) SUPHARNT_IMPORT_STDCALL(a_Name, a_cbParamsX86) 221 #define SUPHARNT_IMPORT_STDCALL_EARLY(a_Name, a_cbParamsX86) SUPHARNT_IMPORT_STDCALL(a_Name, a_cbParamsX86) 222 #define SUPHARNT_IMPORT_STDCALL_EARLY_OPTIONAL(a_Name, a_cbParamsX86) SUPHARNT_IMPORT_STDCALL(a_Name, a_cbParamsX86) 211 223 static const SUPHNTIMPSYSCALL g_aSupNtImpNtDllSyscalls[] = 212 224 { … … 399 411 } 400 412 401 SUPHNTIMP_ERROR(15, "supR3HardenedResolveImport", kSupInitOp_Misc, VERR_SYMBOL_NOT_FOUND, 402 "%ls: Failed to resolve '%s'.", pDll->pwszName, pImport->pszName); 413 if (!pImport->fOptional) 414 SUPHNTIMP_ERROR(15, "supR3HardenedResolveImport", kSupInitOp_Misc, VERR_SYMBOL_NOT_FOUND, 415 "%ls: Failed to resolve '%s'.", pDll->pwszName, pImport->pszName); 416 *pImport->ppfnImport = NULL; 403 417 return NULL; 404 418 } -
trunk/src/VBox/HostDrivers/Support/win/SUPR3HardenedNoCrt-win.cpp
r52940 r52941 97 97 */ 98 98 99 /** The heap we're using. */ 100 static HANDLE g_hSupR3HardenedHeap = NULL; 101 102 103 /** 104 * Lazy heap initialization function. 105 * 106 * @returns Heap handle. 107 */ 108 static HANDLE supR3HardenedHeapInit(void) 109 { 110 HANDLE hHeap = RtlCreateHeap(HEAP_GROWABLE | HEAP_CLASS_PRIVATE, NULL /*HeapBase*/, 111 0 /*ReserveSize*/, 0 /*CommitSize*/, NULL /*Lock*/, NULL /*Parameters*/); 112 if (hHeap) 113 { 114 g_hSupR3HardenedHeap = hHeap; 115 return hHeap; 116 } 117 118 supR3HardenedFatal("RtlCreateHeap failed.\n"); 119 return NULL; 120 } 121 122 123 /** 124 * Compacts the heaps before enter wait for parent/child. 125 */ 126 DECLHIDDEN(void) supR3HardenedWinCompactHeaps(void) 127 { 128 if (g_hSupR3HardenedHeap) 129 RtlCompactHeap(g_hSupR3HardenedHeap, 0 /*dwFlags*/); 130 RtlCompactHeap(GetProcessHeap(), 0 /*dwFlags*/); 131 } 132 133 134 99 135 RTDECL(void *) RTMemTmpAllocTag(size_t cb, const char *pszTag) RT_NO_THROW 100 136 { … … 117 153 RTDECL(void *) RTMemAllocTag(size_t cb, const char *pszTag) RT_NO_THROW 118 154 { 119 void *pv = RtlAllocateHeap(GetProcessHeap(), 0 /*fFlags*/, cb); 155 HANDLE hHeap = g_hSupR3HardenedHeap; 156 if (!hHeap) 157 hHeap = supR3HardenedHeapInit(); 158 void *pv = RtlAllocateHeap(hHeap, 0 /*fFlags*/, cb); 120 159 if (!pv) 121 160 supR3HardenedFatal("RtlAllocateHeap failed to allocate %zu bytes.\n", cb); … … 126 165 RTDECL(void *) RTMemAllocZTag(size_t cb, const char *pszTag) RT_NO_THROW 127 166 { 128 void *pv = RtlAllocateHeap(GetProcessHeap(), HEAP_ZERO_MEMORY, cb); 167 HANDLE hHeap = g_hSupR3HardenedHeap; 168 if (!hHeap) 169 hHeap = supR3HardenedHeapInit(); 170 void *pv = RtlAllocateHeap(hHeap, HEAP_ZERO_MEMORY, cb); 129 171 if (!pv) 130 172 supR3HardenedFatal("RtlAllocateHeap failed to allocate %zu bytes.\n", cb); … … 160 202 return RTMemAllocZTag(cbNew, pszTag); 161 203 162 void *pv = RtlReAllocateHeap(GetProcessHeap(), 0 /*dwFlags*/, pvOld, cbNew); 204 HANDLE hHeap = g_hSupR3HardenedHeap; 205 Assert(hHeap != NULL); 206 void *pv = RtlReAllocateHeap(hHeap, 0 /*dwFlags*/, pvOld, cbNew); 163 207 if (!pv) 164 208 supR3HardenedFatal("RtlReAllocateHeap failed to allocate %zu bytes.\n", cbNew); … … 170 214 { 171 215 if (pv) 172 RtlFreeHeap(GetProcessHeap(), 0 /* dwFlags*/, pv); 216 { 217 HANDLE hHeap = g_hSupR3HardenedHeap; 218 Assert(hHeap != NULL); 219 RtlFreeHeap(hHeap, 0 /* dwFlags*/, pv); 220 } 173 221 } 174 222 -
trunk/src/VBox/HostDrivers/Support/win/import-template-kernel32.h
r52940 r52941 1 1 SUPHARNT_IMPORT_STDCALL(CreateFileW, 28) 2 2 SUPHARNT_IMPORT_STDCALL(CreateProcessW, 40) 3 SUPHARNT_IMPORT_STDCALL(ExitProcess, 4) 3 4 SUPHARNT_IMPORT_STDCALL(GetFullPathNameA, 16) 4 5 SUPHARNT_IMPORT_STDCALL(GetModuleFileNameW, 12) -
trunk/src/VBox/HostDrivers/Support/win/import-template-ntdll.h
r52940 r52941 49 49 50 50 51 SUPHARNT_IMPORT_STDCALL (NtCreateSection, 28)52 SUPHARNT_IMPORT_STDCALL (NtQueryVolumeInformationFile, 20)53 SUPHARNT_IMPORT_STDCALL (LdrInitializeThunk, 12)51 SUPHARNT_IMPORT_STDCALL_EARLY(NtCreateSection, 28) 52 SUPHARNT_IMPORT_STDCALL_EARLY(NtQueryVolumeInformationFile, 20) 53 SUPHARNT_IMPORT_STDCALL_EARLY(LdrInitializeThunk, 12) 54 54 SUPHARNT_IMPORT_STDCALL(RtlAddAccessAllowedAce, 16) 55 55 SUPHARNT_IMPORT_STDCALL(RtlAddAccessDeniedAce, 16) 56 SUPHARNT_IMPORT_STDCALL (RtlAllocateHeap, 12)56 SUPHARNT_IMPORT_STDCALL_EARLY(RtlAllocateHeap, 12) 57 57 SUPHARNT_IMPORT_STDCALL(RtlCompactHeap, 8) 58 58 SUPHARNT_IMPORT_STDCALL(RtlCopySid, 12) 59 59 SUPHARNT_IMPORT_STDCALL(RtlCreateAcl, 12) 60 SUPHARNT_IMPORT_STDCALL_EARLY(RtlCreateHeap, 24) 60 61 SUPHARNT_IMPORT_STDCALL(RtlCreateProcessParameters, 40) 61 62 SUPHARNT_IMPORT_STDCALL(RtlCreateSecurityDescriptor, 8) … … 63 64 SUPHARNT_IMPORT_STDCALL(RtlCreateUserThread, 40) 64 65 SUPHARNT_IMPORT_STDCALL(RtlDestroyProcessParameters, 4) 65 SUPHARNT_IMPORT_STDCALL (RtlDosApplyFileIsolationRedirection_Ustr, 36)66 SUPHARNT_IMPORT_STDCALL (RtlEqualSid, 8)67 SUPHARNT_IMPORT_STDCALL (RtlExitProcess, 4)68 SUPHARNT_IMPORT_STDCALL (RtlExitThread, 4)66 SUPHARNT_IMPORT_STDCALL_EARLY(RtlDosApplyFileIsolationRedirection_Ustr, 36) 67 SUPHARNT_IMPORT_STDCALL_EARLY(RtlEqualSid, 8) 68 SUPHARNT_IMPORT_STDCALL_EARLY_OPTIONAL(RtlExitUserProcess, 4) 69 SUPHARNT_IMPORT_STDCALL_EARLY(RtlExitUserThread, 4) 69 70 SUPHARNT_IMPORT_STDCALL(RtlExpandEnvironmentStrings_U, 16) 70 SUPHARNT_IMPORT_STDCALL (RtlFreeHeap, 12)71 SUPHARNT_IMPORT_STDCALL (RtlFreeUnicodeString, 4)72 SUPHARNT_IMPORT_STDCALL (RtlGetLastNtStatus, 0)73 SUPHARNT_IMPORT_STDCALL (RtlGetLastWin32Error, 0)74 SUPHARNT_IMPORT_STDCALL (RtlGetVersion, 4)71 SUPHARNT_IMPORT_STDCALL_EARLY(RtlFreeHeap, 12) 72 SUPHARNT_IMPORT_STDCALL_EARLY(RtlFreeUnicodeString, 4) 73 SUPHARNT_IMPORT_STDCALL_EARLY(RtlGetLastNtStatus, 0) 74 SUPHARNT_IMPORT_STDCALL_EARLY(RtlGetLastWin32Error, 0) 75 SUPHARNT_IMPORT_STDCALL_EARLY(RtlGetVersion, 4) 75 76 SUPHARNT_IMPORT_STDCALL(RtlInitializeSid, 12) 76 SUPHARNT_IMPORT_STDCALL (RtlNtStatusToDosError, 4)77 SUPHARNT_IMPORT_STDCALL (RtlReAllocateHeap, 16)78 SUPHARNT_IMPORT_STDCALL (RtlRestoreLastWin32Error, 4)77 SUPHARNT_IMPORT_STDCALL_EARLY(RtlNtStatusToDosError, 4) 78 SUPHARNT_IMPORT_STDCALL_EARLY(RtlReAllocateHeap, 16) 79 SUPHARNT_IMPORT_STDCALL_EARLY(RtlRestoreLastWin32Error, 4) 79 80 SUPHARNT_IMPORT_STDCALL(RtlSetDaclSecurityDescriptor, 16) 80 SUPHARNT_IMPORT_STDCALL (RtlSetLastWin32Error, 4)81 SUPHARNT_IMPORT_STDCALL (RtlSetLastWin32ErrorAndNtStatusFromNtStatus, 4)82 SUPHARNT_IMPORT_STDCALL (RtlSizeHeap, 12)81 SUPHARNT_IMPORT_STDCALL_EARLY(RtlSetLastWin32Error, 4) 82 SUPHARNT_IMPORT_STDCALL_EARLY(RtlSetLastWin32ErrorAndNtStatusFromNtStatus, 4) 83 SUPHARNT_IMPORT_STDCALL_EARLY(RtlSizeHeap, 12) 83 84 SUPHARNT_IMPORT_STDCALL(RtlSubAuthoritySid, 8) 84 85 -
trunk/src/VBox/Runtime/r3/win/ntdll-mini-implib.def
r52940 r52941 91 91 RtlCopySid ;;= _RtlCopySid@12 92 92 RtlCreateAcl ;;= _RtlCreateAcl@12 93 RtlCreateHeap ;;= _RtlCreateHeap@24 93 94 RtlCreateProcessParameters ;;= _RtlCreateProcessParameters@40 94 95 RtlCreateSecurityDescriptor ;;= _RtlCreateSecurityDescriptor@8 … … 98 99 RtlDosApplyFileIsolationRedirection_Ustr ;;= _RtlDosApplyFileIsolationRedirection_Ustr@36 99 100 RtlEqualSid ;;= _RtlEqualSid@8 100 RtlExit Process;;= _RtlExitProcess@4101 RtlExit Thread;;= _RtlExitThread@4101 RtlExitUserProcess ;;= _RtlExitProcess@4 102 RtlExitUserThread ;;= _RtlExitThread@4 102 103 RtlExpandEnvironmentStrings_U ;;= _RtlExpandEnvironmentStrings_U@16 103 104 RtlFreeHeap ;;= _RtlFreeHeap@12
Note:
See TracChangeset
for help on using the changeset viewer.