次のコードを実行するサービスがあります。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, ¤tToken);
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;