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

PWINBIO_CAPTURE_CALLBACK

コールバック

シグネチャ

void PWINBIO_CAPTURE_CALLBACK(
    void* CaptureCallbackContext,
    HRESULT OperationStatus,
    DWORD UnitId,
    WINBIO_BIR* Sample,
    UINT_PTR SampleSize,
    DWORD RejectDetail
);

パラメーター

フィールド型説明
CaptureCallbackContextvoid*アプリケーションが定義し、WinBioCaptureSampleWithCallback 関数の CaptureCallbackContext パラメーターに渡されたバッファーへのポインター。このバッファーは、フレームワークや生体認証ユニットによって変更されることはありません。アプリケーションは、このデータを使用して実行する処理を判断したり、生体情報のキャプチャに関する追加情報を保持したりできます。
OperationStatusHRESULTキャプチャ操作から返されたエラー コード。
UnitIdDWORD生体認証ユニットの ID 番号。
SampleWINBIO_BIR*サンプル データへのポインター。
SampleSizeUINT_PTRSample パラメーターが指すサンプル データのサイズ (バイト単位)。
RejectDetailDWORD操作の実行に失敗した場合の、失敗に関する追加情報。詳細については「解説」を参照してください。

公式ドキュメント

非同期の WinBioCaptureSampleWithCallback 関数の結果を返すために、Windows Biometric Framework によって呼び出されます。クライアント アプリケーションは、この関数を実装する必要があります。

重要 Windows 8 以降では、PWINBIO_CAPTURE_CALLBACK/WinBioCaptureSampleWithCallback の組み合わせを使用しないことをお勧めします。代わりに、次の手順を実行してください。
  • 操作の完了通知を受け取るために、PWINBIO_ASYNC_COMPLETION_CALLBACK 関数を実装します。
  • WinBioAsyncOpenSession 関数を呼び出します。CallbackRoutine パラメーターにコールバックのアドレスを渡します。NotificationMethod パラメーターには WINBIO_ASYNC_NOTIFY_CALLBACK を渡します。そして、非同期セッション ハンドルを取得します。
  • 非同期セッション ハンドルを使用して WinBioCaptureSample を呼び出します。操作が完了すると、Windows Biometric Framework は結果を格納した WINBIO_ASYNC_RESULT 構造体を割り当てて初期化し、結果構造体へのポインターを指定してコールバックを呼び出します。
  • WINBIO_ASYNC_RESULT 構造体の使用を終えたら、コールバックの実装内から WinBioFree を呼び出して解放します。

解説(Remarks)

現在、Windows Biometric Framework は指紋リーダーのみをサポートしています。そのため、操作が失敗し、WINBIO_REJECT_DETAIL 定数で追加情報が返される場合、その値は次のいずれかになります。

例

次のコード例では、WinBioCaptureSampleWithCallback を呼び出し、カスタム コールバック関数 CaptureSampleCallback へのポインターを渡すことで、サンプルを非同期にキャプチャします。Winbio.lib スタティック ライブラリにリンクし、次のヘッダー ファイルをインクルードしてください。

HRESULT CaptureSampleWithCallback(BOOL bCancel)
{
    HRESULT hr = S_OK;
    WINBIO_SESSION_HANDLE sessionHandle = NULL;

    // Connect to the system pool. 
    hr = WinBioOpenSession( 
            WINBIO_TYPE_FINGERPRINT,    // Service provider
            WINBIO_POOL_SYSTEM,         // Pool type
            WINBIO_FLAG_RAW,            // Raw access
            NULL,                       // Array of biometric unit IDs
            0,                          // Count of biometric unit IDs
            WINBIO_DB_DEFAULT,          // Default database
            &sessionHandle              // [out] Session handle
            );
    if (FAILED(hr))
    {
        wprintf_s(L"\n WinBioOpenSession failed. hr = 0x%x\n", hr);
        goto e_Exit;
    }

    // Capture a biometric sample asynchronously.
    wprintf_s(L"\n Calling WinBioCaptureSampleWithCallback ");
    hr = WinBioCaptureSampleWithCallback(
            sessionHandle,                  // Open session handle
            WINBIO_NO_PURPOSE_AVAILABLE,    // Intended use of the sample
            WINBIO_DATA_FLAG_RAW,           // Sample format
            CaptureSampleCallback,          // Callback function
            NULL                            // Optional context
            );
    if (FAILED(hr))
    {
        wprintf_s(L"\n WinBioCaptureSampleWithCallback failed. ");
        wprintf_s(L"hr = 0x%x\n", hr);
        goto e_Exit;
    }
    wprintf_s(L"\n Swipe the sensor ...\n");

    // Cancel the capture process if the bCancel flag is set.
    if (bCancel)
    {
        wprintf_s(L"\n Starting CANCEL timer...");
        Sleep( 7000 );

        wprintf_s(L"\n Calling WinBioCancel\n");
        hr = WinBioCancel( sessionHandle );
        if (FAILED(hr))
        {
            wprintf_s(L"\n WinBioCancel failed. hr = 0x%x\n", hr);
            goto e_Exit;
        }
    }

    // Wait for the asynchronous capture process to complete 
    // or be canceled.
    hr = WinBioWait( sessionHandle );
    if (FAILED(hr))
    {
        wprintf_s(L"\n WinBioWait failed. hr = 0x%x\n", hr);
    }

e_Exit:

    if (sessionHandle != NULL)
    {
        WinBioCloseSession(sessionHandle);
        sessionHandle = NULL;
    }

    wprintf_s(L"\n Press any key to exit...");
    _getch();

    return hr;
}

//------------------------------------------------------------------------
// The following function is the callback for WinBioCaptureSampleWithCallback.
// The function filters the response from the biometric subsystem and 
// writes a result to the console window.
//
VOID CALLBACK CaptureSampleCallback(
    __in_opt PVOID CaptureCallbackContext,
    __in HRESULT OperationStatus,
    __in WINBIO_UNIT_ID UnitId,
    __in_bcount(SampleSize) PWINBIO_BIR Sample,
    __in SIZE_T SampleSize,
    __in WINBIO_REJECT_DETAIL RejectDetail
    )
{
    UNREFERENCED_PARAMETER(CaptureCallbackContext);

    wprintf_s(L"\n CaptureSampleCallback executing");
    wprintf_s(L"\n Swipe processed - Unit ID: %d", UnitId);

    if (FAILED(OperationStatus))
    {
        if (OperationStatus == WINBIO_E_BAD_CAPTURE)
        {
            wprintf_s(L"\n Bad capture; reason: %d\n", RejectDetail);
         }
        else
        {
            wprintf_s(L"\n WinBioCaptureSampleWithCallback failed. ");
            wprintf_s(L" OperationStatus = 0x%x\n", OperationStatus);
        }
        goto e_Exit;
    }

    wprintf_s(L"\n Captured %d bytes.\n", SampleSize);

e_Exit:

    if (Sample != NULL)
    {
        WinBioFree(Sample);
        Sample = NULL;
    }
}

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