共用方式為


winBioUnlockUnit 函式 (winbio.h)

釋放指定生物特徵辨識單位上的會話鎖定。

語法

HRESULT WinBioUnlockUnit(
  [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 值

傳回碼 描述
E_HANDLE
會話控制碼無效。
E_INVALIDARG
UnitId參數不能包含零。
WINBIO_E_LOCK_VIOLATION
UnitId參數所指定的生物特徵辨識單位目前不會由會話鎖定。

備註

呼叫 WinBioUnlockUnit 會自動釋放會話持有的任何鎖定。 如果 UnitId 指定的生物特徵辨識單位先前未透過呼叫 WinBioLockUnit 函式來鎖定,此函式將會失敗。

若要同步使用 WinBioUnlockUnit ,請使用呼叫 WinBioOpenSession所建立的會話控制碼來呼叫 函式。 函式會封鎖作業完成或發生錯誤為止。

若要以非同步方式使用 WinBioUnlockUnit ,請使用呼叫 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指標。
若要防止記憶體流失,您必須呼叫 WinBioFree ,以在完成使用之後釋放 WINBIO_ASYNC_RESULT 結構。

範例

下列函式會呼叫 WinBioLockUnit 來鎖定生物特徵辨識單位,再呼叫 WinBioIdentify 來識別使用者。 它會呼叫 WinBioUnlockUnit 來解除鎖定生物特徵辨識聯集,再關閉開啟的會話。 連結至 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

另請參閱

WinBioLockUnit