C++ReadFile崩溃问题

C++ ReadFile crash issue

本文关键字:问题 崩溃 C++ReadFile      更新时间:2023-10-16

我得到了以下代码:

HANDLE hFile = CreateFileA(path, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
OPEN_EXISTING, 0, NULL); 
std::cout << "File Handle: " << hFile << std::endl;
DWORD fileSize = GetFileSize(hFile, NULL);
PVOID fileBuffer = VirtualAlloc(NULL, fileSize, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
if (!fileBuffer) std::cout << "Couldn't allocate memory " << GetLastError() << std::endl;
// Read the DLL
if (!ReadFile(hFile, fileBuffer, fileSize, NULL, NULL)) std::cout << "Failed to read file " << GetLastError() << std::endl;

每次调用ReadFile时,我都会在KernelBase.dll中遇到访问冲突(0xC0000005)。另外,CreateFile显示

File Handle: 0000000000000040

一直以来,我都不太确定这是否正常——一个正常的手柄。

完整代码,来自调试器的错误,VS2017

编辑:如果我打印文件大小,它显示18。

来自ReadFile:的MSDN文档

lpNumberOfBytesRead〔out,optional〕

指向变量的指针接收使用同步hFile时读取的字节数参数ReadFile在执行任何工作或错误检查。如果这是异步的,请对此参数使用NULL操作以避免潜在的错误结果此参数可以只有当lpOverlapped参数不为NULL时才为NULL。了解更多信息信息,请参阅备注部分。

试试这个:

DWORD read;
if (!ReadFile(hFile, fileBuffer, fileSize, &read, NULL)) std::cout << "Failed to read file " << GetLastError() << std::endl;