3

次のコードを実行するサービスがあります。CreateProcessAsUser がヒットするたびに、メモリが 4K 増加します (タスク マネージャーで確認できます)。CreateProcess で使用すると、それは起こりません。

なぜそれが起こっているのですか、どうすればこの記憶を解放できますか?

PWTS_SESSION_INFO pSessionInfo = 0;
DWORD dwCount = 0;
int dwSessionId = 0;

WTSEnumerateSessions(WTS_CURRENT_SERVER_HANDLE, 0, 1, &pSessionInfo, &dwCount);
for(DWORD i = 0; i < dwCount; ++i)
{
    WTS_SESSION_INFO si = pSessionInfo[i];
    if (WTSActive == si.State)
    {
        dwSessionId = si.SessionId;
        break;
    }
}
WTSFreeMemory(pSessionInfo);

HANDLE currentToken;
BOOL bRet = WTSQueryUserToken(dwSessionId, &currentToken);
if (bRet == false)
{
    return 0;
}

PROCESS_INFORMATION pi;
STARTUPINFO si;
memset(&si, 0, sizeof(si));
si.cb = sizeof(si);
if (CreateProcessAsUser(currentToken, "MY_EXE.exe", "MY_ARGS_STR", NULL, NULL, false, 0, NULL, NULL, &si, &pi))
{
    if (pi.hProcess != NULL)
    {
        CloseHandle(pi.hProcess);
    }
    if (pi.hThread != NULL)
    {
        CloseHandle(pi.hThread);
    }
}
CloseHandle(currentToken);

return 0;
4

0 に答える 0