判断当前进程是否是64位的

判断当前进程是否是64位的,可以用到一个内核函数 IsWow64Process

https://docs.microsoft.com/en-us/windows/win32/api/wow64apiset/nf-wow64apiset-iswow64process

在用户层调用时这个函数需要自己从 kernel32.dll 中 导出


#include "stdafx.h"

#include <windows.h>
#include <tchar.h>

typedef BOOL(WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);

LPFN_ISWOW64PROCESS fnIsWow64Process;

BOOL IsWow64()
{
	BOOL bIsWow64 = FALSE;

	//IsWow64Process is not available on all supported versions of Windows.
	//Use GetModuleHandle to get a handle to the DLL that contains the function
	//and GetProcAddress to get a pointer to the function if available.

	fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(
		GetModuleHandle(TEXT("kernel32")), "IsWow64Process");

	if (NULL != fnIsWow64Process)
	{
		if (!fnIsWow64Process(GetCurrentProcess(), &bIsWow64))
		{
			//handle error
		}
	}
	return bIsWow64;
}

int main(void)
{
	if (IsWow64())
		_tprintf(TEXT("The process is running under WOW64.\n"));
	else
		_tprintf(TEXT("The process is not running under WOW64.\n"));

	return 0;
}