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
|
bool ExtractResource(std::uint16_t ResourceID, std::string OutputFileName, const char* ResType)
{
try
{
HRSRC hResource = FindResource(NULL, MAKEINTRESOURCE(ResourceID), ResType);
if (hResource == NULL)
{
return false;
}
HGLOBAL hFileResource = LoadResource(NULL, hResource);
if (hFileResource == NULL)
{
return false;
}
void* lpFile = LockResource(hFileResource);
if (lpFile == NULL)
{
return false;
}
std::uint32_t dwSize = SizeofResource(NULL, hResource);
if (dwSize == 0)
{
return false;
}
HANDLE hFile = CreateFile(OutputFileName.c_str(), GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
HANDLE hFilemap = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, dwSize, NULL);
if (hFilemap == NULL)
{
return false;
}
void* lpBaseAddress = MapViewOfFile(hFilemap, FILE_MAP_WRITE, 0, 0, 0);
CopyMemory(lpBaseAddress, lpFile, dwSize);
UnmapViewOfFile(lpBaseAddress);
CloseHandle(hFilemap);
CloseHandle(hFile);
return true;
}
catch (...) {}
return false;
}
|