0

PID を持つプロセスのメモリをダンプしたい。以下は私のコードです:

#include <cstdio>
#include <windows.h>

#include <DbgHelp.h>
#include <tlhelp32.h>

void EnableDebugPriv()
{
HANDLE hToken;
LUID luid;
TOKEN_PRIVILEGES tkp;

OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);

LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid);

tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = luid;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

AdjustTokenPrivileges(hToken, false, &tkp, sizeof(tkp), NULL, NULL);

CloseHandle(hToken); 
}

int main( int, char *[] )
{
EnableDebugPriv();
DWORD procid = 880;
HANDLE myfile = CreateFile(L"test.out", GENERIC_ALL, 0, 
NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,NULL);
HANDLE processHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procid);


printf("%d", processHandle);
if (processHandle = nullptr) {

    printf("error while getting handle");
}
MiniDumpWriteDump(processHandle, procid, myfile, MiniDumpWithFullMemory, 
NULL, NULL, NULL);

DWORD error = GetLastError();
printf("%d",error);

}

プログラムを正しく実行するには管理者権限が必要なので、EnableDebugPriv() を使用します。

残念ながら、dump.out ファイルは常に空ですが、ハンドルは null ではありません。この問題が発生する理由がわかりません。(ダンプしたいプロセスは、ProcDump などの他のツールで約 75 MB です)。

編集:GetLastError()によって与えられたエラーコードは次のとおりです:-2147024597

4

0 に答える 0