2008-08-30 69 views
1

我想为跨各种进程使用的特定资源创建事件并按名称访问这些事件。问题似乎是所有引用它们的应用程序都必须知道事件的名称。是否可以在Windows中列出命名事件?

有没有可能获得系统中名称事件列表的方法?

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


我很害怕,我甚至不能考虑ZwOpenDirectoryObject,因为它被描述为需要Windows XP或更高,所以这是毫无疑问的。 (还是)感谢你的建议。

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

ProcessExplorer的想法听起来很有希望。有没有人知道一个可用于列出进程事件的API?而且,它没有管理权限吗?


谢谢您的澄清。

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

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

+0

你是什么意思的“事件”?你是指由Win32函数CreateEventEx或其他东西创建的事件吗? – Jeremy 2008-08-30 13:17:33

回答

1

不要混淆用户模式ZwOpenDirectoryObject与内核模式ZwOpenDirectoryObject - 内核模式API(http://msdn.microsoft.com/en-us/library/ms800966.aspx)确实似乎只适用于XP,但用户模式版本应至少自NT 4开始可用。无论如何,我不会推荐使用ZwOpenDirectoryObject。

为什么配置文件和注册表项在Vista上失败?当然,你必须得到安全设置 - 但你必须为你的指定事件做这件事 - 所以这里不应该有太大的区别。也许你应该告诉我们一些关于流程性质的更多细节 - 它们是否都在相同的登录会话中运行,或者它们是否以不同的用户身份运行?是否有一些主流程或者谁首先创建了这些事件?

坦率地说,我倾向于发现Process Explorer的想法不是很好。尽管事实上,如果不使用未公开的API和/或设备驱动程序,您可能无法完成此操作,但我不认为应该在另一个进程的句柄表中搜索某个进程,以找出某些进程的名称内核对象。当然,再次适用相同的安全问题。

2

不,没有任何设施可以枚举命名事件。您可以使用ZwOpenDirectoryObject枚举各个对象管理器目录中的所有对象,然后筛选事件。但是这个程序是无证的,因此不应该没有充分的理由使用。

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

1

ProcessExplorer能够枚举某些特定进程持有的所有命名事件。你可以遍历整个进程列表并做类似的事情,虽然我现在已经知道用什么API获取列表了......

相关问题