CreateFileMapping/MapViewOfFile and 0xC0000005 (ACCESS_DENIED)
Hi All,
Debug is Broken, Release is OK. I've got test cases down to failures
on LARGE files in Debug Builds. The reason the large file does not
exist in Release: Debug information is stripped (I'm literally probing
my own EXE).
The original FileMapping code was shamelessly ripped from Matt
Pietrek's 'An In-Depth Look into the Win32 Portable Executable File
Format' (http://msdn.microsoft.com/msdnmag/issues/02/02/PE/). I can't
seem to find what is wrong with the original useage.
I suspect this has to do with the Memory Manager's ability to keep
up... The only thing I tried at this point is ORing in SEC_COMMIT on
CreateFileMapping - with no joy.
Other statistics:
File: C:\...\Debug\CodeDump.exe
Image Base: 00640000
Virtual Address: 000A5000
.text Start: 006E5000
.text Size: 0015D5CE
.text End: 008425CE
Image Base is the pointer returned from MapViewOfFile() - verified.
Virtual Address 000A5000 has been verified using PE Browse
..text Start: 006E5000 has been verified using PE Browse
..text Size: 0015D5CE has been verified using PE Browse
..text End: 008425CE has been verified using PE Browse
The Access Violation occurs within the range of '.text Start'/'.text
End'. Taking from the Output Windows of Visual Studio: First-chance
exception at 0x0053b4f6 in CodeDump.exe: 0xC0000005: Access violation
reading location 0x007d9000.
Any ideas? Below is how I am using CreateFileMapping/MapViewOfFile.
Jeff
/////////////////////////////////////////////////
if( 0 == GetModuleFileName( NULL, szFilename, PATH_SIZE ) )
{
std::cout << _T("Error Retrieving Process Filename") << std::endl;
__leave;
}
/////////////////////////////////////////////////////////////
hFile = CreateFile( szFilename, GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if ( hFile == INVALID_HANDLE_VALUE )
{
std::cout << _T("Error - CreateFile()") << std::endl;
__leave;
}
/////////////////////////////////////////////////////////////
hFileMapping = CreateFileMapping(hFile, NULL,
PAGE_READONLY, 0, 0, NULL);
if ( NULL == hFileMapping )
{
std::cout << _T("Error - CreateFileMapping()") << std::endl;
__leave;
}
/////////////////////////////////////////////////////////////
PVOID pMappedFile = NULL;
pMappedFile = MapViewOfFile(hFileMapping, FILE_MAP_READ, 0, 0, 0);
if ( NULL == pMappedFile )
{
std::cout << _T("Error - MapViewOfFile()") << std::endl;
__leave;
}