1
我想创建一个简单的C++控制台应用程序,它转储给定进程的内存空间(例如的calc.exe)于是我就用MiniDumpWriteDump功能C++ MiniDumpWriteDump失败
下面是代码:
DWORD procID = 1150;
char* procName = "calc.exe";
// opens the dump file
HANDLE hFile = CreateFile("calc.dmp", GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if(hFile)
{
// opens the process
HANDLE hProcToDump = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, procID);
if(hProcToDump)
{
// dumps via the API
BOOL rv = MiniDumpWriteDump(hProcToDump, GetProcessId(hProcToDump), hFile, MiniDumpNormal, NULL, NULL, NULL);
HRESULT hr = GetLastError();
if(!rv)
printf("MiniDumpWriteDump failed.");
else
printf("Minidump OK!");
CloseHandle(hFile);
CloseHandle(hProcToDump);
}
}
但我得到的错误: GetLastError函数()= HRESULT 0x8007012b只有ReadProcessMemory或WriteProcessMemory的请求的一部分已完成
为什么? 注意:我是Win 7 x64的管理员。
谢谢你的帮助。
当您调用'MiniDumpWriteDump'以获取有关错误的更多详细信息时,您是否尝试提供'* MINIDUMP_EXCEPTION_INFORMATION'对象而不是第一个'NULL'参数? – CristiFati
是的,但我不知道为“ThreadId:抛出异常的线程的标识符”设置了什么。我没有任何例外。 – Jeremy