mirror of https://github.com/x64dbg/TitanEngine
fixed Resourcer::ExtractResourceFromFile which was broken ever since
This commit is contained in:
parent
fb03e9de19
commit
a37ce345e2
|
|
@ -27,7 +27,7 @@ __declspec(dllexport) bool TITCALL ResourcerFreeLoadedFile(LPVOID LoadedFileBase
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
__declspec(dllexport) bool TITCALL ResourcerExtractResourceFromFileEx(ULONG_PTR FileMapVA, char* szResourceType, char* szResourceName, char* szExtractedFileName)
|
__declspec(dllexport) bool TITCALL ResourcerExtractResourceFromFileEx(HMODULE hFile, char* szResourceType, char* szResourceName, char* szExtractedFileName)
|
||||||
{
|
{
|
||||||
|
|
||||||
HRSRC hResource;
|
HRSRC hResource;
|
||||||
|
|
@ -35,22 +35,22 @@ __declspec(dllexport) bool TITCALL ResourcerExtractResourceFromFileEx(ULONG_PTR
|
||||||
DWORD ResourceSize;
|
DWORD ResourceSize;
|
||||||
LPVOID ResourceData;
|
LPVOID ResourceData;
|
||||||
DWORD NumberOfBytesWritten;
|
DWORD NumberOfBytesWritten;
|
||||||
HANDLE hFile;
|
HANDLE hOutFile;
|
||||||
|
|
||||||
hResource = FindResourceA((HMODULE)FileMapVA, (LPCSTR)szResourceName, (LPCSTR)szResourceType);
|
hResource = FindResourceA(hFile, (LPCSTR)szResourceName, (LPCSTR)szResourceType);
|
||||||
if(hResource != NULL)
|
if(hResource != NULL)
|
||||||
{
|
{
|
||||||
hResourceGlobal = LoadResource((HMODULE)FileMapVA, hResource);
|
hResourceGlobal = LoadResource(hFile, hResource);
|
||||||
if(hResourceGlobal != NULL)
|
if(hResourceGlobal != NULL)
|
||||||
{
|
{
|
||||||
ResourceSize = SizeofResource((HMODULE)FileMapVA, hResource);
|
ResourceSize = SizeofResource(hFile, hResource);
|
||||||
ResourceData = LockResource(hResourceGlobal);
|
ResourceData = LockResource(hResourceGlobal);
|
||||||
EngineCreatePathForFile(szExtractedFileName);
|
EngineCreatePathForFile(szExtractedFileName);
|
||||||
hFile = CreateFileA(szExtractedFileName, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
hOutFile = CreateFileA(szExtractedFileName, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||||
if(hFile != INVALID_HANDLE_VALUE)
|
if(hOutFile != INVALID_HANDLE_VALUE)
|
||||||
{
|
{
|
||||||
WriteFile(hFile, ResourceData, ResourceSize, &NumberOfBytesWritten, NULL);
|
WriteFile(hOutFile, ResourceData, ResourceSize, &NumberOfBytesWritten, NULL);
|
||||||
EngineCloseHandle(hFile);
|
EngineCloseHandle(hOutFile);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -64,17 +64,14 @@ __declspec(dllexport) bool TITCALL ResourcerExtractResourceFromFileEx(ULONG_PTR
|
||||||
|
|
||||||
__declspec(dllexport) bool TITCALL ResourcerExtractResourceFromFile(char* szFileName, char* szResourceType, char* szResourceName, char* szExtractedFileName)
|
__declspec(dllexport) bool TITCALL ResourcerExtractResourceFromFile(char* szFileName, char* szResourceType, char* szResourceName, char* szExtractedFileName)
|
||||||
{
|
{
|
||||||
|
HMODULE hFile = NULL;
|
||||||
HANDLE FileHandle;
|
|
||||||
DWORD FileSize;
|
|
||||||
HANDLE FileMap;
|
|
||||||
ULONG_PTR FileMapVA;
|
|
||||||
bool bReturn;
|
bool bReturn;
|
||||||
|
|
||||||
if(MapFileEx(szFileName, UE_ACCESS_READ, &FileHandle, &FileSize, &FileMap, &FileMapVA, NULL))
|
hFile = LoadLibraryA(szFileName);
|
||||||
|
if(hFile != NULL)
|
||||||
{
|
{
|
||||||
bReturn = ResourcerExtractResourceFromFileEx(FileMapVA, szResourceType, szResourceName, szExtractedFileName);
|
bReturn = ResourcerExtractResourceFromFileEx(hFile, szResourceType, szResourceName, szExtractedFileName);
|
||||||
UnMapFileEx(FileHandle, FileSize, FileMap, FileMapVA);
|
FreeLibrary(hFile);
|
||||||
if(bReturn)
|
if(bReturn)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -85,17 +82,14 @@ __declspec(dllexport) bool TITCALL ResourcerExtractResourceFromFile(char* szFile
|
||||||
|
|
||||||
__declspec(dllexport) bool TITCALL ResourcerExtractResourceFromFileW(wchar_t* szFileName, char* szResourceType, char* szResourceName, char* szExtractedFileName)
|
__declspec(dllexport) bool TITCALL ResourcerExtractResourceFromFileW(wchar_t* szFileName, char* szResourceType, char* szResourceName, char* szExtractedFileName)
|
||||||
{
|
{
|
||||||
|
HMODULE hFile = NULL;
|
||||||
HANDLE FileHandle;
|
|
||||||
DWORD FileSize;
|
|
||||||
HANDLE FileMap;
|
|
||||||
ULONG_PTR FileMapVA;
|
|
||||||
bool bReturn;
|
bool bReturn;
|
||||||
|
|
||||||
if(MapFileExW(szFileName, UE_ACCESS_READ, &FileHandle, &FileSize, &FileMap, &FileMapVA, NULL))
|
hFile = LoadLibraryW(szFileName);
|
||||||
|
if(hFile != NULL)
|
||||||
{
|
{
|
||||||
bReturn = ResourcerExtractResourceFromFileEx(FileMapVA, szResourceType, szResourceName, szExtractedFileName);
|
bReturn = ResourcerExtractResourceFromFileEx(hFile, szResourceType, szResourceName, szExtractedFileName);
|
||||||
UnMapFileEx(FileHandle, FileSize, FileMap, FileMapVA);
|
FreeLibrary(hFile);
|
||||||
if(bReturn)
|
if(bReturn)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue