PWINBIO_CAPTURE_CALLBACK fungsi panggilan balik (winbio.h)

Dipanggil oleh Windows Biometric Framework untuk mengembalikan hasil dari fungsi WinBioCaptureSampleWithCallback asinkron. Aplikasi klien harus menerapkan fungsi ini.

Penting Kami menyarankan agar, dimulai dengan Windows 8, Anda tidak lagi menggunakan kombinasiWinBioCaptureSampleWithCallbackPWINBIO_CAPTURE_CALLBACK/. Sebagai gantinya, lakukan hal berikut:
  • Terapkan fungsi PWINBIO_ASYNC_COMPLETION_CALLBACK untuk menerima pemberitahuan ketika operasi selesai.
  • Panggil fungsi WinBioAsyncOpenSession . Berikan alamat panggilan balik Anda di parameter CallbackRoutine . Teruskan WINBIO_ASYNC_NOTIFY_CALLBACK di parameter NotificationMethod . Ambil handel sesi asinkron.
  • Gunakan handel sesi asinkron untuk memanggil WinBioCaptureSample. Ketika operasi selesai, Windows Biometric Framework akan mengalokasikan dan menginisialisasi struktur WINBIO_ASYNC_RESULT dengan hasil dan memanggil panggilan balik Anda dengan penunjuk ke struktur hasil.
  • Panggil WinBioFree dari implementasi panggilan balik Anda untuk merilis struktur WINBIO_ASYNC_RESULT setelah Anda selesai menggunakannya.
 

Sintaks

PWINBIO_CAPTURE_CALLBACK PwinbioCaptureCallback;

void PwinbioCaptureCallback(
  [in, optional] PVOID CaptureCallbackContext,
  [in]           HRESULT OperationStatus,
  [in]           WINBIO_UNIT_ID UnitId,
  [in]           PWINBIO_BIR Sample,
  [in]           SIZE_T SampleSize,
  [in]           WINBIO_REJECT_DETAIL RejectDetail
)
{...}

Parameter

[in, optional] CaptureCallbackContext

Penunjuk ke buffer yang ditentukan oleh aplikasi dan diteruskan ke parameter CaptureCallbackContext dari fungsi WinBioCaptureSampleWithCallback . Buffer tidak dimodifikasi oleh kerangka kerja atau unit biometrik. Aplikasi Anda dapat menggunakan data untuk membantu menentukan tindakan apa yang harus dilakukan atau mempertahankan informasi tambahan tentang pengambilan biometrik.

[in] OperationStatus

Kode kesalahan yang dikembalikan oleh operasi penangkapan.

[in] UnitId

Nomor ID unit biometrik.

[in] Sample

Arahkan ke data sampel.

[in] SampleSize

Ukuran, dalam byte, dari data sampel yang ditujukkan oleh parameter Sampel .

[in] RejectDetail

Informasi tambahan tentang kegagalan, jika ada, untuk melakukan operasi. Untuk informasi selengkapnya, lihat Keterangan.

Mengembalikan nilai

Tidak ada

Keterangan

Saat ini, Windows Biometric Framework hanya mendukung pembaca sidik jari. Oleh karena itu, jika operasi gagal dan mengembalikan informasi tambahan dalam konstanta WINBIO_REJECT_DETAIL , itu akan menjadi salah satu nilai berikut:

  • 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

Contoh

Contoh kode berikut mengambil sampel secara asinkron dengan memanggil WinBioCaptureSampleWithCallback dan meneruskan pointer ke fungsi panggilan balik kustom, CaptureSampleCallback. Tautkan ke pustaka statis Winbio.lib dan sertakan file header berikut:

  • 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;
    }
}


Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 7 [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2008 R2 [hanya aplikasi desktop]
Target Platform Windows
Header winbio.h

Lihat juga

Konstanta WINBIO_REJECT_DETAIL

WinBioCaptureSampleWithCallback