共用方式為


winBioCaptureSample 函式 (winbio.h)

擷取生物特徵辨識樣本,並以未經處理或已處理的資料填入 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以開啟同步會話控制碼。 呼叫 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

準備好用於 Purpose 參數所指定之目的之後,傳回範例。

[out, optional] UnitId

WINBIO_UNIT_ID值的指標,其中包含產生樣本之生物特徵辨識單位的識別碼。

Sample

接收包含範例 之WINBIO_BIR 結構的指標之變數位址。 當您完成使用 結構時,您必須將指標傳遞至 WinBioFree ,以釋放為範例配置的記憶體。

[out, optional] SampleSize

SIZE_T值的指標,其中包含Sample參數中傳回之WINBIO_BIR結構的大小,以位元組為單位。

[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 值

傳回碼 描述
E_ACCESSDENIED
呼叫端沒有擷取原始樣本的許可權,或使用 WINBIO_FLAG_RAW 旗標未開啟會話。
E_HANDLE
會話控制碼無效。
E_NOTIMPL
生物特徵辨識單位不支援要求的作業。
E_POINTER
UnitIdSampleSampleSizeRejectDetail指標不可為Null
WINBIO_E_ENROLLMENT_IN_PROGRESS
無法完成作業,因為生物特徵辨識單位目前只用于註冊交易 (系統集區) 。
WINBIO_E_INVALID_OPERATION
作業無法完成,因為感應器集區中有安全感應器。

備註

若要成功呼叫此函式,您必須在WinBioOpenSessionWinBioAsyncOpenSession函式的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指標。
若要防止記憶體流失,您必須呼叫 WinBioFree ,以在完成使用之後釋放 WINBIO_ASYNC_RESULT 結構。

Windows 7: 您可以使用 WinBioCaptureSampleWithCallback 函式,以非同步方式執行這項作業。 函式會驗證輸入引數並立即傳回。 如果輸入引數無效,函式會傳回錯誤碼。 否則,架構會在另一個執行緒上啟動作業。 當非同步作業完成或發生錯誤時,架構會將結果傳送至應用程式所實作 的PWINBIO_CAPTURE_CALLBACK 函式。

範例

下列函式會呼叫 WinBioCaptureSample ,以從使用者擷取生物特徵辨識樣本。 連結至 Winbio.lib 靜態程式庫,並包含下列標頭檔:

  • Windows.h
  • Stdio.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;
}


規格需求

   
最低支援的用戶端 Windows 7 [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2008 R2 [僅限桌面應用程式]
目標平台 Windows
標頭 winbio.h (包含 Winbio.h)
程式庫 Winbio.lib
Dll Winbio.dll

另請參閱

WinBioCaptureSampleWithCallback