1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| #include <windows.h> #include <stdio.h> #include <TlHelp32.h>
BOOL IsWow64(HANDLE hProcess) { typedef BOOL(WINAPI* LPFN_ISWOW64PROCESS) (HANDLE, PBOOL); LPFN_ISWOW64PROCESS fnIsWow64Process;
BOOL bIsWow64 = FALSE; fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress( GetModuleHandleA("kernel32"), "IsWow64Process");
if (NULL != fnIsWow64Process) { fnIsWow64Process(hProcess, &bIsWow64); } return bIsWow64; }
DWORD processNameToId(LPCTSTR lpszProcessName) { HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); PROCESSENTRY32W pe; pe.dwSize = sizeof(PROCESSENTRY32W); if (!Process32FirstW(hSnapshot, &pe)) { MessageBoxA(NULL, "The frist entry of the process list has not been copyied to the buffer", "Notice", MB_ICONINFORMATION | MB_OK); return 0; } while (Process32NextW(hSnapshot, &pe)) { if (!wcscmp(lpszProcessName, pe.szExeFile)) { return pe.th32ProcessID; } } return 0; }
int main() { BOOL bWow64; wchar_t* szExeName = L"Notepad.exe"; DWORD dwProcessId = processNameToId(szExeName); if (dwProcessId == 0) { MessageBoxA(NULL, "The target process have not been found !", "Notice", MB_ICONINFORMATION | MB_OK); return -1; } HANDLE hTargetProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId); if (!hTargetProcess) { MessageBoxA(NULL, "Open target process failed !", "Notice", MB_ICONINFORMATION | MB_OK); return 0; } bWow64 = IsWow64(hTargetProcess);
if (bWow64) printf("32-bit process\n"); else printf("64-bit process\n"); }
|