WinBioCaptureSampleWithCallback 函式 (winbio.h)
以異步方式擷取生物特徵辨識範例,並在 BIR) (記錄中傳回原始或已處理的數據。 函式會立即傳回給呼叫端、擷取個別線程上的範例,以及呼叫應用程式定義的回呼函式以更新作業狀態。
建議您從 Windows 8 開始,不再使用此函式來啟動異步操作。 請改為執行下列動作:
- 實 作PWINBIO_ASYNC_COMPLETION_CALLBACK 函式,以在作業完成時接收通知。
- 呼叫 WinBioAsyncOpenSession 函 式。 在 CallbackRoutine 參數中傳遞回呼的位址。 在 NotificationMethod 參數中傳遞WINBIO_ASYNC_NOTIFY_CALLBACK。 擷取異步會話句柄。
- 使用異步會話句柄來呼叫 WinBioCaptureSample。 當作業完成時,Windows 生物特徵辨識架構會使用結果配置和初始化 WINBIO_ASYNC_RESULT 結構,並使用結果結構的指標叫用回呼。
- 從回呼實作呼叫 WinBioFree ,以在完成使用之後釋放 WINBIO_ASYNC_RESULT 結構。
語法
HRESULT WinBioCaptureSampleWithCallback(
[in] WINBIO_SESSION_HANDLE SessionHandle,
[in] WINBIO_BIR_PURPOSE Purpose,
[in] WINBIO_BIR_DATA_FLAGS Flags,
[in] PWINBIO_CAPTURE_CALLBACK CaptureCallback,
[in, optional] PVOID CaptureCallbackContext
);
參數
[in] SessionHandle
識別開放式生物特徵辨識會話 的WINBIO_SESSION_HANDLE 值。
[in] Purpose
指定樣本用途的 WINBIO_BIR_PURPOSE 位掩碼。 這可以是下列值的位 OR :
- WINBIO_PURPOSE_VERIFY
- WINBIO_PURPOSE_IDENTIFY
- WINBIO_PURPOSE_ENROLL
- WINBIO_PURPOSE_ENROLL_FOR_VERIFICATION
- WINBIO_PURPOSE_ENROLL_FOR_IDENTIFICATION
[in] Flags
值,指定要套用至擷取樣本的處理類型。 這可以是下列安全性和處理層級旗標的位 OR :
- WINBIO_DATA_FLAG_PRIVACY
加密範例。
- WINBIO_DATA_FLAG_INTEGRITY
使用訊息驗證碼 (MAC) 簽署範例或加以保護。
- WINBIO_DATA_FLAG_SIGNED
如果已設定此旗標和WINBIO_DATA_FLAG_INTEGRITYflag,請簽署範例。 如果未設定此旗標,但已設定WINBIO_DATA_FLAG_INTEGRITY旗標,請計算 MAC。
- WINBIO_DATA_FLAG_RAW
傳回與感測器所擷取的樣本完全相同。
- WINBIO_DATA_FLAG_INTERMEDIATE
在清理和篩選範例之後,傳回該範例。
- WINBIO_DATA_FLAG_PROCESSED
準備好用於 Purpose 參數所指定之目的之後,傳回範例。
[in] CaptureCallback
當擷取作業成功或失敗時, WinBioCaptureSampleWithCallback 函式所呼叫的回呼函式位址。 您必須建立回呼。
[in, optional] CaptureCallbackContext
在其 CaptureCallbackContext 參數中傳遞至回調函式的應用程式定義數據結構位址。 此結構可以包含自定義回呼函式設計用來處理的任何數據。
傳回值
如果函式成功,它會 傳回S_OK。 如果函式失敗,它會傳回 指出錯誤的 HRESULT 值。 可能的值包括 (但不限於) 下表中的這些值。 如需常見錯誤碼的清單,請參閱 一般 HRESULT 值。
傳回碼 | Description |
---|---|
|
呼叫端沒有擷取原始樣本的許可權,或使用 WINBIO_FLAG_RAW 旗標未開啟會話。 |
|
會話句柄無效。 |
|
生物特徵辨識單位不支援要求的作業。 |
|
UnitId、Sample、SampleSize 和 RejectDetail 指標不可為 NULL。 |
|
無法完成作業,因為生物特徵辨識單位目前只用於註冊交易 (系統集區) 。 |
備註
WinBioCaptureSampleWithCallback 函式會以異步方式擷取樣本。 若要成功呼叫此函式,會話句柄必須透過指定 WINBIO_FLAG_RAW來開啟。 只有系統管理員和本機系統帳戶具有必要的許可權。
目的和旗標參數的有效組合取決於所使用的生物特徵辨識單位功能。 請參閱廠商感測器檔,以判斷支援哪些組合,以及它們如何影響擷取的數據。
呼叫端負責釋放 Sample 參數所傳回的WINBIO_BIR結構。
回呼例程必須具有下列簽章:
VOID CALLBACK CaptureCallback(
__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
);
範例
下列程式代碼範例會呼叫 WinBioCaptureSampleWithCallback 並將指標傳遞至自定義回呼函式,以異步方式擷取範例。 也會顯示 Callback 函式 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;
}
}
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 7 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2008 R2 [僅限桌面應用程式] |
目標平台 | Windows |
標頭 | winbio.h (包含Winbio.h) |
程式庫 | Winbio.lib |
Dll | Winbio.dll |