// 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;
}
VC 判断系统和程序是32位和64位
最新推荐文章于 2017-03-31 16:33:15 发布