ホーム › 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
);パラメーター
| フィールド | 型 | 説明 |
|---|---|---|
| CaptureCallbackContext | void* | アプリケーションが定義し、WinBioCaptureSampleWithCallback 関数の CaptureCallbackContext パラメーターに渡されたバッファーへのポインター。このバッファーは、フレームワークや生体認証ユニットによって変更されることはありません。アプリケーションは、このデータを使用して実行する処理を判断したり、生体情報のキャプチャに関する追加情報を保持したりできます。 |
| OperationStatus | HRESULT | キャプチャ操作から返されたエラー コード。 |
| UnitId | DWORD | 生体認証ユニットの ID 番号。 |
| Sample | WINBIO_BIR* | サンプル データへのポインター。 |
| SampleSize | UINT_PTR | Sample パラメーターが指すサンプル データのサイズ (バイト単位)。 |
| RejectDetail | DWORD | 操作の実行に失敗した場合の、失敗に関する追加情報。詳細については「解説」を参照してください。 |
公式ドキュメント
非同期の 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 定数で追加情報が返される場合、その値は次のいずれかになります。
- 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
例
次のコード例では、WinBioCaptureSampleWithCallback を呼び出し、カスタム コールバック関数 CaptureSampleCallback へのポインターを渡すことで、サンプルを非同期にキャプチャします。Winbio.lib スタティック ライブラリにリンクし、次のヘッダー ファイルをインクルードしてください。
- Windows.h
- Stdio.h
- Conio.h
- Winbio.h
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)
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)