我想为各种流程中使用的某些资源创建事件,并按名称访问这些事件。问题似乎是所有引用它们的应用程序都必须知道事件的名称。
是否有办法在系统中获取名称事件列表?
我知道我可能会使用一些标准名称,但就未来的可扩展性而言似乎相当不灵活(所有应用程序都需要重新编译)。
我担心,我甚至不能考虑ZwOpenDirectoryObject,因为它被描述为需要Windows XP或更高版本,因此它是不可能的。谢谢你的建议。
我对共享内存有点不确定,因为到目前为止我还没有尝试过。我想可能会在那个区域做一些阅读。配置文件和注册表是一个小问题,因为由于访问问题,它们确实会因Vista而失败。我有点害怕,共享内存会有同样的问题。
使用ProcessExplorer的想法听起来很有希望。有没有人知道可以用于列出流程事件的API?而且,没有行政权利它是否有效?
感谢您的澄清。
没有真正的主过程。它不仅是从不同进程使用的驱动程序DLL,而且事件将用于“锁定”这些进程使用的资源。
我正在考虑建立一个即使在Vista下也具有足够访问权限的中央服务。它肯定会使事情复杂化,但它可能是唯一面临安全问题的事情。
答案 0 :(得分:2)
不,没有任何设施来枚举命名事件。您可以使用ZwOpenDirectoryObject枚举相应对象管理器目录中的所有对象,然后筛选事件。但是这个例程没有记录,因此不应该没有充分的理由使用。
为什么不使用单独的机制来共享事件名称?您可以在配置文件,注册表项或甚至共享内存中列出它们。
答案 1 :(得分:1)
ProcessExplorer能够枚举某些特定进程持有的所有命名事件。您可以查看整个流程列表并执行类似的操作,但我现在已经知道使用什么API来获取列表......
答案 2 :(得分:1)
不要将用户模式ZwOpenDirectoryObject与内核模式ZwOpenDirectoryObject混淆 - 内核模式API(http://msdn.microsoft.com/en-us/library/ms800966.aspx)确实似乎只在XP中可用,但用户模式版本应该至少可用于NT 4.无论如何,我不建议使用ZwOpenDirectoryObject。
为什么Vista上的配置文件和注册表项失败?当然,你必须正确地获得安全设置 - 但你必须为你的命名事件做到这一点 - 所以这里应该没有太大的区别。也许您应该告诉我们有关流程性质的更多详细信息 - 它们是在同一个登录会话中运行还是以不同的用户运行?是否有一些主要过程或谁首先创建事件?
坦率地说,我倾向于发现Process Explorer的想法不是很好。尽管你可能无法在没有使用未记录的API和/或设备驱动程序的情况下实现这一点,但我不认为进程应该在另一个进程的句柄表中进行处理,只是为了找出某些进程的名称。内核对象。当然,同样的安全问题再次适用。