【发布时间】:2017-06-12 20:34:12
【问题描述】:
我正在用 C# 和 C++/CLI 编写一个应用程序,并且我有暂停进程的代码。但是,我想防止它们被另一个进程(例如 Process Explorer)取消挂起。是否可以获得独占进程句柄或以其他方式阻止其他应用程序执行此操作?如果有,怎么做?
【问题讨论】:
-
我能给您的最佳指导是查看Process Security and Access Rights 上的 MSDN 文档。您可能能够修改正在暂停的进程的 ACL,以防止任何其他进程取消暂停它。然后,当您想取消暂停它时,您将再次修改 ACL,取消暂停,然后再次限制 ACL。但是,具有足够高权限的其他进程(例如
SeDebugPrivilege,您的应用可能也需要)可能仍会覆盖您的限制。 -
不管怎样,仅仅为您自己的应用程序获取
SeDebugPrivilege可能是一个相当大的挑战!我记得您的应用需要以SYSTEM用户身份运行,才能拥有足够的权限来修改自己的权限列表。 -
@ozeanix,如果你做得对的话。任何以管理员权限运行的进程都可以启用调试权限。 (好吧,无论如何,在默认配置中。)
-
进程句柄没有“共享模式”。您需要更改进程的 ACL 和所有权,并且可能需要更改其所有线程。当然,这不会影响管理用户。可能会以某种方式阻止内核模式下的访问,但这没什么意义。
-
@HarryJohnston 你对
SeDebugPrivilege的看法是对的——我想的是SeTcbPrivilege和SeAssignPrimaryToken。很久没有记住这些了!