prüfen ob ein laufender process x64 o. x86 -prozess ist?
-
Hallo,
der Titel sagt schon alles. Die Prüfung soll auf x86 als auch auf x64 Systemen funktionieren. Habt ihr Ideen?bool is_x64(DWORD pid) {... // sowas in der art brauche ich
Danke.
-
http://msdn.microsoft.com/en-us/library/ms684139.aspx + http://msdn.microsoft.com/en-us/library/ms724340.aspx
-
dot schrieb:
http://msdn.microsoft.com/en-us/library/ms684139.aspx + http://msdn.microsoft.com/en-us/library/ms724340.aspx
wird leider so nichts, habs etwas anders gelöst.
lösung kommt gleich.
-
MisterNop schrieb:
wird leider so nichts [...]
Warum!? Wofür brauchst du das überhaupt?
-
int ProcIs64(DWORD pid) { HMODULE ntdll = GetModuleHandleA("ntdll"); if(!ntdll) { return -1; } LONG (NTAPI *_NtQueryInformationProcess)( HANDLE, PROCESSINFOCLASS, PVOID, ULONG, PULONG) = (LONG (NTAPI*)(HANDLE, PROCESSINFOCLASS, PVOID, ULONG, PULONG)) GetProcAddress(ntdll, "NtQueryInformationProcess"); if(!_NtQueryInformationProcess) { return -1; } HANDLE process = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ, FALSE, pid); if(!process) { return -1; } PROCESS_BASIC_INFORMATION pbi; RtlZeroMemory(&pbi, sizeof(PROCESS_BASIC_INFORMATION)); _NtQueryInformationProcess(process, ProcessBasicInformation, &pbi, sizeof(PROCESS_BASIC_INFORMATION), NULL); CloseHandle(process); if(pbi.PebBaseAddress) { return 0; } return 1; }
-
Hä!? Wie soll das funktionieren und warum machst du mit der ntdll rum anstatt die WinAPI zu verwenden?
-
msdn schrieb:
NtQueryInformationProcess may be altered or unavailable in future versions of Windows. Applications should use the alternate functions listed in this topic.
...
It is best to use the IsWow64Process function to determine whether a process is running in the WOW64 environment
-
IsWow64Process macht nur für 32-Bit Prozesse sinn!!! Das war ja aber nicht die Frage, oder?
WObei ich die Frage nicht ganz verstehe....
WAS willst Du wissen?
Ob DEIN Prozess 32 oder 64 Bit ist?
Das kannst Du mit dem Makros _M_IX64 rausfinden; dazu brauchst Du keine Laufzeit!
-
Jochen Kalmbach schrieb:
IsWow64Process macht nur für 32-Bit Prozesse sinn!!! Das war ja aber nicht die Frage, oder?
Mit GetNativeSystemInfo bekommt man das System raus, wenn es ein 64bit-System ist, sind alle Prozesse, für die IsWow64Process true zurückliefert, 32bit-Prozesse, alle anderen 64bit-Prozesse. Unter einem 32bit-Windows ist sowieso alle 32bit.
-
ipsec schrieb:
Jochen Kalmbach schrieb:
IsWow64Process macht nur für 32-Bit Prozesse sinn!!! Das war ja aber nicht die Frage, oder?
Mit GetNativeSystemInfo bekommt man das System raus, wenn es ein 64bit-System ist, sind alle Prozesse, für die IsWow64Process true zurückliefert, 32bit-Prozesse, alle anderen 64bit-Prozesse. Unter einem 32bit-Windows ist sowieso alle 32bit.
Die beste Antwort. Danke!