0

假设我收到了用户模式应用程序中进程的句柄。我不知道它是从 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?但我没有找到可以使用的示例。

谢谢你

4

1 回答 1

2

这种类型的“检查我是否可以访问某些东西”总是最容易通过实际尝试做你真正想做的事情来解决,仔细检查每个阶段的错误。

无论如何,其他任何事情都受TOCTOU 约束,因此它不会真正帮助“预先检查”事物 - 您仍然需要大量检查执行实际工作的代码。

于 2013-04-15T09:00:39.780 回答