CoInitializeSecurity 関数 (combaseapi.h)

セキュリティを登録し、プロセスの既定のセキュリティ値を設定します。

構文

HRESULT CoInitializeSecurity(
  [in, optional] PSECURITY_DESCRIPTOR        pSecDesc,
  [in]           LONG                        cAuthSvc,
  [in, optional] SOLE_AUTHENTICATION_SERVICE *asAuthSvc,
  [in, optional] void                        *pReserved1,
  [in]           DWORD                       dwAuthnLevel,
  [in]           DWORD                       dwImpLevel,
  [in, optional] void                        *pAuthList,
  [in]           DWORD                       dwCapabilities,
  [in, optional] void                        *pReserved3
);

パラメーター

[in, optional] pSecDesc

サーバーが呼び出しの受信に使用するアクセス許可。 このパラメーターは、サーバーが CoInitializeSecurity を呼び出す場合にのみ COM によって使用されます。 その値は、AppID、 IAccessControl オブジェクト、または絶対形式の SECURITY_DESCRIPTORの 3 種類のいずれかを指すポインターです。 詳細については、次の「解説」を参照してください。

[in] cAuthSvc

asAuthSvc パラメーター内のエントリの数。 このパラメーターは、サーバーが CoInitializeSecurity を呼び出す場合にのみ COM によって使用されます。 このパラメーターが 0 の場合、認証サービスは登録されません。また、サーバーはセキュリティで保護された呼び出しを受信できません。 値 -1 は、登録する認証サービスを選択するように COM に指示します。その場合、 asAuthSvc パラメーターは NULL である必要があります。 ただし、このパラメーターが -1 の場合、サーバーによって Schannel が認証サービスとして選択されることはありません。

[in, optional] asAuthSvc

サーバーが呼び出しの受信に使用する認証サービスの配列。 このパラメーターは、サーバーが CoInitializeSecurity を呼び出す場合にのみ COM によって使用されます。 詳細については、「 SOLE_AUTHENTICATION_SERVICE」を参照してください。

[in, optional] pReserved1

このパラメーターは予約済みであり、 NULL である必要があります。

[in] dwAuthnLevel

プロセスの既定の認証レベル。 サーバーとクライアントはどちらも 、CoInitializeSecurity を呼び出すときにこのパラメーターを使用します。 COM は、低い認証レベルで到着した呼び出しに失敗します。 既定では、すべてのプロキシで少なくともこの認証レベルが使用されます。 この値には、 認証レベルの定数のいずれかを含める必要があります。 既定では、 IUnknown への呼び出しはすべてこのレベルで行われます。

[in] dwImpLevel

プロキシの既定の偽装レベル。 このパラメーターの値は、プロセスがクライアントの場合にのみ使用されます。 RPC_C_IMP_LEVEL_DEFAULTを除き、 権限借用レベルの定数の値にする必要があります。 これは、CoInitializeSecurity では使用できません。

