C++判断exe是32位还是64位
生活随笔
收集整理的這篇文章主要介紹了
C++判断exe是32位还是64位
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
bool isPE64(TCHAR *filename)
{DWORD access_mode = (GENERIC_READ | GENERIC_WRITE);//共享模式DWORD share_mode = FILE_SHARE_READ | FILE_SHARE_WRITE;HANDLE hFile =CreateFile(filename,access_mode,share_mode,NULL,OPEN_ALWAYS,FILE_FLAG_SEQUENTIAL_SCAN,NULL);if (hFile == INVALID_HANDLE_VALUE) {return false;}DWORD high_size;DWORD file_size = GetFileSize(hFile, &high_size);DWORD mmf_size = 512 * 1024;DWORD size_high = 0;//創(chuàng)建文件映射,如果要?jiǎng)?chuàng)建內(nèi)存頁面文件的映射,第一個(gè)參數(shù)設(shè)置為INVALID_HANDLE_VALUEHANDLE hFm = CreateFileMapping(hFile,NULL,PAGE_READWRITE,size_high,mmf_size,NULL);if (hFm == NULL){CloseHandle(hFile);return false;}size_t view_size = 1024 * 256;DWORD view_access = FILE_MAP_ALL_ACCESS;//獲得映射視圖char* base_address = (char*)MapViewOfFile(hFm, view_access, 0, 0, view_size);if (base_address != NULL){bool flag;IMAGE_DOS_HEADER *pDos = (IMAGE_DOS_HEADER*)base_address;IMAGE_NT_HEADERS *pNt = (IMAGE_NT_HEADERS*)(pDos->e_lfanew + (char*)pDos);if (pNt->FileHeader.Machine == IMAGE_FILE_MACHINE_IA64 || pNt->FileHeader.Machine == IMAGE_FILE_MACHINE_AMD64)flag = true;elseflag = false;//卸載映射UnmapViewOfFile(base_address);//關(guān)閉內(nèi)存映射文件CloseHandle(hFm);//關(guān)閉文件CloseHandle(hFile);return flag;}else{return false;}
}
IMAGE_FILE_HEADER 中的Machine定義了PE文件的運(yùn)行環(huán)境,因此判斷該變量就可以獲取其可運(yùn)行的環(huán)境
總結(jié)
以上是生活随笔為你收集整理的C++判断exe是32位还是64位的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++通过vmware.exe检测虚拟机
- 下一篇: win10下c/c++隐藏进程