Annotation of mstools/samples/sdktools/walker/probe.c, revision 1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.