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

PIBIO_SENSOR_PUSH_DATA_TO_ENGINE_FN

コールバック

シグネチャ

HRESULT PIBIO_SENSOR_PUSH_DATA_TO_ENGINE_FN(
    WINBIO_PIPELINE* Pipeline,
    BYTE Purpose,
    BYTE Flags,
    DWORD* RejectDetail
);

パラメーター

フィールド型説明
PipelineWINBIO_PIPELINE*操作を実行するバイオメトリックユニットに関連付けられた WINBIO_PIPELINE 構造体へのポインター。
PurposeBYTE

エンジンに渡される WINBIO_BIR 構造体のプロパティを指定する値。次のセキュリティおよび処理レベルのフラグのビットごとの OR を指定できます。

  • WINBIO_PURPOSE_VERIFY
  • WINBIO_PURPOSE_IDENTIFY
  • WINBIO_PURPOSE_ENROLL
  • WINBIO_PURPOSE_ENROLL_FOR_VERIFICATION
  • WINBIO_PURPOSE_ENROLL_FOR_IDENTIFICATION
FlagsBYTE

サンプルの形式を指定する値。次のセキュリティおよび処理レベルのフラグのビットごとの OR を指定できます。

サンプルを暗号化する必要があります。

サンプルにデジタル署名を行うか、メッセージ認証コード (MAC) で保護する必要があります。

このフラグと WINBIO_DATA_FLAG_INTEGRITY フラグの両方が設定されている場合、サンプルに署名する必要があります。このフラグが設定されておらず、WINBIO_DATA_FLAG_INTEGRITY フラグのみが設定されている場合は、MAC を計算する必要があります。

サンプルは、キャプチャされたときの形式のまま WINBIO_BIR オブジェクトに格納する必要があります。

RejectDetailDWORD*

WINBIO_REJECT_DETAIL 値へのポインター。この値には、直前のバイオメトリックサンプルのキャプチャが失敗した理由、つまりサンプルバッファーが空である理由に関する情報が格納されます。それ以前のキャプチャが成功していた場合、このパラメーターには 0 が設定されます。指紋のキャプチャについては、次の値が定義されています。

  • 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

公式ドキュメント

Windows Biometric Framework によって呼び出され、サンプルバッファーの現在の内容をエンジンアダプターが利用できるようにします。

戻り値

関数が成功した場合は S_OK を返します。関数が失敗した場合は、エラーを示すために次の HRESULT 値のいずれかを返す必要があります。

戻り値 説明
E_POINTER
必須のポインター引数が NULL です。
WINBIO_E_BAD_CAPTURE
サンプルデータが使用に適していません。このエラーコードを返す場合は、問題の内容を示すために RejectDetail パラメーターにも値を設定する必要があります。
WINBIO_E_INVALID_DEVICE_STATE
Pipeline 引数が指す WINBIO_PIPELINE 構造体の SensorContext メンバーが NULL です。
WINBIO_E_NO_CAPTURE_DATA
キャプチャデータが存在しません。

解説(Remarks)

この関数の実装では、サンプルバッファーに含まれる生データを標準の WINBIO_BIR 構造体に変換し、EngineAdapterAcceptSampleData 関数を使用してこの構造体をエンジンにプッシュする必要があります。そのための正しい方法は、Winbio_adapter.h ヘッダーファイルで定義されている WbioEngineAcceptSampleData ヘルパー関数を呼び出すことです。

EngineAdapterAcceptSampleData 関数が WINBIO_E_BAD_CAPTURE を返した場合、SensorAdapterPushDataToEngine の実装は、エンジンアダプターから伝播された RejectDetail 値を返す必要があります。

センサーアダプターは、EngineAdapterAcceptSampleData に渡したサンプルバッファーの所有権を保持します。センサーアダプターは、EngineAdapterAcceptSampleData が戻った後の適切な時点で、このバッファーを解放する責任があります。

例

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

//////////////////////////////////////////////////////////////////////////////////////////
//
// SensorAdapterPushDataToEngine
//
// 目的:
//      サンプルバッファーの現在の内容をエンジンアダプターが利用できるように
//      します。
//      
// パラメーター:
//      Pipeline     -  バイオメトリックユニットに関連付けられた WINBIO_PIPELINE
//                      構造体へのポインター。
//      Purpose      -  エンジンに渡される WINBIO_BIR 構造体のプロパティを
//                      指定します。
//      Flags        -  サンプルの形式を指定する値。
//      RejectDetail -  サンプルバッファーが空である理由に関する追加情報を
//                      受け取る WINBIO_REJECT_DETAIL 値へのポインター。
//
static HRESULT
WINAPI
SensorAdapterPushDataToEngine(
    __inout PWINBIO_PIPELINE Pipeline,
    __in WINBIO_BIR_PURPOSE Purpose,
    __in WINBIO_BIR_DATA_FLAGS Flags,
    __out PWINBIO_REJECT_DETAIL RejectDetail
    )
{
    HRESULT hr = S_OK;

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

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

    // パイプラインの状態を確認します。
    if (sensorContext == NULL)
    {
        hr = WINBIO_E_INVALID_DEVICE_STATE;
        goto cleanup;
    }

    if (sensorContext->CaptureBuffer != NULL &&
        sensorContext->CaptureBufferSize >= sizeof (WINBIO_CAPTURE_DATA) &&
        sensorContext->CaptureBuffer->CaptureData.Size != 0 &&
        sensorContext->CaptureBuffer->SensorStatus == WINBIO_SENSOR_ACCEPT)
    {
        // パイプラインに有効なキャプチャデータがあります。WbioEngineAcceptSampleData
        // 関数を呼び出してエンジンアダプターに通知しますが、バッファーの所有権は
        // センサーアダプターが保持します。WbioEngineAcceptSampleData は
        // Winbio_adapter.h ヘッダーファイルで宣言されているラッパー関数です。
        hr = WbioEngineAcceptSampleData(
                    Pipeline,
                    (PWINBIO_BIR)sensorContext->CaptureBuffer->CaptureData.Data,
                    sensorContext->CaptureBuffer->CaptureData.Size,
                    Purpose,
                    RejectDetail
                    );
    }
    else if (sensorContext->CaptureBuffer != NULL &&
             sensorContext->CaptureBufferSize >= sizeof (WINBIO_CAPTURE_DATA) &&
             sensorContext->CaptureBuffer->WinBioHresult == WINBIO_E_BAD_CAPTURE)
    {
        // 直近のキャプチャは受け入れられませんでした。サンプルをエンジンにプッシュ
        // しようとせず、前回のキャプチャで生成された拒否理由の詳細情報を
        // そのまま返します。
        hr = sensorContext->CaptureBuffer->WinBioHresult;
        *RejectDetail = sensorContext->CaptureBuffer->RejectDetail;
    }
    else
    {
        hr = WINBIO_E_NO_CAPTURE_DATA;
    }

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