2015-06-12 42 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

回答