您的位置:首页 > 其它

VC 判断系统和程序是32位和64位

2014-04-10 00:46 483 查看
// CreateThreadTest.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <Windows.h>
#include <stdio.h>

DWORD WINAPI ThreadProc(LPVOID lpParam)
{
printf("ThreadProc \r\n");
return 0;
}
//判断是x86还是x64
int CrnGetImageFileMachine(char* lpFileName)
{
IMAGE_DOS_HEADER idh;
FILE *f = fopen(lpFileName, "rb");
fread(&idh, sizeof(idh), 1, f);
IMAGE_FILE_HEADER ifh;
fseek(f, idh.e_lfanew + 4, SEEK_SET);
fread(&ifh, sizeof(ifh), 1, f);
fclose(f);
return ifh.Machine;
}
BOOL IsWow64()
{
typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
LPFN_ISWOW64PROCESS fnIsWow64Process;
BOOL bIsWow64 = FALSE;
fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress( GetModuleHandle("kernel32"),"IsWow64Process");
if (NULL != fnIsWow64Process)
{
fnIsWow64Process(GetCurrentProcess(),&bIsWow64);
}
return bIsWow64;
}

int main(int argc, char* argv[])
{
HANDLE hThread = CreateThread(NULL,
0,
ThreadProc,
NULL,
0,
NULL);

char path[MAX_PATH];
ZeroMemory(path,MAX_PATH);
GetModuleFileName(NULL,path,MAX_PATH);
printf("main %s   \r\n",path);
if(IsWow64())
{
//x86程序时要加载SysWOW64
printf("IsWow64=true\n");
}else{
//x64程序直接运行在64系统上,不用加载SysWOW64
printf("IsWow64=false\n");
}

//C:\\Windows\\SysWOW64\\notepad.exe
int n = CrnGetImageFileMachine(path);//需要检测的可执行文件
if(n == 0x014C)
printf("x86\n");//32位
else if (n == 0x0200)
printf("IA64\n");//纯64位
else if (n == 0x8664)
printf("x64\n");//64位
else
printf("未知\n");

CloseHandle(hThread);
getchar();

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: