1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| BOOL ExtraceResourceFile(uint16_t resource_id, const TCHAR* output_file, TCHAR* type) { HANDLE hFile = NULL; HANDLE hFilemap = NULL; BOOL bRet = FALSE; do { HINSTANCE hInstance = ::GetModuleHandleW(nullptr); HRSRC hResource = FindResource(hInstance, MAKEINTRESOURCE(resource_id), type); if (hResource == nullptr) { break; } HGLOBAL hFileResource = LoadResource(nullptr, hResource); if (hFileResource == nullptr) { break; } LPVOID lpFile = LockResource(hFileResource); if (lpFile == nullptr) { break; } uint32_t dwSize = SizeofResource(nullptr, hResource); if (dwSize <= 0) { break; }
hFile = CreateFile((LPCSTR)output_file, GENERIC_READ GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { break; } HANDLE hFilemap = CreateFileMapping(hFile, nullptr, PAGE_READWRITE, 0, dwSize, nullptr); if (hFilemap == NULL) { break; } LPVOID lpBaseAddress = MapViewOfFile(hFilemap, FILE_MAP_WRITE, 0, 0, 0); if (lpBaseAddress == NULL) { break; } CopyMemory(lpBaseAddress, lpFile, dwSize); UnmapViewOfFile(lpBaseAddress); bRet = TRUE; } while (0);
if (hFilemap != NULL) { CloseHandle(hFilemap); } if (hFile != INVALID_HANDLE_VALUE && hFile != NULL) { CloseHandle(hFile); } return bRet; }
|