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

PIBIO_ENGINE_ACCEPT_SAMPLE_DATA_FN

コールバック

シグネチャ

HRESULT PIBIO_ENGINE_ACCEPT_SAMPLE_DATA_FN(
    WINBIO_PIPELINE* Pipeline,
    WINBIO_BIR* SampleBuffer,
    UINT_PTR SampleSize,
    BYTE Purpose,
    DWORD* RejectDetail
);

パラメーター

フィールド型説明
PipelineWINBIO_PIPELINE*操作を実行する生体認証ユニットに関連付けられた WINBIO_PIPELINE 構造体へのポインターです。
SampleBufferWINBIO_BIR*処理対象の生体サンプルを格納する WINBIO_BIR 構造体へのポインターです。
SampleSizeUINT_PTRSampleBuffer パラメーターで返される WINBIO_BIR 構造体のサイズを格納する SIZE_T 値です。
PurposeBYTE

サンプルの用途を指定する WINBIO_BIR_PURPOSE ビットマスクです。WINBIO_BIR_PURPOSE 構造体は、キャプチャしたデータをどのような目的で使用するか、そしてその結果としてどのように最適化すべきかを指定します。次の値のビットごとの OR を指定できます:

  • WINBIO_PURPOSE_VERIFY
  • WINBIO_PURPOSE_IDENTIFY
  • WINBIO_PURPOSE_ENROLL
  • WINBIO_PURPOSE_ENROLL_FOR_VERIFICATION
  • WINBIO_PURPOSE_ENROLL_FOR_IDENTIFICATION
RejectDetailDWORD*

生体サンプルの処理に失敗した場合に、その追加情報を受け取る WINBIO_REJECT_DETAIL 値へのポインターです。操作が成功した場合、このパラメーターにはゼロが設定されます。指紋サンプルに対しては次の値が定義されています:

  • WINBIO_FP_TOO_HIGH
  • WINBIO_FP_TOO_LOW
  • WINBIO_FP_TOO_LEFT
  • WINBIO_FP_TOO_RIGHT
  • WINBIO_FP_TOO_FAST
  • WINBIO_FP_TOO_SLOW
  • WINBIO_FP_POOR_QUALITY
  • WINBIO_FP_TOO_SKEWED
  • WINBIO_FP_TOO_SHORT
  • WINBIO_FP_MERGE_FAILURE

公式ドキュメント

センサーアダプターが実装する SensorAdapterPushDataToEngine 関数から呼び出され、生の生体サンプルを受け取って特徴セットを抽出するようエンジンアダプターに通知します。この特徴セットは、照合または登録に使用できます。

戻り値

関数が成功した場合は S_OK を返します。失敗した場合は、エラーを示す次のいずれかの HRESULT 値を返さなければなりません。

戻り値 説明
E_INVALIDARG
SampleSize 引数にゼロを指定することはできません。Purpose 引数は、パラメーターの説明に示した値のビットごとの OR でなければなりません。
E_POINTER
Pipeline、SampleBuffer、RejectDetail の各引数を NULL にすることはできません。
E_OUTOFMEMORY
メモリが不足しているため、操作を完了できませんでした。
WINBIO_E_BAD_CAPTURE
データを処理して必要な特徴セットを作成できませんでした。RejectDetail には、失敗に関する追加情報が格納されます。

解説(Remarks)

この関数を呼び出して作成された特徴セットは、関数から復帰した後も生体認証ユニットのパイプラインに保持されます。この特徴セットは、それ以前の特徴セットを置き換えます。

センサーアダプターにおける SensorAdapterPushDataToEngine 関数の実装では、EngineAdapterAcceptSampleData を呼び出すために、次のラッパー関数 (Winbio_adapter.h で定義されています) を使用してください:

HRESULT WbioEngineAcceptSampleData(
__inout PWINBIO_PIPELINE Pipeline,
__in PWINBIO_BIR SampleBuffer,
__in SIZE_T SampleSize,
__in WINBIO_BIR_PURPOSE Purpose,
__out PWINBIO_REJECT_DETAIL RejectDetail
);

SampleBuffer パラメーターで渡される WINBIO_BIR 構造体は、センサーアダプターが所有します。WINBIO_BIR オブジェクトの有効期間はセンサーアダプターが管理するため、EngineAdapterAcceptSampleData 関数は、この構造体を解放したり、そのポインターを保存したりしてはなりません。ポインターを保存しないことで、EngineAdapterAcceptSampleData 関数から復帰した後に、エンジンアダプターの他の部分が WINBIO_BIR 構造体を使用しようとするのを防げます。

