擷取生物特徵樣本,並以原始或處理過的資料填入生物特徵資訊記錄(BIR)。
語法
HRESULT WinBioCaptureSample(
[in] WINBIO_SESSION_HANDLE SessionHandle,
[in] WINBIO_BIR_PURPOSE Purpose,
[in] WINBIO_BIR_DATA_FLAGS Flags,
[out, optional] WINBIO_UNIT_ID *UnitId,
PWINBIO_BIR *Sample,
[out, optional] SIZE_T *SampleSize,
[out, optional] WINBIO_REJECT_DETAIL *RejectDetail
);
參數
[in] SessionHandle
識別開啟生物特徵辨識工作階段的 WINBIO_SESSION_HANDLE 值。 呼叫 WinBioOpenSession 開啟同步會話的 handle 。 透過呼叫 WinBioAsyncOpenSession 開啟非同步會話句柄。
[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_INTEGRITY旗標都設定好了,請簽名取樣。 如果未設定此旗標,但已設定WINBIO_DATA_FLAG_INTEGRITY旗標,請計算 MAC。
- WINBIO_DATA_FLAG_RAW
將樣品完全按照傳感器捕獲的方式返回。
- WINBIO_DATA_FLAG_INTERMEDIATE
清潔和過濾後返回樣品。
- WINBIO_DATA_FLAG_PROCESSED
樣本在準備用於目的參數指定目的後回傳。
[out, optional] UnitId
指向包含產生樣本的生物特徵單元 ID 的 WINBIO_UNIT_ID 值指標。
Sample
一個變數的位址,該變數接收到包含該樣本的 WINBIO_BIR 結構的指標。 使用完結構後,必須將指標傳給 WinBioFree ,釋放分配給該樣本的記憶體。
[out, optional] SampleSize
指向一個包含 Sample 參數中回傳的 WINBIO_BIR 結構大小(位元組)的 SIZE_T 值指標。
[out, optional] RejectDetail
指向一個包含生物特徵樣本未能捕捉失敗的額外資訊的 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
返回值
如果函式成功,則會傳回 S_OK。 如果函式失敗,它會傳回指出錯誤的 HRESULT 值。 可能的值包括但不限於下表中的值。 如需常見錯誤碼的清單,請參閱 常見的 HRESULT 值。
| 回傳碼 | Description |
|---|---|
|
呼叫端沒有擷取原始範例的許可權,或未使用 WINBIO_FLAG_RAW 旗標開啟會話。 |
|
工作階段控制碼無效。 |
|
生物特徵辨識單位不支援要求的作業。 |
|
UnitId、Sample、SampleSize 和 RejectDetail 指標不能是 NULL。 |
|
無法完成作業,因為生物特徵辨識單位目前正用於註冊交易 (僅限系統集區) 。 |
|
由於感測器池中存在安全感測器,操作無法完成。 |
備註
要成功呼叫此函式,您必須在 WinBioOpenSession 或 WinBioAsyncOpenSession 函式的 Flags 參數中指定 WINBIO_FLAG_RAW 來開啟會話句柄。 目前,只有在管理員帳號和本地系統帳號下執行的應用程式才擁有必要的權限。
「用途」和「旗標」參數的有效組合取決於所使用的生物特徵辨識單位的功能。 請參閱廠商的感測器文件,確認哪些有效目的值與旗標值的組合被支援,以及它們如何影響擷取的資料。 使用完樣本後,應用程式必須呼叫 WinBioFree ,釋放 WinBioCaptureSample 函式所分配的記憶體。
若要同步使用 WinBioCaptureSample ,請呼叫由 WinBioOpenSession 建立的會話代碼。 該函式會阻塞,直到樣本被擷取或遇到錯誤為止。 使用系統池呼叫 WinBioCaptureSample 的呼叫會阻塞,直到呼叫應用程式擁有視窗焦點,使用者將樣本提供給池中的感測器。 如果使用者選擇的感測器已經用於註冊交易,該函式會失敗並回傳 WINBIO_E_ENROLLMENT_IN_PROGRESS。
若要非同步使用 WinBioCaptureSample ,請呼叫該函式,並以呼叫 WinBioAsyncOpenSession 建立的會話代言碼。 該框架分配一個 WINBIO_ASYNC_RESULT 結構,並用它來回傳有關操作成功或失敗的資訊。 若擷取操作成功,框架會以巢狀的 CaptureSample 結構回傳樣本資訊。 若操作失敗,框架會回傳錯誤資訊。 WINBIO_ASYNC_RESULT結構會根據您在 WinBioAsyncOpenSession 函式的 NotificationMethod 參數中設定的值,回傳到應用程式回撥或應用程式訊息佇列:
- 如果你選擇透過回撥接收完成通知,必須實作 一個PWINBIO_ASYNC_COMPLETION_CALLBACK 函式,並將 NotificationMethod 參數設為 WINBIO_ASYNC_NOTIFY_CALLBACK。
- 如果你選擇透過應用程式訊息隊列接收完成通知,必須將 NotificationMethod 參數設為 WINBIO_ASYNC_NOTIFY_MESSAGE。 框架回傳一個指向視窗訊息 LPARAM 欄位的 WINBIO_ASYNC_RESULT指標。
Windows 7: 你可以透過 WinBioCaptureSampleWithCallback 函式非同步執行此操作。 函式會驗證輸入參數並立即回傳。 若輸入參數無效,函式會回傳錯誤碼。 否則,框架會在另一個執行緒開始操作。 當非同步操作完成或遇到錯誤時,框架會將結果傳送給你的應用程式實作的 PWINBIO_CAPTURE_CALLBACK 函式。
範例
以下函式呼叫 WinBioCaptureSample 以擷取使用者的生物特徵樣本。 連結至 Winbio.lib 靜態程式庫,並包含下列標頭檔:
- Windows.h
- 標準.h
- Conio.h
- Winbio.h
HRESULT CaptureSample()
{
HRESULT hr = S_OK;
WINBIO_SESSION_HANDLE sessionHandle = NULL;
WINBIO_UNIT_ID unitId = 0;
WINBIO_REJECT_DETAIL rejectDetail = 0;
PWINBIO_BIR sample = NULL;
SIZE_T sampleSize = 0;
// Connect to the system pool.
hr = WinBioOpenSession(
WINBIO_TYPE_FINGERPRINT, // Service provider
WINBIO_POOL_SYSTEM, // Pool type
WINBIO_FLAG_RAW, // Access: Capture raw data
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.
wprintf_s(L"\n Calling WinBioCaptureSample - Swipe sensor...\n");
hr = WinBioCaptureSample(
sessionHandle,
WINBIO_NO_PURPOSE_AVAILABLE,
WINBIO_DATA_FLAG_RAW,
&unitId,
&sample,
&sampleSize,
&rejectDetail
);
if (FAILED(hr))
{
if (hr == WINBIO_E_BAD_CAPTURE)
{
wprintf_s(L"\n Bad capture; reason: %d\n", rejectDetail);
}
else
{
wprintf_s(L"\n WinBioCaptureSample failed. hr = 0x%x\n", hr);
}
goto e_Exit;
}
wprintf_s(L"\n Swipe processed - Unit ID: %d\n", unitId);
wprintf_s(L"\n Captured %d bytes.\n", sampleSize);
e_Exit:
if (sample != NULL)
{
WinBioFree(sample);
sample = NULL;
}
if (sessionHandle != NULL)
{
WinBioCloseSession(sessionHandle);
sessionHandle = NULL;
}
wprintf_s(L"\n Press any key to exit...");
_getch();
return hr;
}
需求
| Requirement | 價值觀 |
|---|---|
| 最低支援的用戶端 | Windows 7 [僅限桌面應用程式] |
| 支援的最低伺服器 | Windows Server 2008 R2 [僅限傳統型應用程式] |
| 目標平臺 | 窗戶 |
| Header | winbio.h(包括Winbio.h) |
| Library | Winbio.lib 網站 |
| DLL | Winbio.dll |