WinBioLockUnit 函式 (winbio.h)
鎖定生物特徵辨識單位供單一會話獨佔使用。 從 Windows 10 組建 1607 開始,此函式可用來搭配行動映射使用。
語法
HRESULT WinBioLockUnit(
[in] WINBIO_SESSION_HANDLE SessionHandle,
[in] WINBIO_UNIT_ID UnitId
);
參數
[in] SessionHandle
識別開放式生物特徵辨識會話 的WINBIO_SESSION_HANDLE 值。 呼叫 WinBioOpenSession來開啟同步會話控制碼。 呼叫 WinBioAsyncOpenSession來開啟非同步會話控制碼。
[in] UnitId
WINBIO_UNIT_ID值,指定要鎖定的生物特徵辨識單位。
傳回值
如果函式成功,它會傳回S_OK。 如果函式失敗,它會傳回 HRESULT 值,指出錯誤。 可能的值包括 (但不限於) 下表中的這些值。 如需常見錯誤碼的清單,請參閱 一般 HRESULT 值。
傳回碼 | 描述 |
---|---|
|
會話控制碼無效。 |
|
UnitId參數不能包含零。 |
|
作業無法完成,因為指定的生物特徵辨識單位目前正在用於註冊交易 (系統集區) 。 |
|
無法鎖定生物特徵辨識單位,因為指定的會話已經鎖定另一個單位。 |
備註
如果指定的生物特徵辨識單位被另一個會話鎖定, WinBioLockUnit 將會封鎖呼叫執行緒,直到擁有生物特徵辨識單位的會話釋放其鎖定為止。
呼叫 WinBioUnlockUnit 函式以取消任何擱置的鎖定要求,並釋放會話保留的所有鎖定。
若要以同步方式使用 WinBioLockUnit ,請使用呼叫 WinBioOpenSession所建立的會話控制碼呼叫函式。 函式會封鎖直到作業完成或發生錯誤為止。
若要以非同步方式使用 WinBioLockUnit ,請使用呼叫 WinBioAsyncOpenSession所建立的會話控制碼呼叫函式。 架構會配置 WINBIO_ASYNC_RESULT 結構,並用它來傳回作業成功或失敗的相關資訊。 WINBIO_ASYNC_RESULT結構會根據您在WinBioAsyncOpenSession函式的NotificationMethod參數中設定的值,傳回至應用程式回呼或應用程式訊息佇列:
- 如果您選擇使用回呼接收完成通知,則必須實作 PWINBIO_ASYNC_COMPLETION_CALLBACK 函式,並將 NotificationMethod 參數設定為 WINBIO_ASYNC_NOTIFY_CALLBACK。
- 如果您選擇使用應用程式訊息佇列接收完成通知,您必須將 NotificationMethod 參數設定為 WINBIO_ASYNC_NOTIFY_MESSAGE。 架構會傳回視窗訊息之LPARAM欄位的WINBIO_ASYNC_RESULT指標。
範例
下列函式會呼叫 WinBioLockUnit ,以在呼叫 WinBioIdentify 以識別使用者之前鎖定生物特徵辨識單位。 連結到 Winbio.lib 靜態程式庫,並包含下列標頭檔:
- Windows.h
- Stdio.h
- Conio.h
- Winbio.h
HRESULT LockUnlock( )
{
// Declare variables.
HRESULT hr = S_OK;
WINBIO_IDENTITY identity = {0};
WINBIO_SESSION_HANDLE sessionHandle = NULL;
WINBIO_UNIT_ID unitId = 0;
WINBIO_REJECT_DETAIL rejectDetail = 0;
WINBIO_BIOMETRIC_SUBTYPE subFactor = WINBIO_SUBTYPE_NO_INFORMATION;
BOOL lockAcquired = FALSE;
// Connect to the system pool.
hr = WinBioOpenSession(
WINBIO_TYPE_FINGERPRINT, // Service provider
WINBIO_POOL_SYSTEM, // Pool type
WINBIO_FLAG_DEFAULT, // Configuration and access
NULL, // Array of biometric unit IDs
0, // Count of biometric unit IDs
NULL, // Database ID
&sessionHandle // [out] Session handle
);
if (FAILED(hr))
{
wprintf_s(L"\n WinBioEnumBiometricUnits failed. hr = 0x%x\n", hr);
goto e_Exit;
}
// Lock the session. The Biometric unit ID (1) is hard coded in
// this example.
hr = WinBioLockUnit( sessionHandle, 1 );
if (FAILED(hr))
{
wprintf_s(L"\n WinBioLockUnit failed. hr = 0x%x\n", hr);
goto e_Exit;
}
wprintf_s(L"\n Biometric unit #1 is locked.\n");
lockAcquired = TRUE;
// Locate the biometric sensor and retrieve a WINBIO_IDENTITY object.
// You must swipe your finger on the sensor.
wprintf_s(L"\n Calling WinBioIdentify - Swipe finger on sensor...\n");
hr = WinBioIdentify(
sessionHandle,
&unitId,
&identity,
&subFactor,
&rejectDetail
);
wprintf_s(L"\n Swipe processed - Unit ID: %d\n", unitId);
if (FAILED(hr))
{
wprintf_s(L"\n WinBioIdentify failed. hr = 0x%x\n", hr);
goto e_Exit;
}
e_Exit:
// Unlock the biometric unit if it is locked.
if (lockAcquired == TRUE)
{
hr = WinBioUnlockUnit( sessionHandle, 1 );
if (FAILED(hr))
{
wprintf_s(L"\n WinBioUnlockUnit failed. hr = 0x%x\n", hr);
}
wprintf_s(L"\n Biometric unit #1 is unlocked.\n");
lockAcquired = FALSE;
}
if (sessionHandle != NULL)
{
WinBioCloseSession(sessionHandle);
sessionHandle = NULL;
}
wprintf_s(L"\n Press any key to exit...");
_getch();
return hr;
}
規格需求
最低支援的用戶端 | Windows 7 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2008 R2 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | winbio.h (包含 Winbio.h) |
程式庫 | Winbio.lib |
Dll | Winbio.dll |