// 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; }