Win32 API 日本語リファレンス
ホーム › Devices.BiometricFramework › PIBIO_ENGINE_COMMIT_ENROLLMENT_FN

PIBIO_ENGINE_COMMIT_ENROLLMENT_FN

コールバック

シグネチャ

HRESULT PIBIO_ENGINE_COMMIT_ENROLLMENT_FN(
    WINBIO_PIPELINE* Pipeline,
    WINBIO_IDENTITY* Identity,
    BYTE SubFactor,
    BYTE* PayloadBlob,
    UINT_PTR PayloadBlobSize
);

パラメーター

フィールド型説明
PipelineWINBIO_PIPELINE*操作を実行するバイオメトリック ユニットに関連付けられた WINBIO_PIPELINE 構造体へのポインター。
IdentityWINBIO_IDENTITY*データベースに格納するテンプレートの GUID または SID を格納した WINBIO_IDENTITY 構造体へのポインター。
SubFactorBYTEデータベースに格納するテンプレートに関連付けられたサブファクターを指定する WINBIO_BIOMETRIC_SUBTYPE 値。
PayloadBlobBYTE*Windows Biometric Framework によって生成された検証署名を格納するバイト配列への省略可能なポインター。
PayloadBlobSizeUINT_PTRPayloadBlob パラメーターが指す文字配列のサイズ (バイト単位)。PayloadBlob パラメーターが NULL の場合、この値は 0 でなければなりません。

公式ドキュメント

登録オブジェクトを確定し、テンプレートに変換して、そのテンプレートをデータベースに保存するために、Windows Biometric Framework から呼び出されます。

戻り値

関数が成功した場合は S_OK を返します。失敗した場合は、次の HRESULT 値のいずれか、またはストレージ アダプターから返された値を返す必要があります。

戻り値 説明
E_POINTER
必須のポインター引数が NULL です。
E_INVALIDARG
Identity パラメーターまたは SubFactor パラメーターで指定された値が無効です。
WINBIO_E_DUPLICATE_ENROLLMENT
Identity パラメーターと SubFactor パラメーターで指定されたテンプレートは、既にデータベースに保存されています。
WINBIO_E_INVALID_DEVICE_STATE
パイプラインにアタッチされているテンプレートがありません。

解説(Remarks)

この関数が成功した場合は、登録テンプレートをパイプラインからフラッシュする必要があります。この動作の結果は、EngineAdapterClearContext を呼び出した場合と同等になる必要があります。

この関数が失敗した場合は、エンジン コンテキストの状態を変更しないでください。特に、完成したテンプレートがパイプラインにアタッチされている場合は、失敗の原因に対処した後でこの関数を再度呼び出し、テンプレートをデータベースにコミットできる必要があります。

プリブート認証をサポートするエンジン アダプターは、パイプラインにアタッチされたストレージ アダプターだけでなく、プリブート ストレージ領域にも登録をコミットする必要があります。これをどのように実現するかの詳細はベンダーに委ねられています。

重要

SubFactor パラメーターに指定された値を検証しようとしないでください。Windows Biometrics Service が、実装に値を渡す前に検証します。値が WINBIO_SUBTYPE_NO_INFORMATION または WINBIO_SUBTYPE_ANY の場合は、必要に応じて検証してください。

例

次の疑似コードは、この関数の実装例の 1 つを示しています。この例はコンパイルできません。目的に合わせて適合させる必要があります。

//////////////////////////////////////////////////////////////////////////////////////////
//
// EngineAdapterCommitEnrollment
//
// 目的:
//      登録オブジェクトを確定し、テンプレートに変換して、そのテンプレートを
//      データベースに保存します。
//
// パラメーター:
//      Pipeline        - 操作を実行するバイオメトリック ユニットに関連付けられた
//                        WINBIO_PIPELINE 構造体へのポインター
//      Identity        - データベースに格納するテンプレートの GUID または SID
//      SubFactor       - データベースに格納するテンプレートに関連付けられた
//                        サブファクター
//      PayloadBlob     - Windows Biometric Framework によって生成された検証署名を
//                        格納するバイト配列への省略可能なポインター
//      PayloadBlobSize - PayloadBlob パラメーターが指す文字配列のサイズ (バイト単位)
//

static HRESULT
WINAPI
EngineAdapterCommitEnrollment(
    __inout PWINBIO_PIPELINE Pipeline,
    __in PWINBIO_IDENTITY Identity,
    __in WINBIO_BIOMETRIC_SUBTYPE SubFactor,
    __in PUCHAR PayloadBlob,
    __in SIZE_T PayloadBlobSize
    )
{
    HRESULT hr = S_OK;
    DWORD indexVector[NUMBER_OF_TEMPLATE_BINS] = {0};
    WINBIO_REJECT_DETAIL rejectDetail = 0;
    WINBIO_STORAGE_RECORD newTemplate = {0};

    // ポインター引数が NULL でないことを確認します。
    if (!ARGUMENT_PRESENT(Pipeline) ||
        !ARGUMENT_PRESENT(Identity))
    {
        hr = E_POINTER;
        goto cleanup;
    }

    if (ARGUMENT_PRESENT(PayloadBlob) && PayloadBlobSize == 0)
    {
        hr = E_INVALIDARG;
        goto cleanup;
    }

    if (!ARGUMENT_PRESENT(PayloadBlob) && PayloadBlobSize > 0)
    {
        hr = E_INVALIDARG;
        goto cleanup;
    }

    // TODO: SubFactor 引数と Identity 引数が有効であることを確認します。

    // パイプラインからコンテキストを取得します。
    PWINIBIO_ENGINE_CONTEXT context =
        (PWINIBIO_ENGINE_CONTEXT)Pipeline->EngineContext;

    // 登録が進行中でない場合は戻ります。この例では、登録オブジェクトが
    // エンジン コンテキスト構造体の一部であることを前提としています。
    if (context->Enrollment.InProgress != TRUE)
    {
        hr = WINBIO_E_INVALID_DEVICE_STATE;
        goto cleanup;
    }

    // アダプターがテンプレートをバケットに振り分けるためのインデックス ベクターを
    // サポートしている場合は、カスタム関数 (_AdapterCreateIndexVector) を呼び出して、
    // 登録オブジェクト内のテンプレート データからインデックス ベクターを作成します。
    hr = _AdapterCreateIndexVector(
                context,
                context->Enrollment.Template,
                context->Enrollment.TemplateSize,
                indexVector,
                NUMBER_OF_TEMPLATE_BINS,
                &rejectDetail
                );
    if (FAILED(hr))
    {
        goto cleanup;
    }

    newTemplate.Identity = Identity;
    newTemplate.SubFactor = SubFactor;
    newTemplate.IndexVector = indexVector;
    newTemplate.IndexElementCount = NUMBER_OF_TEMPLATE_BINS;
    newTemplate.TemplateBlob = context->Enrollment.Template;
    newTemplate.TemplateBlobSize = context->Enrollment.TemplateSize;
    newTemplate.PayloadBlob = PayloadBlob;
    newTemplate.PayloadBlobSize = PayloadBlobSize;

    hr = WbioStorageAddRecord(
                Pipeline,
                &newTemplate
                );

    if (FAILED(hr))
    {
        goto cleanup;
    }

    // カスタム関数 (_AdapterDestroyEnrollmentTemplate) を呼び出して、
    // 登録オブジェクトが保持しているリソースを解放します。
    _AdapterDestroyEnrollmentTemplate(
        context,
        &context->Enrollment
        );

    // 登録処理が完了したことを指定します。
    context->Enrollment.InProgress = FALSE;

cleanup:

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