@@ -28,14 +28,6 @@ static decltype(&CloseHandle)OriginCloseHandle = CloseHandle;
2828static GetFileVersion_T OriginGetFileVersion1 = nullptr ;
2929static GetFileVersion_T OriginGetFileVersion2 = nullptr ;
3030
31- FILETIME AssemblyTimes;
32-
33- CRITICAL_SECTION MmpFakeHandleListLock;
34- LIST_ENTRY MmpFakeHandleListHead;
35-
36- static BOOLEAN g_PreHooked = FALSE ;
37- static BOOLEAN g_Initialized = FALSE ;
38-
3931BOOL MmpIsMemoryModuleFileName (
4032 _In_ LPCWSTR lpFileName,
4133 _Out_opt_ PLDR_DATA_TABLE_ENTRY *LdrEntry) {
@@ -87,17 +79,17 @@ VOID MmpInsertHandleEntry(
8779 entry->value = value;
8880 entry->bImageMapping = bImageMapping;
8981
90- EnterCriticalSection (&MmpFakeHandleListLock);
91- InsertTailList (&MmpFakeHandleListHead, &entry->InMmpFakeHandleList );
92- LeaveCriticalSection (&MmpFakeHandleListLock);
82+ EnterCriticalSection (&MmpGlobalDataPtr-> MmpDotNet . MmpFakeHandleListLock );
83+ InsertTailList (&MmpGlobalDataPtr-> MmpDotNet . MmpFakeHandleListHead , &entry->InMmpFakeHandleList );
84+ LeaveCriticalSection (&MmpGlobalDataPtr-> MmpDotNet . MmpFakeHandleListLock );
9385}
9486
9587PMMP_FAKE_HANDLE_LIST_ENTRY MmpFindHandleEntry (HANDLE hObject) {
9688
9789 PMMP_FAKE_HANDLE_LIST_ENTRY result = nullptr ;
98- EnterCriticalSection (&MmpFakeHandleListLock);
90+ EnterCriticalSection (&MmpGlobalDataPtr-> MmpDotNet . MmpFakeHandleListLock );
9991
100- for (auto entry = MmpFakeHandleListHead.Flink ; entry != &MmpFakeHandleListHead; entry = entry->Flink ) {
92+ for (auto entry = MmpGlobalDataPtr-> MmpDotNet . MmpFakeHandleListHead .Flink ; entry != &MmpGlobalDataPtr-> MmpDotNet . MmpFakeHandleListHead ; entry = entry->Flink ) {
10193 auto CurEntry = CONTAINING_RECORD (entry, MMP_FAKE_HANDLE_LIST_ENTRY, MMP_FAKE_HANDLE_LIST_ENTRY::InMmpFakeHandleList);
10294
10395 if (CurEntry->hObject == hObject) {
@@ -107,15 +99,15 @@ PMMP_FAKE_HANDLE_LIST_ENTRY MmpFindHandleEntry(HANDLE hObject) {
10799
108100 }
109101
110- LeaveCriticalSection (&MmpFakeHandleListLock);
102+ LeaveCriticalSection (&MmpGlobalDataPtr-> MmpDotNet . MmpFakeHandleListLock );
111103 return result;
112104}
113105
114106VOID MmpFreeHandleEntry (PMMP_FAKE_HANDLE_LIST_ENTRY lpHandleEntry) {
115- EnterCriticalSection (&MmpFakeHandleListLock);
107+ EnterCriticalSection (&MmpGlobalDataPtr-> MmpDotNet . MmpFakeHandleListLock );
116108 RemoveEntryList (&lpHandleEntry->InMmpFakeHandleList );
117109 RtlFreeHeap (RtlProcessHeap (), 0 , lpHandleEntry);
118- LeaveCriticalSection (&MmpFakeHandleListLock);
110+ LeaveCriticalSection (&MmpGlobalDataPtr-> MmpDotNet . MmpFakeHandleListLock );
119111}
120112
121113HANDLE WINAPI HookCreateFileW (
@@ -156,7 +148,7 @@ BOOL WINAPI HookGetFileInformationByHandle(
156148 auto entry = (PLDR_DATA_TABLE_ENTRY)iter->value ;
157149 auto module = MapMemoryModuleHandle ((HMEMORYMODULE)entry->DllBase );
158150
159- lpFileInformation->ftCreationTime = lpFileInformation->ftLastAccessTime = lpFileInformation->ftLastWriteTime = AssemblyTimes;
151+ lpFileInformation->ftCreationTime = lpFileInformation->ftLastAccessTime = lpFileInformation->ftLastWriteTime = MmpGlobalDataPtr-> MmpDotNet . AssemblyTimes ;
160152 lpFileInformation->nFileSizeLow = module ->dwImageFileSize ;
161153
162154 return TRUE ;
@@ -185,7 +177,7 @@ BOOL WINAPI HookGetFileAttributesExW(
185177 LPWIN32_FILE_ATTRIBUTE_DATA data = (LPWIN32_FILE_ATTRIBUTE_DATA)lpFileInformation;
186178 auto module = MapMemoryModuleHandle ((HMEMORYMODULE)entry->DllBase );
187179
188- data->ftCreationTime = data->ftLastAccessTime = data->ftLastWriteTime = AssemblyTimes;
180+ data->ftCreationTime = data->ftLastAccessTime = data->ftLastWriteTime = MmpGlobalDataPtr-> MmpDotNet . AssemblyTimes ;
189181 data->nFileSizeLow = module ->dwImageFileSize ;
190182 return TRUE ;
191183 }
@@ -394,16 +386,16 @@ BOOL WINAPI MmpPreInitializeHooksForDotNet() {
394386
395387 EnterCriticalSection (NtCurrentPeb ()->FastPebLock );
396388
397- if (!g_PreHooked ) {
389+ if (!MmpGlobalDataPtr-> MmpDotNet . PreHooked ) {
398390 HMODULE hModule = LoadLibraryW (L" mscoree.dll" );
399391 if (hModule) {
400392 OriginGetFileVersion2 = (GetFileVersion_T)GetProcAddress (hModule, " GetFileVersion" );
401393 if (OriginGetFileVersion2) {
402394
403- GetSystemTimeAsFileTime (&AssemblyTimes);
395+ GetSystemTimeAsFileTime (&MmpGlobalDataPtr-> MmpDotNet . AssemblyTimes );
404396
405- InitializeCriticalSection (&MmpFakeHandleListLock);
406- InitializeListHead (&MmpFakeHandleListHead);
397+ InitializeCriticalSection (&MmpGlobalDataPtr-> MmpDotNet . MmpFakeHandleListLock );
398+ InitializeListHead (&MmpGlobalDataPtr-> MmpDotNet . MmpFakeHandleListHead );
407399
408400 DetourTransactionBegin ();
409401 DetourUpdateThread (NtCurrentThread ());
@@ -422,14 +414,14 @@ BOOL WINAPI MmpPreInitializeHooksForDotNet() {
422414
423415 DetourTransactionCommit ();
424416
425- g_PreHooked = TRUE ;
417+ MmpGlobalDataPtr-> MmpDotNet . PreHooked = TRUE ;
426418 }
427419 }
428420 }
429421
430422 LeaveCriticalSection (NtCurrentPeb ()->FastPebLock );
431423
432- return g_PreHooked ;
424+ return MmpGlobalDataPtr-> MmpDotNet . PreHooked ;
433425}
434426
435427BOOL WINAPI MmpInitializeHooksForDotNet () {
@@ -440,17 +432,17 @@ BOOL WINAPI MmpInitializeHooksForDotNet() {
440432
441433 EnterCriticalSection (NtCurrentPeb ()->FastPebLock );
442434
443- if (!g_PreHooked ) {
435+ if (!MmpGlobalDataPtr-> MmpDotNet . PreHooked ) {
444436 LeaveCriticalSection (NtCurrentPeb ()->FastPebLock );
445437 return FALSE ;
446438 }
447439
448- if (!g_Initialized ) {
440+ if (!MmpGlobalDataPtr-> MmpDotNet . Initialized ) {
449441 DetourTransactionBegin ();
450442 DetourUpdateThread (NtCurrentThread ());
451443 DetourAttach ((PVOID*)&OriginGetFileVersion1, HookGetFileVersion);
452444 DetourTransactionCommit ();
453- g_Initialized = TRUE ;
445+ MmpGlobalDataPtr-> MmpDotNet . Initialized = TRUE ;
454446 }
455447
456448 LeaveCriticalSection (NtCurrentPeb ()->FastPebLock );
0 commit comments