【发布时间】:2021-09-07 14:57:25
【问题描述】:
我相信调用CloseHandle() 只会关闭对句柄的引用?但是该事件在 Process Explorer 中仍然可见,并且未满足所需的功能。
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
if (Process32First(snapshot, &entry) == TRUE)
{
while (Process32Next(snapshot, &entry) == TRUE)
{
if (stricmp(entry.szExeFile, "program.exe") == 0)
{
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, entry.th32ProcessID);
HANDLE hEvent = OpenEventA(EVENT_ALL_ACCESS,FALSE,"openEvent");
// Do stuff..
int sucess = CloseHandle(hEvent);
}
}
count = 0;
}
CloseHandle(snapshot);
我做错了什么吗?为什么 Event 在 Process Explorer 中仍然可见?
【问题讨论】:
-
我会假设因为 CloseHandle 不会终止进程,它只是关闭句柄。
-
既然你可以打开事件,它必须已经存在——这增加了使用计数,
CloseHandle再次减少它,但它没有达到零,所以事件仍然存在。跨度> -
如果这是您的目标,那么摆脱它的唯一方法是关闭其上所有未完成的句柄。