2015-06-12 46 views
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的管理员。

谢谢你的帮助。

+0

当您调用'MiniDumpWriteDump'以获取有关错误的更多详细信息时,您是否尝试提供'* MINIDUMP_EXCEPTION_INFORMATION'对象而不是第一个'NULL'参数? – CristiFati

+0

是的,但我不知道为“ThreadId:抛出异常的线程的标识符”设置了什么。我没有任何例外。 – Jeremy

回答