RCSMPolymer/peutils.h
HANDLE hPEFile;
HANDLE hMappedFile;
void UnloadPE(BYTE * FileBase)
{
if(FileBase != NULL)
UnmapViewOfFile((LPCVOID)FileBase);
if(hMappedFile != INVALID_HANDLE_VALUE)
CloseHandle(hMappedFile);
if(hPEFile != INVALID_HANDLE_VALUE)
CloseHandle(hPEFile);
}
LPVOID LoadPE(WCHAR *FileName, unsigned int * len)
{
if (FileName == NULL) {
return NULL;
}
hPEFile = CreateFile(FileName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if(hPEFile == INVALID_HANDLE_VALUE)
return NULL;
*len = (unsigned int) GetFileSize(hPEFile, NULL);
hMappedFile = CreateFileMapping( hPEFile, NULL, PAGE_READWRITE, NULL, *len, NULL);
if( hMappedFile == INVALID_HANDLE_VALUE )
{
CloseHandle(hPEFile);
return NULL;
}
LPVOID FileBase = MapViewOfFile(hMappedFile, FILE_MAP_READ | FILE_MAP_WRITE, NULL, NULL, 0);
if( FileBase == NULL)
{
CloseHandle(hPEFile);
CloseHandle(hMappedFile);
return NULL;
}
return FileBase;
}