実行中の EXE サーバーの登録
実行可能ファイル (EXE) サーバーを起動すると、CoRegisterClassObject が呼び出されます。このオブジェクトは、クラス テーブル (実行中のオブジェクト テーブルとは異なるテーブル) と呼ばれるサーバーの CLSID を登録します。 サーバーがクラス テーブルに登録されると、サービス コントロール マネージャー (SCM) は、サーバーが既に実行されているため、クラスを再度起動する必要はないと判断できます。 サーバーがクラス テーブルにリストされていない場合にのみ、SCM はレジストリで適切な値を確認し、指定された CLSID に関連付けられたサーバーを起動します。
クラスの CLSID と、その IUnknown インターフェイスへのポインターを CoRegisterClassObject に渡します。 その後、この CLSID で CoGetClassObject を呼び出すクライアントは、セキュリティによって禁止されていない限り、要求されたインターフェイスへのポインターを取得します。 (複数のインスタンス作成関数とアクティブ化関数の説明を示す、「インスタンス作成ヘルパー関数」を参照してください。)
次のすべてが当てはまる場合、クラス オブジェクトのサーバーは、CoRevokeClassObject を呼び出してクラス オブジェクトを取り消す (登録を削除する) 必要があります。
- オブジェクト定義の既存のインスタンスはありません。
- クラス オブジェクトに対するロックはありません。
- クラス オブジェクトにサービスを提供するアプリケーションは、ユーザーの制御下にありません (ディスプレイ上でユーザーには表示されません)。
関連トピック