アプリケーションがインストールまたは削除されるたびに、レジストリのキーが変更/追加/削除されるタイミングを監視したいと考えています。msdn(リンク) のサンプル コードをテストしましたが、正常に動作します。
しかし問題は、どのキーが実際に変更/追加/削除されたかがわからないことです。C++ を使用してこの情報を取得するにはどうすればよいですか?
方法は 3 つしかありませんが、どれも簡単で適切なものではありません。
RegNotifyChangeKeyValue
: 必要な情報は得られませんが、非常に使いやすいです。
EVENT_TRACE_FLAG_REGISTRY
これは、ProcMonが使用するEvent Tracing for Windowsの一部です。それはうまく機能しますが、使用するのはかなり難しいです。
使い方がよくわかりませんが、わかったらここに投稿します。
CmRegisterCallback
: カーネル モード ドライバーが必要ですが、これは 64 ビットでは面倒です。
しかし、それ以外の場合は最も完璧なソリューションです。
残念ながら、Event Tracing for Windows (EWT) では、イベント内の完全なキー パスを確認できません。部分的なキー名しか取得できず、奇妙なハンドルは実際にはキー コントロール ブロックです。このブロックから情報を取得するのは簡単ではありません。はい、プロセス モニターは EWT を使用しますが、プロバイダーとして Windows カーネル トレースを使用しません。