Win32 API 日本語リファレンス
ホームUI.Shell › ICredentialProvider

ICredentialProvider

COM
IIDd27c3481-5a1c-45b2-8aaa-c20ebbe8229e継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

資格情報プロバイダーのセットアップと操作に使用されるメソッドを公開します。すべての資格情報プロバイダーはこのインターフェイスを実装する必要があります。

解説(Remarks)

このインターフェイスは、アプリケーション用の Logon UI および Credential UI とやり取りするための手段です。

インスタンス化された資格情報プロバイダーは、Logon UI の存続期間全体にわたって保持されます。このため、Logon UI は資格情報プロバイダーの状態を保持できます。特に、どのプロバイダーとタイルが資格情報を提供したかを記憶します。つまり、CREDENTIAL_PROVIDER_USAGE_SCENARIOCPUS_LOGONCPUS_UNLOCK_WORKSTATIONCPUS_CHANGE_PASSWORD の場合には、状態情報を保存できる可能性があります。Credential UI ではこれは当てはまりません。Credential UI は、アプリケーションが CredUIPromptForWindowsCredentials を呼び出すたびに、プロバイダーの新しいインスタンスを作成します。このため、Credential UI は資格情報プロバイダーの状態を記憶できません。

あるシナリオで生成された CREDENTIAL_PROVIDER_CREDENTIAL_SERIALIZATION が保存され、後続の使用シナリオで使用される可能性があることに注意してください。このため、ICredentialProvider の実装がこのシナリオを処理できるだけの堅牢性を備えていることを確認する必要があります。

Windows 8 では、資格情報プロバイダー API に新機能が追加されており、主にユーザーごとに資格情報をグループ化する機能があります。

メソッド 8

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT SetUsageScenario(CREDENTIAL_PROVIDER_USAGE_SCENARIO cpus, DWORD dwFlags)

資格情報プロバイダーが有効となるシナリオを定義します。資格情報プロバイダーが初期化されるたびに呼び出されます。

cpusCREDENTIAL_PROVIDER_USAGE_SCENARIOin資格情報プロバイダーが作成されたシナリオです。これはサポートする必要のある使用シナリオです。詳細については「解説」を参照してください。
dwFlagsDWORDin

資格情報プロバイダーの動作に影響を与える値です。この値には、Wincred.h で定義されている次の値のうち 1 つ以上のビットごとの OR の組み合わせを指定できます。詳細については CredUIPromptForWindowsCredentials を参照してください。

CREDUIWIN_GENERIC (0x00000001)

0x00000001。呼び出し元は、資格情報プロバイダーがユーザー名とパスワードをプレーンテキストで返すことを要求しています。この値を CREDUIWIN_SECURE_PROMPT と組み合わせることはできません。

CREDUIWIN_CHECKBOX (0x00000002)

0x00000002。ダイアログボックスに 保存 チェックボックスが表示されます。

CREDUIWIN_AUTHPACKAGE_ONLY (0x00000010)

0x00000010。入力認証パッケージをサポートする資格情報プロバイダーのみが列挙されます。資格情報プロバイダーが入力認証パッケージをサポートしていない場合は、ユーザータイルを 0 個列挙する必要があります。この値を CREDUIWIN_IN_CRED_ONLY と組み合わせることはできません。

CREDUIWIN_IN_CRED_ONLY (0x00000020)

0x00000020。プロバイダーが資格情報をシリアル化できる場合は、その資格情報のタイルを列挙する必要があります。他のタイルは列挙しないでください。資格情報プロバイダーは、列挙する資格情報タイルの数を判断するために、ICredentialProvider::SetSerialization の入力 CREDENTIAL_PROVIDER_CREDENTIAL_SERIALIZATION と、ICredentialProvider::SetUsageScenariodwFlags を使用する必要があります。この値を CREDUIWIN_AUTHPACKAGE_ONLY と組み合わせることはできません。

CREDUIWIN_ENUMERATE_ADMINS (0x00000100)

0x00000100。資格情報プロバイダーは管理者のみを列挙する必要があります。この値は UAC の目的のみを想定しています。外部の呼び出し元はこのフラグを設定しないことをお勧めします。

CREDUIWIN_ENUMERATE_CURRENT_USER (0x00000200)

0x00000200。資格情報プロバイダーは、現在ログオンしているユーザーのタイルを列挙する必要があります。

CREDUIWIN_SECURE_PROMPT (0x00001000)

0x00001000。資格情報ダイアログボックスをセキュアデスクトップに表示する必要があります。この値を CREDUIWIN_GENERIC と組み合わせることはできません。資格情報プロバイダーの実装者はこのフラグを無視しても問題ありません。

