|
|
1.1 ! root 1: #include "pwalk.h" ! 2: ! 3: ! 4: /* process globals */ ! 5: HANDLE hMMFile = 0; ! 6: LPPROBE lpProbe = NULL; ! 7: CONTEXT gContext; ! 8: DWORD gReturn; ! 9: LPVOID gLocation; ! 10: CRITICAL_SECTION gCS; ! 11: ! 12: ! 13: BOOL WINAPI ProbeProcess (HANDLE); ! 14: void WINAPI FreeProbe (); ! 15: void WINAPI GetFuncAddrInChildProc (char *, char *, DBGDLL *, LPVOID *); ! 16: ! 17: ! 18: /* entry point for DLL loading and unloading */ ! 19: BOOL WINAPI DllMain ( ! 20: HANDLE hModule, ! 21: DWORD dwFunction, ! 22: LPVOID lpNot) ! 23: { ! 24: switch (dwFunction) ! 25: { ! 26: case DLL_PROCESS_ATTACH: ! 27: ProbeProcess (hModule); ! 28: break; ! 29: ! 30: case DLL_PROCESS_DETACH: ! 31: FreeProbe (); ! 32: break; ! 33: ! 34: default: ! 35: break; ! 36: } ! 37: ! 38: return TRUE; ! 39: } ! 40: ! 41: ! 42: ! 43: /* function initializes port structures */ ! 44: BOOL WINAPI ProbeProcess ( ! 45: HANDLE hDLL) ! 46: { ! 47: char szMapFileName[MAX_PATH]; ! 48: ! 49: /* load name for global file mapping */ ! 50: LoadString (hDLL, IDS_MAPFILENAME, szMapFileName, MAX_PATH); ! 51: ! 52: /* ProcessWalker creates file mapping then child process attaches */ ! 53: if ((hMMFile = OpenFileMapping (FILE_MAP_WRITE, FALSE, szMapFileName))) ! 54: { ! 55: /* map global view of file for hook function access */ ! 56: lpProbe = (LPPROBE)MapViewOfFile (hMMFile, FILE_MAP_WRITE, 0, 0, 0); ! 57: ! 58: /* initialize known process specific information in probe */ ! 59: lpProbe->hProcess = GetCurrentProcess (); ! 60: lpProbe->hDefHeap = GetProcessHeap (); ! 61: } ! 62: ! 63: else ! 64: if (!(hMMFile = CreateFileMapping ((HANDLE)0xffffffff, ! 65: NULL, ! 66: PAGE_READWRITE, ! 67: 0, ! 68: 0x100000, ! 69: szMapFileName))) ! 70: return FALSE; ! 71: else ! 72: { ! 73: lpProbe = (LPPROBE)MapViewOfFile (hMMFile, FILE_MAP_WRITE, 0, 0, 0); ! 74: ResetProbe (); ! 75: } ! 76: ! 77: /* success */ ! 78: return TRUE; ! 79: } ! 80: ! 81: ! 82: ! 83: ! 84: /* release process objects */ ! 85: void WINAPI FreeProbe () ! 86: { ! 87: if (lpProbe != NULL) ! 88: /* remove child process objects */ ! 89: UnmapViewOfFile ((char *)lpProbe); ! 90: ! 91: CloseHandle (hMMFile); ! 92: } ! 93: ! 94: ! 95: ! 96: ! 97: /* function passes pointer to probe info back to ProcessWalker */ ! 98: LPPROBE WINAPI RetrieveProbeData () ! 99: { ! 100: return lpProbe; ! 101: } ! 102: ! 103: ! 104: ! 105: ! 106: /* reset probe data to null */ ! 107: void WINAPI ResetProbe () ! 108: { ! 109: lpProbe->hProcess = NULL; ! 110: lpProbe->hDefHeap = NULL; ! 111: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.