1

さまざまなプロセスで使用される特定のリソースのイベントを作成し、これらのイベントに名前でアクセスしたいと考えています。問題は、イベントを参照するすべてのアプリケーションがイベントの名前を認識していなければならないことです。

システム内の名前イベントのリストを取得する方法はありますか?

いくつかの標準名を使用する可能性があることは承知していますが、将来の拡張性に関して柔軟性がないように思われます (すべてのアプリケーションで再コンパイルが必要になります)。


残念ながら、ZwOpenDirectoryObject については、Windows XP 以上が必要と記載されているため、検討することもできません。しかし、提案をありがとう。

これまでに試したことがないため、共有メモリについては少しわかりません。私が推測するその分野でいくつかの読書をするかもしれません。構成ファイルとレジストリは、アクセスの問題により Vista で失敗する傾向があるため、わずかな問題です。共有メモリにも同じ問題が発生するのではないかと少し心配しています。

ProcessExplorer のアイデアは有望に思えます。プロセスのイベントを一覧表示するために使用できる API を知っている人はいますか? また、管理者権限がなくても機能しますか?


明確にしていただきありがとうございます。

実際にはマスタープロセスはありません。さまざまなプロセスから使用されるのはドライバー dll であり、イベントはこれらのプロセスによって使用されるリソースを「ロック」するために使用されます。

Vista でも十分なアクセス権を持つセントラル サービスをセットアップすることを考えています。それは確かに物事を複雑にしますが、セキュリティ上の問題に直面している唯一のものかもしれません.

4

3 に答える 3

2

いいえ、名前付きイベントを列挙する機能はありません。ZwOpenDirectoryObject を使用して、それぞれのオブジェクト マネージャー ディレクトリ内のすべてのオブジェクトを列挙し、イベントをフィルター処理できます。ただし、このルーチンは文書化されていないため、正当な理由がない限り使用しないでください。

イベント名を共有するために別のメカニズムを使用しないのはなぜですか? それらを構成ファイル、レジストリキー、または共有メモリにリストすることもできます。

于 2008-08-30T08:39:48.373 に答える
1

ユーザー モードの ZwOpenDirectoryObject とカーネル モードの ZwOpenDirectoryObject を混同しないでください。カーネル モード API ( http://msdn.microsoft.com/en-us/library/ms800966.aspx ) は実際には XP の時点でのみ利用できるようですが、ユーザー モード バージョンは、少なくとも NT 4 以降で利用できるはずです。とにかく、ZwOpenDirectoryObject の使用はお勧めしません。

Vista で構成ファイルとレジストリ キーが失敗するのはなぜですか? もちろん、セキュリティ設定を正しく行う必要がありますが、名前付きイベントについても同様に設定する必要があります。したがって、ここで大きな違いはないはずです。プロセスの性質についてもう少し詳しく教えてください。それらはすべて同じログオン セッション内で実行されますか、それとも別のユーザーとして実行されますか? そもそもイベントを作成するマスター プロセスはありますか?

率直に言って、私は Process Explorer のアイデアがあまり良くないと思う傾向があります。文書化されていない API やデバイス ドライバーを使用しないと、おそらくそれを達成できないという事実にもかかわらず、あるプロセスの名前を見つけるためだけに、プロセスが別のプロセスのハンドル テーブルを探索する必要があるとは思いません。カーネル オブジェクト。そしてもちろん、同じセキュリティの問題が再び当てはまります。

于 2008-08-30T11:58:22.887 に答える
1

ProcessExplorerは、特定のプロセスが保持するすべての名前付きイベントを列挙できます。プロセスリスト全体を調べて、同様のことを行うことができますが、リストを取得するためにどのAPIが使用されているかについての手がかりが得られました...

于 2008-08-30T08:59:10.400 に答える