Partager via


Fonction WinBioCaptureSampleWithCallback (winbio.h)

Capture un échantillon biométrique de manière asynchrone et retourne les données brutes ou traitées dans un enregistrement d’informations biométriques (BIR). La fonction retourne immédiatement à l’appelant, capture l’exemple sur un thread distinct et appelle une fonction de rappel définie par l’application pour mettre à jour l’opération status.

Important  

Nous vous recommandons, à compter de Windows 8, de ne plus utiliser cette fonction pour démarrer une opération asynchrone. Au lieu de cela, procédez comme suit :

  • Implémentez une fonction PWINBIO_ASYNC_COMPLETION_CALLBACK pour recevoir une notification à la fin de l’opération.
  • Appelez la fonction WinBioAsyncOpenSession . Transmettez l’adresse de votre rappel dans le paramètre CallbackRoutine . Passez WINBIO_ASYNC_NOTIFY_CALLBACK dans le paramètre NotificationMethod . Récupérer un handle de session asynchrone.
  • Utilisez le handle de session asynchrone pour appeler WinBioCaptureSample. Une fois l’opération terminée, l’infrastructure biométrique Windows alloue et initialise une structure WINBIO_ASYNC_RESULT avec les résultats et appelle votre rappel avec un pointeur vers la structure des résultats.
  • Appelez WinBioFree à partir de votre implémentation de rappel pour libérer la structure WINBIO_ASYNC_RESULT une fois que vous avez terminé de l’utiliser.
 

Syntaxe

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
);

Paramètres

[in] SessionHandle

Valeur WINBIO_SESSION_HANDLE qui identifie une session biométrique ouverte.

[in] Purpose

Masque de bits WINBIO_BIR_PURPOSE qui spécifie l’utilisation prévue de l’exemple. Il peut s’agir d’un OR au niveau du bit des valeurs suivantes :

  • WINBIO_PURPOSE_VERIFY
  • WINBIO_PURPOSE_IDENTIFY
  • WINBIO_PURPOSE_ENROLL
  • WINBIO_PURPOSE_ENROLL_FOR_VERIFICATION
  • WINBIO_PURPOSE_ENROLL_FOR_IDENTIFICATION

[in] Flags

Valeur qui spécifie le type de traitement à appliquer à l’exemple capturé. Il peut s’agir d’un OR au niveau du bit des indicateurs de niveau de sécurité et de traitement suivants :

  • WINBIO_DATA_FLAG_PRIVACY

Chiffrez l’exemple.

  • WINBIO_DATA_FLAG_INTEGRITY

Signez l’exemple ou protégez-le à l’aide d’un code d’authentification de message (MAC).

  • WINBIO_DATA_FLAG_SIGNED

Si cet indicateur et le WINBIO_DATA_FLAG_INTEGRITYflag sont définis, signez l’exemple. Si cet indicateur n’est pas défini, mais que l’indicateur WINBIO_DATA_FLAG_INTEGRITY est défini, calculez un MAC.

  • WINBIO_DATA_FLAG_RAW

Retourne l’exemple exactement tel qu’il a été capturé par le capteur.

  • WINBIO_DATA_FLAG_INTERMEDIATE

Retourne l’exemple une fois qu’il a été nettoyé et filtré.

  • WINBIO_DATA_FLAG_PROCESSED

Retourne l’exemple une fois qu’il est prêt à être utilisé pour l’objectif spécifié par le paramètre Purpose .

[in] CaptureCallback

Adresse d’une fonction de rappel qui sera appelée par la fonction WinBioCaptureSampleWithCallback lorsque l’opération de capture réussit ou échoue. Vous devez créer le rappel.

[in, optional] CaptureCallbackContext

Adresse d’une structure de données définie par l’application qui est passée à la fonction de rappel dans son paramètre CaptureCallbackContext . Cette structure peut contenir toutes les données que la fonction de rappel personnalisée est conçue pour gérer.

Valeur retournée

Si la fonction réussit, elle retourne S_OK. Si la fonction échoue, elle retourne une valeur HRESULT qui indique l’erreur. Les valeurs possibles sont notamment celles figurant dans le tableau suivant. Pour obtenir la liste des codes d’erreur courants, consultez Valeurs HRESULT courantes.

Code de retour Description
E_ACCESSDENIED
L’appelant n’a pas l’autorisation de capturer des exemples bruts ou la session n’a pas été ouverte à l’aide de l’indicateur WINBIO_FLAG_RAW .
E_HANDLE
Le handle de session n’est pas valide.
E_NOTIMPL
L’unité biométrique ne prend pas en charge l’opération demandée.
E_POINTER
Les pointeurs UnitId, SampleSize et RejectDetail ne peuvent pas être NULL.
WINBIO_E_ENROLLMENT_IN_PROGRESS
L’opération n’a pas pu être effectuée, car l’unité biométrique est actuellement utilisée pour une transaction d’inscription (pool système uniquement).

Remarques

La fonction WinBioCaptureSampleWithCallback capture des exemples de manière asynchrone. Pour appeler correctement cette fonction, le handle de session doit avoir été ouvert en spécifiant WINBIO_FLAG_RAW. Seuls les comptes Administrateurs et Système local disposent des privilèges nécessaires.

Les combinaisons valides des paramètres Objectif et Indicateurs dépendent des fonctionnalités de l’unité biométrique utilisée. Consultez la documentation du capteur du fournisseur pour déterminer les combinaisons prises en charge et leur impact sur les données capturées.

Les appelants sont responsables de la libération de la structure WINBIO_BIR retournée par le paramètre Sample .

La routine de rappel doit avoir la signature suivante :

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
);

Exemples

L’exemple de code suivant capture un exemple de manière asynchrone en appelant WinBioCaptureSampleWithCallback et en passant un pointeur vers une fonction de rappel personnalisée. La fonction de rappel, CaptureSampleCallback, s’affiche également. Créez un lien vers la bibliothèque statique Winbio.lib et incluez les fichiers d’en-tête suivants :

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


Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 7 [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2008 R2 [applications de bureau uniquement]
Plateforme cible Windows
En-tête winbio.h (inclure Winbio.h)
Bibliothèque Winbio.lib
DLL Winbio.dll

Voir aussi

WinBioCaptureSample