假设我收到用户模式应用程序中进程的句柄。 我不知道它是从CrateProcess或OpenProcess调用返回的。 要使用此句柄调用GetProcessTimes,我需要PROCESS_QUERY_INFORMATION或PROCESS_QUERY_LIMITED_INFORMATION访问权限。 最简单的方法是调用DuplicateHandle(使用PROCESS_QUERY_INFORMATION或PROCESS_QUERY_LIMITED_INFORMATION),但是再次需要PROCESS_DUP_HANDLE访问权限。 所以为了减少失败的可能性,我可以在句柄上调用GetProcessTimes,如果成功则一切正常,不过我会复制具有所需访问权限的句柄并再次调用GetProcessTimes。
我想知道在我第一次调用GetProcessTimes以进一步减少开销之前是否可以检查给定进程是否具有ROCESS_QUERY_INFORMATION或PROCESS_QUERY_LIMITED_INFORMATION访问权限。 在msdn上四处看看,我想我应该使用GetSecurityInfo?但我没有找到可以使用的例子。
谢谢
答案 0 :(得分:2)
这种类型的“检查我是否可以访问某些内容”总是最容易通过实际尝试做你想要做的事情来解决,仔细检查每个阶段的错误。
其他任何事情都以TOCTOU为准,因此“预先检查”事情并不会真正有用 - 你仍然需要在执行实际工作的代码中进行大量检查。