CREDUIWIN_PACK_32_WOW (0x10000000)

0x10000000。プロバイダーに渡されるバッファーは 32 ビットです。プロバイダーから返されるバッファーも 32 ビットである必要があります。これは WOW64 に必要です。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは必須であり、資格情報プロバイダーが自身の使用方法を示すことを可能にします。

呼び出しは完了したものの要求された使用シナリオがサポートされていない場合、このメソッドは E_NOTIMPL を返す必要があります。メソッドが成功し使用シナリオがサポートされている場合は、S_OK を返す必要があります。

vtbl 4 HRESULT SetSerialization(CREDENTIAL_PROVIDER_CREDENTIAL_SERIALIZATION* pcpcs)

資格情報プロバイダーのシリアル化特性を設定します。

pcpcsCREDENTIAL_PROVIDER_CREDENTIAL_SERIALIZATION*in資格情報プロバイダーのシリアル化特性を格納する CREDENTIAL_PROVIDER_CREDENTIAL_SERIALIZATION 構造体へのポインターです。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは必須です。資格情報を受け取り、pcpcs が部分的な資格情報であったか完全な資格情報であったかを判断します。部分的な資格情報の場合、不完全であるか、ユーザーに何らかの情報を表示する目的で渡されたものです。完全な資格情報の場合は、シリアル化して送信する必要があります。入力の処理方法を判断するには、CREDENTIAL_PROVIDER_CREDENTIAL_SERIALIZATION のメンバーと、SetUsageScenario で渡されたフラグを使用します。入力の整合性を検証する責任は資格情報プロバイダーにあります。Credential UI と Logon UI は、構造体を資格情報プロバイダーに渡す前にチェックを一切行いません。

SetSerialization は常に SetUsageScenario の後に呼び出されます。Logon UI は、フィルターが UpdateRemoteCredential を通じて資格情報を返したときにも SetSerialization を呼び出します。CredentialsChanged の呼び出しによってタイルを再列挙する場合には、このメソッドは使用しません。Credential UI は、アプリケーションによって入力資格情報が提供されたときに SetSerialization を呼び出します。

Credential UI は、SetUsageScenario が呼び出されたときに定義された、このコンテンツプロバイダーインスタンスの dwFlags に基づいて次のルールを適用します。

CREDENTIAL_PROVIDER_USAGE_SCENARIOCPUS_LOGON を実装し、このメソッドから失敗を返す資格情報プロバイダーも、引き続き有効になります。
vtbl 5 HRESULT Advise(ICredentialProviderEvents* pcpe, UINT_PTR upAdviseContext)

資格情報プロバイダーが、コールバックインターフェイスを通じて Logon UI または Credential UI 内でイベントを開始できるようにします。

pcpeICredentialProviderEvents*in通知メカニズムとして使用される ICredentialProviderEvents コールバックインターフェイスへのポインターです。
upAdviseContextUINT_PTRinどの資格情報プロバイダーが再列挙を要求したかを一意に識別する整数へのポインターです。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは実装する必要はなく、実装しない場合は E_NOTIMPL を返す必要があります。Logon UI や Credential UI が変更や更新を一切行わない場合など、このメソッドを呼び出す理由がないこともあります。

このメソッドにより、Logon UI と Credential UI は ICredentialProviderEvents ポインターを資格情報プロバイダーに渡すことができます。これにより、資格情報プロバイダーは Logon UI または Credential UI と非同期のコールバック通信を行えます。たとえば、スマートカードプロバイダーは、新しいスマートカードが挿入されたときに資格情報を再度列挙したい場合があります。Logon UI に資格情報を再取得させるには、資格情報プロバイダーは upAdviseContext 識別子を指定して CredentialsChanged を呼び出す必要があります。

このメソッドを実装する資格情報プロバイダーは、提供された ICredentialProviderEvents に対して AddRef を呼び出す責任があります。また、それらの資格情報プロバイダーは、UnAdvise メソッド中に Release を呼び出す必要もあります。

vtbl 6 HRESULT UnAdvise()

Logon UI または Credential UI が、イベントコールバックを受け付けなくなったことを資格情報プロバイダーに通知するために使用します。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは実装する必要はなく、実装しない場合は E_NOTIMPL を返す必要があります。Logon UI や Credential UI が変更や更新を一切行わない場合など、このメソッドを呼び出す理由がないこともあります。

このメソッドが呼び出された場合、Advise で提供された ICredentialProviderEvents ポインターがもはや有効でないことを示します。このメソッド中に、提供された ICredentialProviderEvents ポインターに対して Release を呼び出すのは資格情報プロバイダーの責任です。

重要

