English 中文(简体)
是否可以在Windows中列出命名事件?
原标题:
  • 时间:2008-08-30 06:56:31
  •  标签:

我想为在各种进程中使用的某些资源创建事件,并按名称访问这些事件。问题似乎在于,所有引用事件的应用程序都必须知道事件的名称。

有没有办法在系统中获取名称事件列表?

我知道我可能会使用一些标准名称,但在未来的可扩展性方面似乎相当不灵活(所有应用程序都需要重新编译)。


恐怕,我甚至不能考虑ZwOpenDirectoryObject,因为它被描述为需要Windows XP或更高版本,所以它是不可能的。不过还是谢谢你的建议。

我对共享内存有点不确定,因为到目前为止我还没有尝试过。我想可能会在这方面做一些阅读。配置文件和注册表是一个小问题,因为在Vista中,由于访问问题,它们往往会失败。我有点担心,共享内存也会出现同样的问题。

ProcessExplorer的想法听起来很有希望。有人知道可以用来列出流程事件的API吗?而且,它在没有行政权利的情况下工作吗?


谢谢你的澄清。

并没有一个真正的主过程。它更像是不同进程使用的驱动程序dll,事件将用于“锁定”这些进程使用的资源。

我正在考虑建立一个中央服务,即使在Vista下也有足够的访问权限。这肯定会使事情复杂化,但这可能是唯一面临安全问题的事情。

最佳回答

不要将用户模式ZwOpenDirectoryObject与内核模式ZwOpenDirectoryObject混淆——内核模式API(http://msdn.microsoft.com/en-us/library/ms800966.aspx)似乎只从XP开始可用,但用户模式版本应该至少从NT 4开始可用。无论如何,我不建议使用ZwOpenDirectoryObject。

为什么配置文件和注册表项在Vista上会失败?当然,您必须正确设置安全性,但您也必须对命名的事件这样做,所以这里应该没有太大的区别。也许你应该告诉我们更多关于进程性质的细节——它们是在同一登录会话中运行,还是作为不同的用户运行?有没有一些主过程,或者是谁首先创造了这些事件?

坦率地说,我倾向于发现Process Explorer的想法不是很好。尽管如果不使用未记录的API和/或设备驱动程序,您可能无法实现这一点,但我不认为一个进程应该在另一个进程的句柄表中查找一些内核对象的名称。当然,同样的安全问题也同样适用。

问题回答

不,没有任何工具可以枚举命名事件。您可以使用ZwOpenDirectoryObject枚举相应对象管理器目录中的所有对象,然后筛选事件。但是这个程序是没有记录的,因此在没有充分理由的情况下不应该使用。

为什么不使用单独的机制来共享事件名称?您可以在配置文件、注册表项甚至共享内存中列出它们。

ProcessExplorer能够枚举某个特定进程所持有的所有命名事件。您可以查看整个进程列表并执行类似的操作,尽管我现在知道使用什么API来获取列表。。。





相关问题
热门标签