Condividi tramite


Funzione WinBioCaptureSampleWithCallback (winbio.h)

Acquisisce un campione biometrico in modo asincrono e restituisce i dati non elaborati in un record di informazioni biometriche (BIR). La funzione restituisce immediatamente al chiamante, acquisisce l'esempio in un thread separato e chiama in una funzione di callback definita dall'applicazione per aggiornare lo stato dell'operazione.

Importante  

È consigliabile, a partire da Windows 8, non usare più questa funzione per avviare un'operazione asincrona. Eseguire invece le operazioni seguenti:

  • Implementare una funzione PWINBIO_ASYNC_COMPLETION_CALLBACK per ricevere un avviso al termine dell'operazione.
  • Chiamare la funzione WinBioAsyncOpenSession . Passare l'indirizzo del callback nel parametro CallbackRoutine . Passare WINBIO_ASYNC_NOTIFY_CALLBACK nel parametro NotificationMethod . Recuperare un handle di sessione asincrono.
  • Usare l'handle di sessione asincrona per chiamare WinBioCaptureSample. Al termine dell'operazione, Windows Biometric Framework alloca e inizializza una struttura WINBIO_ASYNC_RESULT con i risultati e richiama il callback con un puntatore alla struttura dei risultati.
  • Chiamare WinBioFree dall'implementazione del callback per rilasciare la struttura di WINBIO_ASYNC_RESULT al termine dell'uso.
 

Sintassi

HRESULT WinBioCaptureSampleWithCallback(
  [in]           WINBIO_SESSION_HANDLE    SessionHandle,
  [in]           WINBIO_BIR_PURPOSE       Purpose,
  [in]           WINBIO_BIR_DATA_FLAGS    Flags,
  [in]           PWINBIO_CAPTURE_CALLBACK CaptureCallback,
  [in, optional] PVOID                    CaptureCallbackContext
);

Parametri

[in] SessionHandle

Valore WINBIO_SESSION_HANDLE che identifica una sessione biometrica aperta.

[in] Purpose

Maschera WINBIO_BIR_PURPOSE bit che specifica l'uso previsto dell'esempio. Questo può essere un OR bit per bit dei valori seguenti:

  • WINBIO_PURPOSE_VERIFY
  • WINBIO_PURPOSE_IDENTIFY
  • WINBIO_PURPOSE_ENROLL
  • WINBIO_PURPOSE_ENROLL_FOR_VERIFICATION
  • WINBIO_PURPOSE_ENROLL_FOR_IDENTIFICATION

[in] Flags

Valore che specifica il tipo di elaborazione da applicare all'esempio acquisito. Questo può essere un OR bit per bit dei flag di sicurezza ed elaborazione seguenti:

  • WINBIO_DATA_FLAG_PRIVACY

Crittografare l'esempio.

  • WINBIO_DATA_FLAG_INTEGRITY

Firmare l'esempio o proteggerlo usando un codice di autenticazione dei messaggi (MAC).

  • WINBIO_DATA_FLAG_SIGNED

Se questo flag e il WINBIO_DATA_FLAG_INTEGRITYflag vengono impostati, firmare l'esempio. Se questo flag non è impostato, ma il flag di WINBIO_DATA_FLAG_INTEGRITY è impostato, calcolare un MAC.

  • WINBIO_DATA_FLAG_RAW

Restituisce l'esempio esattamente come è stato acquisito dal sensore.

  • WINBIO_DATA_FLAG_INTERMEDIATE

Restituisce l'esempio dopo che è stato pulito e filtrato.

  • WINBIO_DATA_FLAG_PROCESSED

Restituire l'esempio dopo che è pronto per essere usato per lo scopo specificato dal parametro Scopo .

[in] CaptureCallback

Indirizzo di una funzione di callback che verrà chiamata dalla funzione WinBioCaptureSampleWithCallback quando l'operazione di acquisizione ha esito positivo o ha esito negativo. È necessario creare il callback.

[in, optional] CaptureCallbackContext

Indirizzo di una struttura di dati definita dall'applicazione passata alla funzione di callback nel parametro CaptureCallbackContext . Questa struttura può contenere tutti i dati che la funzione di callback personalizzata è progettata per gestire.

Valore restituito

Se la funzione ha esito positivo, restituisce S_OK. Se la funzione ha esito negativo, restituisce un valore HRESULT che indica l'errore. I valori possibili includono, ma non sono limitati a, quelli indicati nella tabella seguente. Per un elenco di codici di errore comuni, vedere Valori HRESULT comuni.

Codice restituito Descrizione
E_ACCESSDENIED
Il chiamante non dispone dell'autorizzazione per acquisire esempi non elaborati oppure la sessione non è stata aperta usando il flag di WINBIO_FLAG_RAW .
E_HANDLE
L'handle di sessione non è valido.
E_NOTIMPL
L'unità biometrica non supporta l'operazione richiesta.
E_POINTER
I puntatori UnitId, Sample, SampleSize e RejectDetail non possono essere NULL.
WINBIO_E_ENROLLMENT_IN_PROGRESS
Impossibile completare l'operazione perché l'unità biometrica è attualmente usata per una transazione di registrazione (solo pool di sistema).

Commenti

La funzione WinBioCaptureSampleWithCallback acquisisce esempi in modo asincrono. Per chiamare correttamente questa funzione, l'handle di sessione deve essere stato aperto specificando WINBIO_FLAG_RAW. Solo gli account Administrators e Local System dispongono dei privilegi necessari.

Le combinazioni valide dei parametri Scopo e Flag dipendono dalle funzionalità dell'unità biometrica usata. Consultare la documentazione del sensore fornitore per determinare quali combinazioni sono supportate e come influiscono sui dati acquisiti.

I chiamanti sono responsabili del rilascio della struttura WINBIO_BIR restituita dal parametro Sample .

La routine di callback deve avere la firma seguente:

VOID CALLBACK CaptureCallback(
__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
);

Esempio

Nell'esempio di codice seguente viene acquisito un esempio in modo asincrono chiamando WinBioCaptureSampleWithCallback e passando un puntatore a una funzione di callback personalizzata. Viene visualizzata anche la funzione callback CaptureSampleCallback. Collegare alla libreria statica Winbio.lib e includere i file di intestazione seguenti:

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


Requisiti

Requisito Valore
Client minimo supportato Windows 7 [solo app desktop]
Server minimo supportato Windows Server 2008 R2 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione winbio.h (include Winbio.h)
Libreria Winbio.lib
DLL Winbio.dll

Vedi anche

WinBioCaptureSample