このメソッドを使用して資格情報プロバイダーの割り当て済みメモリを解放しないでください。それは通常どおり資格情報プロバイダーのデストラクターで行う必要があります。

vtbl 7 HRESULT GetFieldDescriptorCount(DWORD* pdwCount)

このプロバイダーの資格情報を表示するために必要なフィールドの数を取得します。

pdwCountDWORD*outフィールド数へのポインターです。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは必須です。

このメソッドで提供される数は、使用シナリオ全体を通じて有効である必要があります。つまり、非表示のフィールドや特別な状況でのみ表示されるフィールドを含め、すべてのフィールドを含める必要があります。この値は使用シナリオ中に変更できず、プロバイダーに対して新しい SetUsageScenario 呼び出しが行われたとき、または ICredentialProviderEvents インスタンスが別の列挙を強制したときにのみ変更できます。

vtbl 8 HRESULT GetFieldDescriptorAt(DWORD dwIndex, CREDENTIAL_PROVIDER_FIELD_DESCRIPTOR** ppcpfd)

指定したフィールドを記述するメタデータを取得します。

dwIndexDWORDin情報を取得するフィールドの、0 から始まるインデックスです。
ppcpfdCREDENTIAL_PROVIDER_FIELD_DESCRIPTOR**outフィールドに関する情報を受け取る CREDENTIAL_PROVIDER_FIELD_DESCRIPTOR 構造体へのポインターのアドレスです。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは必須です。

vtbl 9 HRESULT GetCredentialCount(DWORD* pdwCount, DWORD* pdwDefault, BOOL* pbAutoLogonWithDefault)

この資格情報プロバイダーで利用可能な資格情報の数を取得します。

pdwCountDWORD*out資格情報の数を受け取る DWORD 値へのポインターです。
pdwDefaultDWORD*out既定として使用される資格情報のインデックスを受け取る DWORD 値へのポインターです。既定値が設定されていない場合、この値は CREDENTIAL_PROVIDER_NO_DEFAULT に設定する必要があります。
pbAutoLogonWithDefaultBOOL*outpdwDefault で識別される既定の資格情報を自動ログオンの試行に使用すべきかどうかを示す BOOL 値へのポインターです。自動ログオンの試行とは、Logon UI または Credential UI が、プロバイダーの既定のタイルに対して直ちに GetSerialization を呼び出すことを意味します。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは必須です。

Logon UI または Credential UI がユーザー操作の準備が整うと、既定で 1 つの資格情報が選択されます。各資格情報プロバイダーは既定の資格情報を提供するため、次のルールによって pdwDefault がフォーカスを受け取るか、資格情報が自動的にログインされるかが決まります。

有効な資格情報の数が変化した場合、資格情報プロバイダーは Advise で提供された ICredentialProviderEvents インスタンスに対して CredentialsChanged を呼び出す必要があります。

資格情報プロバイダーのベストプラクティス

資格情報プロバイダーは、ログオンおよびロック解除の要求を完了するために、極めて機密性の高いユーザーの秘密情報を扱います。ベストプラクティスとして、パスワードや PIN などの秘密情報は細心の注意を払って扱う必要があります。資格情報プロバイダー内で秘密情報を扱う適切な手法は次のとおりです。
vtbl 10 HRESULT GetCredentialAt(DWORD dwIndex, ICredentialProviderCredential** ppcpc)

特定の資格情報を取得します。

dwIndexDWORDinこの資格情報プロバイダーで列挙された資格情報のセット内における、0 から始まるインデックスです。
ppcpcICredentialProviderCredential**out資格情報を表す ICredentialProviderCredential インスタンスへのポインターのアドレスです。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは必須です。

利用可能な資格情報の数は ICredentialProvider::GetCredentialCount で取得します。このメソッドは、Logon UI または Credential UI が GetCredentialCount と組み合わせて資格情報を列挙するために使用します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_ICredentialProvider "{D27C3481-5A1C-45B2-8AAA-C20EBBE8229E}"
#usecom global ICredentialProvider IID_ICredentialProvider "{}"
#comfunc global ICredentialProvider_SetUsageScenario         3 int,int
#comfunc global ICredentialProvider_SetSerialization         4 var
#comfunc global ICredentialProvider_Advise                   5 sptr,sptr
#comfunc global ICredentialProvider_UnAdvise                 6
#comfunc global ICredentialProvider_GetFieldDescriptorCount  7 var
#comfunc global ICredentialProvider_GetFieldDescriptorAt     8 int,var
#comfunc global ICredentialProvider_GetCredentialCount       9 var,var,var
#comfunc global ICredentialProvider_GetCredentialAt          10 int,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。