クライアントからの発信呼び出しでは、常に指定された権限借用レベルが使用されます。 (ネゴシエートされません。クライアントへの着信呼び出しは、任意の権限借用レベルにすることができます。 既定では、すべての IUnknown 呼び出しはこの偽装レベルで行われるので、セキュリティ対応アプリケーションでもこのレベルを慎重に設定する必要があります。 各認証サービスでサポートされる偽装レベルを確認するには、 COM およびセキュリティ パッケージの認証サービスの説明を参照してください。 偽装レベルの詳細については、「 偽装」を参照してください。

[in, optional] pAuthList

SOLE_AUTHENTICATION_LISTへのポインター。これは、SOLE_AUTHENTICATION_INFO構造体の配列です。 この一覧は、クライアントがサーバーの呼び出しに使用できる各認証サービスの情報を示します。 このパラメーターは、クライアントが CoInitializeSecurity を呼び出す場合にのみ COM によって使用されます。

[in] dwCapabilities

1 つ以上の EOLE_AUTHENTICATION_CAPABILITIES 値を設定して指定された、クライアントまたはサーバーの追加機能。 これらの値の一部は同時に使用できず、特定の認証サービスが使用されている場合は設定できないものがあります。 これらのフラグの詳細については、「解説」セクションを参照してください。

[in, optional] pReserved3

このパラメーターは予約済みであり、 NULL である必要があります。

戻り値

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

リターン コード 説明
S_OK
成功を示します。
RPC_E_TOO_LATE

CoInitializeSecurity は既に呼び出されています。

RPC_E_NO_GOOD_SECURITY_PACKAGES
asAuthSvc パラメーターが NULL ではなく、一覧のどの認証サービスも登録できませんでした。 asAuthSvc に保存された結果で、認証サービス固有のエラー コードを確認します。
E_OUT_OF_MEMORY
メモリが不足しています。

注釈

CoInitializeSecurity 関数は、セキュリティ レイヤーを初期化し、指定された値をセキュリティの既定値として設定します。 プロセスが CoInitializeSecurity を呼び出さない場合、COM はインターフェイスが初めてマーシャリングまたはマーシャリング解除されるときに自動的に呼び出し、システムの既定のセキュリティを登録します。 それまで、既定のセキュリティ パッケージは登録されません。

この関数は、明示的または暗黙的に、プロセスごとに 1 回だけ呼び出されます。 クライアント、サーバー、またはその両方によって呼び出すことができます。 CoInitializeSecurity を明示的に呼び出さないレガシ アプリケーションやその他のアプリケーションの場合、COM はレジストリの値を使用してこの関数を暗黙的に呼び出します。 レジストリを使用してプロセス全体のセキュリティを設定し、 CoInitializeSecurity を呼び出すと、 AppID レジストリ値は無視され 、CoInitializeSecurity 値が使用されます。

CoInitializeSecurity を使用すると、コンピューター全体のアクセス許可とアプリケーション固有のアクセス許可の両方をオーバーライドできますが、コンピューター全体の制限ポリシーをオーバーライドすることはできません。

pSecDesc が AppID を指している場合、EOAC_APPID フラグは dwCapabilities で設定する必要があり、EOAC_APPID フラグが設定されている場合、CoInitializeSecurity に対するその他のすべてのパラメーターは無視されます。 CoInitializeSecurity は、レジストリの AppID キーの下で認証レベルを検索し、それを使用して既定のセキュリティを決定します。 AppID キーを使用してセキュリティを設定する方法の詳細については、「レジストリを使用したセキュリティProcess-Wide設定」を参照してください。

pSecDescIAccessControl オブジェクトへのポインターである場合は、EOAC_ACCESS_CONTROL フラグを設定する必要があり、dwAuthnLevel を none にすることはできません。 IAccessControl オブジェクトは、プロセスを呼び出すことができるユーザーを決定するために使用されます。 DCOM は IAccessControlAddRef し、CoUninitialize が呼び出されたときに解放します。 IAccessControl オブジェクトの状態を変更しないでください。

pSecDescSECURITY_DESCRIPTORへのポインターである場合、dwCapabilities では、EOAC_APPIDフラグもEOAC_ACCESS_CONTROL フラグも設定できません。 SECURITY_DESCRIPTORの所有者とグループを設定する必要があり、DCOM が監査をサポートするまで、システム ACL は NULL である必要があります。 SECURITY_DESCRIPTORの随意 ACL (DACL) のアクセス制御エントリ (ACE) は、プロセスのオブジェクトへの接続を許可されている呼び出し元を確認するために使用されます。 ACE のない DACL ではアクセスが許可されませんが、 NULL DACL では誰からの呼び出しも許可されます。 ACL と ACE の詳細については、「Access Control モデル」を参照してください。 アプリケーションは AccessCheck (IsValidSecurityDescriptor ではなく) を呼び出して、CoInitializeSecurity を呼び出す前にSECURITY_DESCRIPTORが正しく形成されていることを確認する必要があります。

pSecDesc をNULL として渡すことを強くお勧めします。 適切な代替手段は、Everyone を許可する SECURITY_DESCRIPTOR を使用する場合です。 pSecDescNULL の場合、dwCapabilities のフラグは、次のように、サーバーが使用するアクセス許可を CoInitializeSecurity が定義する方法を決定します。

  • EOAC_APPID フラグが設定されている場合、 CoInitializeSecurity はレジストリでアプリケーションの.exe名を検索し、そこに格納されている AppID を使用します。
  • EOAC_ACCESS_CONTROL フラグが設定されている場合、 CoInitializeSecurity はエラーを返します。
  • EOAC_APPID フラグも EOAC_ACCESS_CONTROL フラグも設定されていない場合、 CoInitializeSecurity はローカル およびリモート匿名ユーザーを含むすべての呼び出し元を許可します。
EOAC_APPIDフラグとEOAC_ACCESS_CONTROL フラグの両方が dwCapabilities で設定されている場合、CoInitializeSecurity 関数はエラーを返します。

要件

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

こちらもご覧ください

CoSetProxyBlanket

COM のセキュリティ