winapi - 如果 OpenThreadToken 和 OpenProcessToken 都失败,为什么需要清理?

标签 winapi error-handling

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/

相关文章:

c++ - 你必须注册一个对话框吗?

php - 引用 - 这个错误在 PHP 中是什么意思?

pointers - golang 和指针接收器中的自定义错误

sql-server - 无法理解此SQL语句?为什么会产生错误

c# - 无法将类型 'System.Action<mathstester.Program.OperationQuestionScore>'隐式转换为 'mathstester.Program.OperationQuestionScore'

c# - WinSpool OpenPrinter 访问被拒绝

c++ - 如何使用 SDL 获取 win32 文件浏览器?

c++ - 从 shell 扩展程序将项目插入到桌面右键单击菜单

c - 给定一个指针,找到它所在的堆 block

c# - 在 asp.net mvc 中返回错误的最佳做法是什么