CoGetClassObjectおよび/またはCoCreateInstance呼び出しをフックまたはインターセプトする方法はありますか?

StackOverflow https://stackoverflow.com/questions/1604913

質問

COMをインターセプトしたい CoCreateInstanceEx および/または CoGetClassObject 関数が単体テストでクラスをテストシムに置き換えます。これは、単一のCLSIDのみに適用されます。他のすべては変更せずに通過できます。恐ろしい邪悪なハッキングなしでこれを行う方法はありますか?

役に立ちましたか?

解決

それはまさにあなたが望むものに依存します。

そのクラスをロードしているユーザーを検出する場合、またはクラスがロードされているかどうかを確認する場合は、プロセスモニター CoGetClassObject()(または CoCreateInstanceEx())を呼び出すと、 HKCR \ CLSID \ {対象クラスID} キーが読み取られますプロセスモニターでは、どのプロセスがいつ実行され、どの程度成功したかが表示されます。

既存のクラスを自分のものに置き換える場合-同じクラスIDのクラスのバージョンでライブラリをコンパイルし、 HKCR \ CLSID \ {対象のID}内のCOMサーバーへのパスを変更しますを使用して、ライブラリを使用してそのIDを持つクラスを提供します。手動またはregsvr32を使用してこれを行うことができます。最初に元のライブラリを登録し、次に自分のライブラリを登録して目的のクラスを上書きします。 COMはクラスIDを実行します->コンシューマが CoGetClassObject()または CoCreateInstanceEx()を呼び出したときに、そのキーを介したライブラリマッピング。

他のヒント

常に CoTreatAsClass 関数があります。 http://msdn.microsoft.com/en-us /library/ms693452(VS.85).aspx

しかし、あなたが述べたように、それはローカルな変更ではなく、システム全体のクラスの置き換えになります。

別の方法として、Shay Erlichmenのコメントが参照している投稿で提案されているように、CoCreateInstanceのフックを調べることもできます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top