在 IsMemberOfAdministratorsGroup MSDN中的例子,有这样的代码:
if (!OpenThreadToken (GetCurrentThread(), TOKEN_QUERY|TOKEN_DUPLICATE, TRUE, &hToken))
{
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY|TOKEN_DUPLICATE, &hToken))
{
lastErr = GetLastError();
goto CLEANUP;
}
}
....
CLEANUP:
if (hToken)
{
CloseHandle (hToken);
hToken = NULL; // Set variable to same state as resource.
}
我不明白为什么如果 OpenThreadToken() 或 OpenProcessToken() 失败,我们需要尝试关闭 token 句柄。当两个函数失败但句柄已分配时是否有特殊情况?或者这只是一个错字(无论如何他们都是人类)?
最佳答案
如果两者都失败,hToken 仍为 0,并且 CloseHandle() 不会被调用....
关于winapi - 如果 OpenThreadToken 和 OpenProcessToken 都失败,为什么需要清理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3686754/