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