PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_GET
コールバックシグネチャ
BOOL PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_GET(
void* pPluginContext,
CRYPT_INTEGER_BLOB* pIdentifier,
DWORD dwNameType,
CRYPT_INTEGER_BLOB* pNameBlob,
BYTE** ppbContent,
DWORD* pcbContent,
LPWSTR* ppwszPassword,
CRYPT_INTEGER_BLOB** ppIdentifier
);パラメーター
| フィールド | 型 | 説明 |
|---|---|---|
| pPluginContext | void* | このプロバイダーが定義し、PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_INITIALIZE 関数が返した、省略可能なバッファーへのポインター。このバッファーが呼び出し元によって変更されることはありません。プロバイダーは、実行する処理の判断や追加情報の保持のために、このデータを使用できます。 |
| pIdentifier | CRYPT_INTEGER_BLOB* | オブジェクト識別子を格納する CRYPTOAPI_BLOB 構造体へのポインター。この関数への最初の呼び出しでは、この値は常に NULL である必要があります。 |
| dwNameType | DWORD | pNameBlob パラメーターの名前形式。指定できる値を以下に示します。この関数の実装では、Schannel から渡される CRYPT_OBJECT_LOCATOR_SPN_NAME_TYPE を処理できる必要があります。 CRYPT_OBJECT_LOCATOR_SPN_NAME_TYPE (1 (0x1))CRYPT_OBJECT_LOCATOR_LAST_RESERVED_NAME_TYPE (32 (0x20))CRYPT_OBJECT_LOCATOR_FIRST_RESERVED_USER_NAME_TYPE (33 (0x21))CRYPT_OBJECT_LOCATOR_LAST_RESERVED_USER_NAME_TYPE (0x0000FFFF) |
| pNameBlob | CRYPT_INTEGER_BLOB* | 呼び出し元のアプリケーションがオブジェクトを一意に識別するために使用している名前を格納する、CRYPTOAPI_BLOB 構造体へのポインター。プロバイダーは、この名前を使用して要求されたオブジェクトを特定します。現在 Schannel は、punycode から変換された IDN 名を含む、UTF8 でエンコードされた DNS (ドメインネームシステム) ホスト名を渡します。 |
| ppbContent | BYTE** | 返されるオブジェクトを格納するバイト配列へのポインター。 |
| pcbContent | DWORD* | ppbContent パラメーターが指すオブジェクトのサイズ (バイト単位)。 |
| ppwszPassword | LPWSTR* | オブジェクトの暗号化に使用されたパスワード (存在する場合) を格納する、NULL で終わる Unicode 文字列。オブジェクトが個人情報交換 (PFX) ファイルの場合、通常は暗号化を行うためにパスワードが使用されます。パスワードが不要な場合、この値は NULL でもかまいません。 |
| ppIdentifier | CRYPT_INTEGER_BLOB** | この関数への後続の呼び出しや変更通知で使用できる、省略可能な識別子へのポインターを受け取るアドレス。詳細については「解説」を参照してください。プロバイダーがこの値を NULL に設定した場合、Schannel は内部的に pNameBlob パラメーターの値を使用します。 |
公式ドキュメント
PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_GET コールバック関数は、オブジェクトを取得します。この関数は、カスタムプロバイダーの一部として実装する必要があります。現在この関数を呼び出すのは、Secure Channel (Schannel) セキュリティパッケージのみです。
戻り値
関数が成功した場合は、0 以外の値 (TRUE) を返します。
関数が失敗した場合は、0 (FALSE) を返し、SetLastError 関数で適切なエラーを指定します。ほとんどのエラーは変更されずに Schannel を通過しますが、この動作は保証されません。一部のエラーは、別のエラーにマップされる場合があります。
指定された DNS 名 (pNameBlob) または識別子 (pIdentifier) に対してオブジェクトを返せない場合は、FALSE を返し、SetLastError 関数で CRYPT_E_OBJECT_LOCATOR_OBJECT_NOT_FOUND を指定します。
解説(Remarks)
現在 PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_GET コールバック関数を呼び出すのは、Secure Channel (Schannel) セキュリティパッケージのみです。次のいずれかをカプセル化したオブジェクトを返すことができます。
- 個人情報交換 (PFX) のバイト配列
- 証明書ストア。
- 汎用の BLOB。これは現在 Schannel ではサポートされていません。
多数のホスト名を 1 つのオブジェクトに対応付けできるため、プロバイダーは ppIdentifier パラメーターを使用して、内部的に定義した識別子を返すことができます。この識別子は、暗号化 API (CAPI) 関数からプロバイダーへの後続の呼び出しで使用できます。プロバイダーは、この識別子を利用して適切なオブジェクトを見つけやすくできます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)