WINBIO_BIR 構造体の StandardDataBlock メンバーの Offset フィールドがゼロより大きい場合 (BIR が標準データ形式の生体サンプルを含んでいることを示します)、HeaderBlock メンバーの BiometricDataFormat フィールドを次のように設定しなければなりません:

これは、Windows 生体認証フレームワークがサポートする唯一の標準データ形式です。

また、Windows 生体認証フレームワークは、HeaderBlock メンバー (WINBIO_BIR_HEADER 構造体) に、センサーアダプターがサンプルのキャプチャに使用した DataFlags と Purpose の値が格納されていることを前提とします。

指紋サンプルを処理し、エンジンアダプター側で不適切なスワイプを拒否する指紋センサーでも、WINBIO_BIR_PURPOSE に有効な値を使用してください。

例

次の擬似コードは、この関数の実装例の 1 つを示しています。この例はコンパイルできません。目的に合わせて適宜変更してください。

//////////////////////////////////////////////////////////////////////////////////////////
//
// EngineAdapterAcceptSampleData
//
// Purpose:
//      Notifies the engine adapter to accept a raw biometric sample and 
//      extract a feature set.
//
// Parameters:
//      Pipeline        - Pointer to a WINBIO_PIPELINE structure associated 
//                        with the biometric unit performing the operation. 
//      SampleBuffer    - Contains the biometric sample to be processed.
//      SampleSize      - Size of the structure returned in the SampleBuffer 
//                        parameter.
//      Purpose         - Specifies the intended use of the sample.
//      RejectDetail    - Receives additional information about the failure, 
//                        if any, to process a biometric sample.
//
static HRESULT
WINAPI
EngineAdapterAcceptSampleData(
    __inout PWINBIO_PIPELINE Pipeline,
    __in PWINBIO_BIR SampleBuffer,
    __in SIZE_T SampleSize,
    __in WINBIO_BIR_PURPOSE Purpose,
    __out PWINBIO_REJECT_DETAIL RejectDetail
    )
{
    HRESULT hr = S_OK;
    PUCHAR featureSet = NULL;

    // Verify that pointer arguments are not NULL.
    if (!ARGUMENT_PRESENT(Pipeline)     ||
        !ARGUMENT_PRESENT(SampleBuffer) ||
        !ARGUMENT_PRESENT(RejectDetail))
    {
        hr = E_POINTER;
        goto cleanup;
    }

    // Retrieve the context from the pipeline.
    PWINBIO_ENGINE_CONTEXT context = 
           (PWINBIO_ENGINE_CONTEXT)Pipeline->EngineContext;

    // Verify that input arguments are valid.
    if (SampleSize == 0 ||
        Purpose == WINBIO_NO_PURPOSE_AVAILABLE)
    {
        hr = E_INVALIDARG;
        goto cleanup;
    }

    // Release any feature set currently attached to the pipeline before
    // creating a new feature set.
    if (context->FeatureSet != NULL)
    {
        _AdapterRelease(context->FeatureSet);
        context->FeatureSet = NULL;
        context->FeatureSetSize = 0;
    }

    // An actual engine adapter would here process the contents of the sample 
    // buffer, generate a feature set suitable for the purpose(s) specified 
    // by the Purpose parameter, and attach the feature set to the pipeline. 
    // The following trivial example, however, creates a feature set simply
    // by making an exact copy of the raw sample.
    // If the sample data cannot be processed, return an HRESULT error code
    // of WINBIO_E_BAD_CAPTURE and set extended error information in the 
    // RejectDetail parameter.
    featureSet = (PUCHAR)_AdapterAlloc(SampleSize);
    if (featureSet == NULL)
    {
        hr = E_OUTOFMEMORY;
        goto cleanup;
    }
    RtlCopyMemory(featureSet, SampleBuffer, SampleSize);
    context->FeatureSet = featureSet;
    featureSet = NULL;
    context->FeatureSetSize = SampleSize;

cleanup:

    if (FAILED(hr))
    {
        if (featureSet != NULL)
        {
            _AdapterRelease(featureSet);
        }
    }

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