Share via


CoRegisterPSClsid 関数 (combaseapi.h)

ダウンロードした DLL で、実行中のプロセス内でカスタム インターフェイスを登録し、マーシャリング コードでこれらのインターフェイスをマーシャリングできるようにします。

構文

HRESULT CoRegisterPSClsid(
  [in] REFIID   riid,
  [in] REFCLSID rclsid
);

パラメーター

[in] riid

登録するインターフェイスの IID へのポインター。

[in] rclsid

riid で指定されたカスタム インターフェイスのプロキシ/スタブ コードを含む DLL の CLSID へのポインター。

戻り値

この関数は、E_INVALIDARG、E_OUTOFMEMORY、S_OKの標準戻り値を返すことができます。

解説

通常、現在実行中のプロセスにインターフェイス ポインターをマーシャリングするコードは、レジストリの HKEY_CLASSES_ROOT\Interfaces セクションを読み取り、読み込まれる ProxyStub コードを含む DLL の CLSID を取得します。 既存のインターフェイスの ProxyStub CLSID を取得するために、 コードは CoGetPSClsid 関数を 呼び出します。

ただし、場合によっては、インプロセス ハンドラーまたはインプロセス サーバーで、レジストリに書き込まずにカスタム インターフェイスを使用できるようにするのが望ましい場合や必要な場合があります。 ネットワーク経由でダウンロードされた DLL には、ローカル レジストリにアクセスするためのアクセス許可さえも付与されていない可能性があります。また、コードが別のコンピューターで発生したため、セキュリティ上の理由から、ユーザーは制限付き環境で実行できます。 または、DLL にリモート サーバーとの通信に使用するカスタム インターフェイスがあり、それらのインターフェイスの ProxyStub コードを含めることもできます。 このような場合、DLL には、そのインターフェイスを登録する別の方法が必要です。 CoRegisterPSClsid は、 CoRegisterClassObject と組み合わせて使用することで、その代替手段を提供します。

DLL は、通常、次のコード フラグメントに示すように CoRegisterPSClsid を呼び出します。

HRESULT RegisterMyCustomInterface(DWORD *pdwRegistrationKey)
{
    HRESULT hr = CoRegisterClassObject(CLSID_MyProxyStubClsid,
        pIPSFactoryBuffer,
        CLSCTX_INPROC_SERVER,
        REGCLS_MULTIPLEUSE
        pdwRegistrationKey);
    if(SUCCEEDED)(hr))
    {
        hr = CoRegisterPSClsid(IID_MyCustomInterface, CLSID_MyProxyStubClsid);
    }
 
    return hr;
}

要件

   
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー combaseapi.h (Objbase.h を含む)
Library Ole32.lib
[DLL] Ole32.dll

関連項目

CoGetPSClsid

CoRegisterClassObject