我想用 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 文件总是空的,而句柄不为空,我找不到为什么会出现这个问题?(使用 ProcDump 等其他工具,我要转储的进程大约为 75mb)。
编辑:这是 GetLastError() 给出的错误代码:-2147024597