Как определить, является ли процесс 32 или 64 бит?

учитывая дескриптор процесса Windows, как я могу определить, используя код C++, является ли процесс 32 бит или 64 бит?

2 ответов


Если у вас есть дескриптор модуля, то вы можете сделать это:

IMAGE_NT_HEADERS * headers = ImageNtHeader(handle);

if ( headers->FileHeader.Machine == IMAGE_FILE_MACHINE_I386 )
{
    //module is x86
}
else if  ( headers->FileHeader.Machine == IMAGE_FILE_MACHINE_AMD64 )
{
    //module is x64
}

Я принял помощь от мой собственный ответ.


если у вас есть дескриптор процесса, использовать IsWow64Process().

если IsWow64Process() сообщает true, процесс 32-разрядный работает на 64-разрядной ОС.

если IsWow64Process() сообщает false (или не существует в kernel32.dll), то процесс либо 32-разрядный работает на 32-разрядной ОС, либо 64-разрядный работает на 64-разрядной ОС. Чтобы узнать, является ли сама ОС 32-разрядной или 64-разрядной, используйте GetNativeSystemInfo() (или GetSystemInfo() если GetNativeSystemInfo() недоступен в kernel32.dll).