2009-07-14 18 views
1

私は私たちの製品で使用しているCOM inproc DLLを持っています。 誰かが、私たちがDLLから公開したインターフェイスとAPIを見つけたら、それらのAPIを簡単に呼び出すことができます。誰かが私のCOMインターフェイスAPIを呼び出すのを止める方法を教えてください。

不明なアプリケーションがAPIを呼び出さないようにする方法はありますか?

COMにいくつかの署名を追加できますか?

+0

関連性の高い回答を得るには、COMサーバーとクライアントの両方が使用できない言語/テクノロジを指定する必要があります。 – sharptooth

+0

クライアントとサーバーの両方にC++を使用しています – anand

+0

ATLまたはそれに類似していますか?それでは、単に「早期バインディング、タイプライブラリなし」に行くことができます。これはちょうどうまくいくでしょうし、誰もあなたが持っているインターフェースを調査することはできません。 – sharptooth

答えて

3

オブジェクトの使用を制御する正式な方法は、COMオブジェクトを作成するクラスファクトリにIClassFactory2を実装することです。

インターフェイスを説明するMSDNのリンクがあります。

IClassFactory2 at MSDN

実装を作成する利点は、誰ものIClassFactory2を通じて登録のハードルをクリアせずにインスタンスを取り出すことができないということです。

オブジェクトが作成されているすべての場所を調べて、オブジェクトが壊れていないことを確認する必要があります。いくつかの言語では、プロセスに苦労を少なくするための機能がすでに用意されています(例:VB6)が、インスタンスの作成はより重荷になります。

多くのインスタンス化アクティビティを持つオブジェクトを保護しようとしている場合、キーパラメータを追加するMastermindの方法を使用するか、正しく呼び出さなければならない何らかの種類のロック解除メソッドをインターフェイスに追加することができますその背後にあるコンポーネントを使用する前に

1

キーが間違っている場合に返されるメソッドに「キー」パラメータを追加できないようにするものはありません。

非常にシンプルですが、初心者には役に立ちます。

+0

私は誰かがAPIのコールを見つけるために専用されていると思いますが、キーは簡単に逆転できるように設計されています。 – anand

0

'key' paramの何らかの種類以外に、好奇心があなたの機能を発見してからそれを呼び出すことを防ぐことはできません。デバッガーといくつかの忍耐が必要です。完全に安全であるためには、認可されたコードが取得できる何らかの種類の証明書を要求する必要がありますが、それ以外のすべての証明書は証明書を検証できる必要があります。

2

インターフェイスをIUnknown(IDispatchなし)から直接継承させることができ、タイプライブラリをDLLに含めることはできません。こうすることで、タイプライブラリにアクセスできる人だけがサポートされているインターフェイスを見つけることができ、インターフェイスを発見する他の唯一の方法は推測することになります。このようにすれば、レジストリに公開されるクラス(CoCreateInstance()で作成可能なクラス)の数を最小限に抑え、専用のレジストリ公開クラスのファクトリメソッドのセットを使用することもできます。

これは、vtable初期バインディングのみがコンポーネントで動作することを意味します。また、(タイプライブラリが含まれていないため)このコンポーネントでデフォルトのコールマーシャリングを使用することもできません。これは実際の保護ではなく、物を隠すための方法です。

関連する問題