Changeset 52438 in vbox
- Timestamp:
- Aug 21, 2014 11:25:51 AM (11 years ago)
- svn:sync-xref-src-repo-rev:
- 95645
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/iprt/nt/nt.h
r52364 r52438 1110 1110 NTSYSAPI NTSTATUS NTAPI NtCreateSection(PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, PLARGE_INTEGER, ULONG, ULONG, HANDLE); 1111 1111 NTSYSAPI NTSTATUS NTAPI NtUnmapViewOfSection(HANDLE, PVOID); 1112 typedef enum _SECTION_INHERIT 1113 { 1114 ViewShare = 1, 1115 ViewUnmap 1116 } SECTION_INHERIT; 1117 NTSYSAPI NTSTATUS NTAPI NtMapViewOfSection(HANDLE, HANDLE, PVOID *, ULONG, SIZE_T, PLARGE_INTEGER, PSIZE_T, SECTION_INHERIT, 1118 ULONG, ULONG); 1119 1112 1120 1113 1121 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION -
trunk/src/VBox/HostDrivers/Support/win/SUPR3HardenedMain-win.cpp
r52433 r52438 2755 2755 2756 2756 2757 static PVOID supR3HardNtPuChMapDllIntoChild(PSUPR3HARDNTPUCH pThis, PUNICODE_STRING pNtName, const char *pszShort) 2758 { 2759 HANDLE hFile = RTNT_INVALID_HANDLE_VALUE; 2760 IO_STATUS_BLOCK Ios = RTNT_IO_STATUS_BLOCK_INITIALIZER; 2761 OBJECT_ATTRIBUTES ObjAttr; 2762 InitializeObjectAttributes(&ObjAttr, pNtName, OBJ_CASE_INSENSITIVE, NULL /*hRootDir*/, NULL /*pSecDesc*/); 2763 NTSTATUS rcNt = NtCreateFile(&hFile, 2764 GENERIC_READ | GENERIC_EXECUTE, 2765 &ObjAttr, 2766 &Ios, 2767 NULL /* Allocation Size*/, 2768 FILE_ATTRIBUTE_NORMAL, 2769 FILE_SHARE_READ, 2770 FILE_OPEN, 2771 FILE_NON_DIRECTORY_FILE, 2772 NULL /*EaBuffer*/, 2773 0 /*EaLength*/); 2774 if (NT_SUCCESS(rcNt)) 2775 rcNt = Ios.Status; 2776 PVOID pvRet = NULL; 2777 if (NT_SUCCESS(rcNt)) 2778 { 2779 HANDLE hSection = RTNT_INVALID_HANDLE_VALUE; 2780 rcNt = NtCreateSection(&hSection, 2781 SECTION_MAP_EXECUTE | SECTION_MAP_READ | SECTION_MAP_WRITE | SECTION_QUERY, 2782 NULL /* pObjAttr*/, NULL /*pMaxSize*/, 2783 PAGE_EXECUTE, SEC_IMAGE, hFile); 2784 if (NT_SUCCESS(rcNt)) 2785 { 2786 SIZE_T cbView = 0; 2787 rcNt = NtMapViewOfSection(hSection, pThis->hProcess, &pvRet, 0 /*ZeroBits*/, 0 /*CommitSize*/, 2788 NULL /*pOffSect*/, &cbView, ViewShare, 0 /*AllocationType*/, PAGE_READWRITE); 2789 if (NT_SUCCESS(rcNt)) 2790 SUP_DPRINTF(("supR3HardNtPuChTriggerInitialImageEvents: %s mapped at %p LB %#x\n", pszShort, pvRet, cbView)); 2791 else 2792 { 2793 SUP_DPRINTF(("supR3HardNtPuChTriggerInitialImageEvents: NtMapViewOfSection failed on %s: %#x\n", pszShort, rcNt)); 2794 pvRet = NULL; 2795 } 2796 NtClose(hSection); 2797 } 2798 else 2799 SUP_DPRINTF(("supR3HardNtPuChTriggerInitialImageEvents: NtCreateSection failed on %s: %#x\n", pszShort, rcNt)); 2800 NtClose(hFile); 2801 } 2802 else 2803 SUP_DPRINTF(("supR3HardNtPuChTriggerInitialImageEvents: Error opening %s: %#x\n", pszShort, rcNt)); 2804 return pvRet; 2805 } 2806 2807 2757 2808 /** 2758 2809 * Trigger the initial image events without actually initializing the process. … … 2888 2939 2889 2940 /* 2941 * Map kernel32.dll and kernelbase.dll (if applicable) into the process. 2942 * This triggers should image load events that may set of AV activities 2943 * that we'd rather see early than later. 2944 */ 2945 UNICODE_STRING NtName1 = RTNT_CONSTANT_UNISTR(L"\\SystemRoot\\System32\\kernel32.dll"); 2946 PVOID pvKernel32 = supR3HardNtPuChMapDllIntoChild(pThis, &NtName1, "kernel32.dll"); 2947 2948 UNICODE_STRING NtName2 = RTNT_CONSTANT_UNISTR(L"\\SystemRoot\\System32\\KernelBase.dll"); 2949 PVOID pvKernelBase = g_uNtVerCombined >= SUP_NT_VER_VISTA 2950 ? supR3HardNtPuChMapDllIntoChild(pThis, &NtName2, "KernelBase.dll") 2951 : NULL; 2952 2953 /* 2890 2954 * Fudge factor for letting kernel threads get a chance to mess up our 2891 2955 * process asynchronously. … … 2900 2964 NtYieldExecution(); 2901 2965 SUP_DPRINTF(("supR3HardNtPuChTriggerInitialImageEvents: Startup delay kludge #1: %u ms\n", GetTickCount() - dwStart)); 2966 2967 /* 2968 * Unmap kernel32 & kernelbase. Wonder how the AV stuff is gonna react to this... 2969 */ 2970 if (pvKernel32) 2971 { 2972 rcNt = NtUnmapViewOfSection(pThis->hProcess, pvKernel32); 2973 if (!NT_SUCCESS(!rcNt)) 2974 SUP_DPRINTF(("supR3HardNtPuChTriggerInitialImageEvents: NtUnmapViewOfSection failed on kernel32: %#x (%p)\n", 2975 rcNt, pvKernel32)); 2976 } 2977 if (pvKernelBase) 2978 { 2979 rcNt = NtUnmapViewOfSection(pThis->hProcess, pvKernelBase); 2980 if (!NT_SUCCESS(!rcNt)) 2981 SUP_DPRINTF(("supR3HardNtPuChTriggerInitialImageEvents: NtUnmapViewOfSection failed on KernelBase: %#x (%p)\n", 2982 rcNt, pvKernelBase)); 2983 } 2902 2984 2903 2985 return VINF_SUCCESS; … … 3421 3503 * Open the driver object directory. 3422 3504 */ 3423 UNICODE_STRING NtDirName; 3424 NtDirName.Buffer = L"\\Driver"; 3425 NtDirName.MaximumLength = sizeof(L"\\Driver"); 3426 NtDirName.Length = NtDirName.MaximumLength - sizeof(WCHAR); 3505 UNICODE_STRING NtDirName = RTNT_CONSTANT_UNISTR(L"\\Driver"); 3427 3506 3428 3507 OBJECT_ATTRIBUTES ObjAttr;
Note:
See TracChangeset
for help on using the changeset viewer.