2008-08-30 26 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獲取列表了......

相關問題