首页 > 解决方案 > 进程后的 CloseHandle 不存在

问题描述

我做了一个简单的例子。

我只想知道在将手柄重新附加到新进程之前是否需要关闭手柄?

DWORD g_dwPid = 0;
HANDLE g_hProcess;
int _tWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) {

    while (TRUE) {

        DWORD dwPid = GetProcessIdByName(L"explorer.exe");
        if (dwPid && dwPid != g_dwPid) {
            g_dwPid = dwPid;

            g_hProcess = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, g_dwPid);
        }
        else
            CloseHandle(g_hProcess);

        Sleep(500);
    }
    return 0;
}

标签: c++

解决方案


是的,您应该始终关闭OpenProcess完成后返回的句柄。

文档中:

使用完手柄后,请务必使用该CloseHandle功能将其关闭。


推荐阅读