我想创build在各种进程中使用的特定资源的事件,并按名称访问这些事件。 问题似乎是所有引用它的应用程序必须知道事件的名称。
有没有办法获得系统中的名称事件列表?
我知道我可能会使用一些标准名称,但在未来的扩展性方面似乎相当不灵活(所有的应用程序都需要重新编译)。
我怕,我甚至不能考虑ZwOpenDirectoryObject,因为它被描述为需要Windows XP或更高版本,所以这是没有问题的。 (还是)感谢你的build议。
我有点不确定共享内存,因为我还没有尝试过。 我猜可能会在这方面做一些阅读。 configuration文件和registry是一个小问题,因为他们往往由于访问问题而失败。 我有点害怕,共享内存会有同样的问题。
ProcessExplorer的想法听起来很有希望。 有没有人知道一个API可以用于列出一个进程的事件? 而且,它没有pipe理权限吗?
谢谢你的澄清。
没有一个真正的主stream程。 这是更多的驱动程序的dll,从不同的进程中使用,这些事件将被用来“locking”这些进程使用的资源。
我正考虑build立一个即使在Vista下也有足够访问权限的中央服务。 这肯定会使事情复杂化,但这可能是安全问题面临的唯一问题。
不要将用户模式ZwOpenDirectoryObject与内核模式ZwOpenDirectoryObject混淆 – 内核模式API( http://msdn.microsoft.com/en-us/library/ms800966.aspx )确实似乎只适用于XP,但是用户模式版本应至少从NT 4起可用。无论如何,我不会推荐使用ZwOpenDirectoryObject。
为什么配置文件和注册表键在Vista上失败? 当然,你必须得到正确的安全设置 – 但是你必须为你的命名事件做这个 – 所以这里不应该有太大的区别。 也许你应该告诉我们关于你的进程本质的更多细节 – 它们是否都在相同的登录会话中运行,或者甚至是以不同的用户身份运行? 有没有一些主要的过程或谁创造的事件呢?
坦率地说,我倾向于发现Process Explorer的想法不是很好。 尽管事实上,如果不使用未公开的API和/或设备驱动程序,您可能无法完成此任务,但我不认为应该在另一个进程的句柄表中搜索某个进程,以便查找某些进程的名称内核对象。 当然,同样的安全问题再次适用。
不,没有任何设施可以枚举指定事件。 您可以使用ZwOpenDirectoryObject枚举各个对象管理器目录中的所有对象,然后筛选事件。 但是这个程序是无证的,所以不应该没有理由地使用。
为什么不使用单独的机制来共享事件名称? 你可以把它们列在一个配置文件,一个注册表项或甚至共享内存中。
ProcessExplorer能够枚举某些特定进程持有的所有命名事件。 你可以通过整个进程列表,并做类似的事情,虽然我现在已经知道用什么API来获取列表…