home *** CD-ROM | disk | FTP | other *** search
/ PC World 1999 October / PCWorld_1999-10_cd1.bin / Hardware / Drivers / APISpy / APISpy9x.cpp < prev    next >
C/C++ Source or Header  |  1999-07-24  |  4KB  |  148 lines

  1. // ----------------------------------- //
  2. //            APISpy32 v2.0            //
  3. //     Copyright 1999 Yariv Kaplan     //
  4. //          WWW.INTERNALS.COM          //
  5. // ----------------------------------- //
  6.  
  7. #include <windows.h>
  8. #include <tlhelp32.h>
  9. #include "apispy9x.h"
  10.  
  11. typedef HANDLE (WINAPI *CREATETOOLHELP32SNAPSHOT_PROC)(DWORD dwFlags, DWORD th32ProcessID);
  12. typedef BOOL (WINAPI *PROCESS32FIRST_PROC)(HANDLE hSnapshot, LPPROCESSENTRY32 lppe);
  13. typedef BOOL (WINAPI *PROCESS32NEXT_PROC)(HANDLE hSnapshot, LPPROCESSENTRY32 lppe);
  14. typedef BOOL (WINAPI *MODULE32FIRST_PROC)(HANDLE hSnapshot, LPMODULEENTRY32 lpme);
  15. typedef BOOL (WINAPI *MODULE32NEXT_PROC)(HANDLE hSnapshot, LPMODULEENTRY32 lpme);
  16.  
  17. CREATETOOLHELP32SNAPSHOT_PROC pCreateToolhelp32Snapshot;
  18. PROCESS32FIRST_PROC pProcess32First;
  19. PROCESS32NEXT_PROC pProcess32Next;
  20. MODULE32FIRST_PROC pModule32First;
  21. MODULE32NEXT_PROC pModule32Next;
  22.  
  23. bool InitToolhelp32()
  24. {
  25.   HMODULE hModule;
  26.  
  27.   hModule = GetModuleHandle("kernel32.dll");
  28.  
  29.   if (hModule == NULL)
  30.     return false;
  31.  
  32.   pCreateToolhelp32Snapshot = (CREATETOOLHELP32SNAPSHOT_PROC)GetProcAddress(hModule, "CreateToolhelp32Snapshot");
  33.  
  34.   if (pCreateToolhelp32Snapshot == NULL)
  35.     return false;
  36.  
  37.   pProcess32First = (PROCESS32FIRST_PROC)GetProcAddress(hModule, "Process32First");
  38.  
  39.   if (pProcess32First == NULL)
  40.     return false;
  41.  
  42.   pProcess32Next = (PROCESS32NEXT_PROC)GetProcAddress(hModule, "Process32Next");
  43.  
  44.   if (pProcess32Next == NULL)
  45.     return false;
  46.  
  47.   pModule32First = (MODULE32FIRST_PROC)GetProcAddress(hModule, "Module32First");
  48.  
  49.   if (pModule32First == NULL)
  50.     return false;
  51.  
  52.   pModule32Next = (MODULE32NEXT_PROC)GetProcAddress(hModule, "Module32Next");
  53.  
  54.   if (pModule32Next == NULL)
  55.     return false;
  56.  
  57.   return true;
  58. }
  59.  
  60.  
  61. bool GetProcessModule(DWORD dwOwnerProcessId, DWORD dwModuleId, MODULEENTRY32 *pModuleEntry32)
  62. {
  63.   HANDLE hSnapShot;
  64.   MODULEENTRY32 ModuleEntry32;
  65.   BOOL Result;
  66.  
  67.   hSnapShot = pCreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwOwnerProcessId);
  68.  
  69.   if (hSnapShot == (HANDLE)-1)
  70.     return false;
  71.  
  72.   ModuleEntry32.dwSize = sizeof(MODULEENTRY32);
  73.  
  74.   Result = pModule32First(hSnapShot, &ModuleEntry32);
  75.  
  76.   if (Result != TRUE)
  77.     return false;
  78.  
  79.   do
  80.   {
  81.     if (ModuleEntry32.th32ModuleID == dwModuleId)
  82.     {
  83.       CopyMemory(pModuleEntry32, &ModuleEntry32, sizeof(MODULEENTRY32));
  84.       return true;
  85.     }
  86.  
  87.   } while (pModule32Next(hSnapShot, &ModuleEntry32));
  88.  
  89.   CloseHandle(hSnapShot);
  90.  
  91.   return false;
  92. }
  93.  
  94.  
  95. bool GetProcessName9x(DWORD dwProcessId, PSTR pszProcessName)
  96. {
  97.   HANDLE hSnapShot;
  98.   PROCESSENTRY32 ProcessEntry32;
  99.   MODULEENTRY32 ModuleEntry32;
  100.   BOOL Result;
  101.   char *pszExtension;
  102.  
  103.   hSnapShot = pCreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  104.  
  105.   if (hSnapShot == (HANDLE)-1)
  106.     return false;
  107.  
  108.   ProcessEntry32.dwSize = sizeof(PROCESSENTRY32);
  109.  
  110.   Result = pProcess32First(hSnapShot, &ProcessEntry32);
  111.  
  112.   if (Result != TRUE)
  113.   {
  114.     CloseHandle(hSnapShot);
  115.     return false;
  116.   }
  117.  
  118.   do
  119.   {
  120.     Result = GetProcessModule(ProcessEntry32.th32ProcessID,
  121.                               ProcessEntry32.th32ModuleID,
  122.                               &ModuleEntry32);
  123.  
  124.     if (Result == false)
  125.       continue;
  126.  
  127.     if (dwProcessId == ProcessEntry32.th32ProcessID)
  128.     {
  129.       strcpy(pszProcessName, ModuleEntry32.szModule);
  130.  
  131.       strupr(pszProcessName);
  132.  
  133.       pszExtension = strstr(pszProcessName, ".EXE");
  134.       
  135.       if (pszExtension != NULL)
  136.         *pszExtension = '\0';
  137.  
  138.       return true;
  139.     }
  140.  
  141.   } while (pProcess32Next(hSnapShot, &ProcessEntry32));
  142.  
  143.   CloseHandle(hSnapShot);
  144.  
  145.   return false;
  146. }
  147.  
  148.