gpt4 book ai didi

c - MiniDumpWriteDump 另一个进程

转载 作者:太空宇宙 更新时间:2023-11-03 23:38:17 27 4
gpt4 key购买 nike

我正在尝试创建一项服务,目的是监控我公司创建的应用程序。

当应用进入无响应状态时,服务必须使用 MiniDumpWriteDump 生成一个转储。

问题是:当使用另一个进程的HANDLE时,MiniDumpWriteDump不起作用。 .dmp 文件保持为空。

GetLastError 返回 0xD0000008 (3489660936)

该函数是通过pid获取HANDLE:

void CDumpGenerator::FindAndSetHandle()
{
HANDLE hProcessSnap;
HANDLE hProcess;
PROCESSENTRY32 pe32;

EnableDebugPriv();

hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE)
return;

pe32.dwSize = sizeof(PROCESSENTRY32);

if (!Process32First(hProcessSnap, &pe32))
{
CloseHandle(hProcessSnap);

return;
}

do
{
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ | PROCESS_DUP_HANDLE, FALSE, pe32.th32ProcessID);

if (hProcess != NULL)
CloseHandle(hProcess);

if (pe32.th32ProcessID == this->pid)
{
this->processHandle = hProcess;

break;
}
} while (Process32Next(hProcessSnap, &pe32));

CloseHandle(hProcessSnap);
}

启用调试权限:

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);
}

我这样调用 MiniDumpWriteDump:

auto dumped = MiniDumpWriteDump(
this->processHandle,
this->pid,
hFile,
MINIDUMP_TYPE(MiniDumpNormal | MiniDumpWithThreadInfo | MiniDumpWithProcessThreadData | MiniDumpWithFullMemoryInfo),
nullptr,
&userStream,
nullptr);

当我将 this->processHandle 更改为 GetCurrentProcess() 时工作正常。

正在设置句柄:

enter image description here

这是 GetLastError()

enter image description here

最佳答案

我刚刚解决了删除这部分的问题

hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ | PROCESS_DUP_HANDLE, FALSE, pe32.th32ProcessID);

// This close handle
if (hProcess != NULL)
CloseHandle(hProcess);

这是一件看不见的简单事情。所以我们需要关闭代码的其他部分,如析构函数或其他任何东西。

关于c - MiniDumpWriteDump 另一个进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53446982/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com