Partager via


WinBioEnrollCapture, fonction (winbio.h)

Capture un échantillon biométrique et l’ajoute à un modèle. À compter de Windows 10, build 1607, cette fonction peut être utilisée avec une image mobile.

Syntaxe

HRESULT WinBioEnrollCapture(
  [in]            WINBIO_SESSION_HANDLE SessionHandle,
  [out, optional] WINBIO_REJECT_DETAIL  *RejectDetail
);

Paramètres

[in] SessionHandle

Valeur WINBIO_SESSION_HANDLE qui identifie une session biométrique ouverte. Ouvrez un handle de session synchrone en appelant WinBioOpenSession. Ouvrez un handle de session asynchrone en appelant WinBioAsyncOpenSession.

[out, optional] RejectDetail

Pointeur vers une valeur ULONG qui contient des informations supplémentaires sur l’échec de la capture d’un échantillon biométrique. Si la capture a réussi, ce paramètre est défini sur zéro. Les valeurs suivantes sont définies pour la capture d’empreintes digitales :

  • 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

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
Le compte appelant n’est pas autorisé à effectuer l’inscription.
E_HANDLE
Le handle de session n’est pas valide.
E_POINTER
Le pointeur spécifié par le paramètre RejectDetail ne peut pas être NULL.
WINBIO_E_BAD_CAPTURE
Impossible de capturer l’exemple. Utilisez la valeur RejectDetail pour plus d’informations.
WINBIO_E_LOCK_VIOLATION
L’unité biométrique est en cours d’utilisation et est verrouillée.
WINBIO_I_MORE_DATA
Le moteur de correspondance nécessite un ou plusieurs exemples supplémentaires pour générer un modèle fiable. Vous devez mettre à jour les instructions à l’utilisateur pour envoyer d’autres exemples et appeler à nouveau WinBioEnrollCapture .

Remarques

Toute application qui s’inscrit à l’aide d’une unité biométrique dans le pool système doit avoir le focus fenêtre lorsqu’elle appelle WinBioEnrollBegin. Si ce n’est pas le cas, l’appel se bloque jusqu’à ce que l’application acquiert le focus de fenêtre et que l’utilisateur ait fourni un exemple biométrique. Nous vous recommandons donc de ne pas appeler WinBioEnrollBegin tant qu’elle n’a pas acquis le focus. La façon dont vous obtenez le focus dépend du type d’application que vous écrivez. Par exemple, si vous créez une application GUI, vous pouvez implémenter un gestionnaire de messages qui capture un WM_ACTIVATE, un WM_SETFOCUS ou un autre message approprié. Si vous écrivez une application CUI, appelez GetConsoleWindow pour récupérer un handle dans la fenêtre de console et passez ce handle à la fonction SetForegroundWindow pour forcer la fenêtre de console au premier plan et lui affecter le focus. Si votre application s’exécute dans un processus détaché et n’a pas de fenêtre ou s’il s’agit d’un service Windows, utilisez WinBioAcquireFocus et WinBioReleaseFocus pour contrôler manuellement le focus.

Pour utiliser WinBioEnrollCapture de manière synchrone, appelez la fonction avec un handle de session créé en appelant WinBioOpenSession. La fonction se bloque jusqu’à ce que l’opération se termine ou qu’une erreur se produise.

Pour utiliser WinBioEnrollCapture de manière asynchrone, appelez la fonction avec un handle de session créé en appelant WinBioAsyncOpenSession. L’infrastructure alloue une structure WINBIO_ASYNC_RESULT et l’utilise pour retourner des informations sur la réussite ou l’échec de l’opération. Si l’opération échoue, l’infrastructure retourne WINBIO_REJECT_DETAIL informations dans une structure EnrollCapture imbriquée. La structure WINBIO_ASYNC_RESULT est retournée au rappel d’application ou à la file d’attente de messages d’application, selon la valeur que vous avez définie dans le paramètre NotificationMethod de la fonction WinBioAsyncOpenSession :

  • Si vous choisissez de recevoir des notifications d’achèvement à l’aide d’un rappel, vous devez implémenter une fonction PWINBIO_ASYNC_COMPLETION_CALLBACK et définir le paramètre NotificationMethod sur WINBIO_ASYNC_NOTIFY_CALLBACK.
  • Si vous choisissez de recevoir des notifications d’achèvement à l’aide de la file d’attente de messages d’application, vous devez définir le paramètre NotificationMethodsur WINBIO_ASYNC_NOTIFY_MESSAGE. L’infrastructure retourne un pointeur WINBIO_ASYNC_RESULT vers le champ LPARAM du message de fenêtre.
Pour éviter les fuites de mémoire, vous devez appeler 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.

Windows 7 : Vous pouvez effectuer cette opération de manière asynchrone à l’aide de la fonction WinBioEnrollCaptureWithCallback . La fonction vérifie les arguments d’entrée et retourne immédiatement. Si les arguments d’entrée ne sont pas valides, la fonction retourne un code d’erreur. Sinon, l’infrastructure démarre l’opération sur un autre thread. Lorsque l’opération asynchrone se termine ou rencontre une erreur, l’infrastructure envoie les résultats à la fonction PWINBIO_ENROLL_CAPTURE_CALLBACK implémentée par votre application.

Exemples

La fonction suivante inscrit un modèle biométrique dans le pool système en appelant WinBioEnrollCapture. 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 EnrollSysPool(
                      BOOL discardEnrollment, 
                      WINBIO_BIOMETRIC_SUBTYPE subFactor)
{
    HRESULT hr = S_OK;
    WINBIO_IDENTITY identity = {0};
    WINBIO_SESSION_HANDLE sessionHandle = NULL;
    WINBIO_UNIT_ID unitId = 0;
    WINBIO_REJECT_DETAIL rejectDetail = 0;
    BOOLEAN isNewTemplate = TRUE;

    // 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 WinBioOpenSession failed. ");
        wprintf_s(L"hr = 0x%x\n", hr);
        goto e_Exit;
    }

    // Locate a sensor.
    wprintf_s(L"\n Swipe your finger on the sensor...\n");
    hr = WinBioLocateSensor( sessionHandle, &unitId);
    if (FAILED(hr))
    {
        wprintf_s(L"\n WinBioLocateSensor failed. hr = 0x%x\n", hr);
        goto e_Exit;
    }

    // Begin the enrollment sequence. 
    wprintf_s(L"\n Starting enrollment sequence...\n");
    hr = WinBioEnrollBegin(
            sessionHandle,      // Handle to open biometric session
            subFactor,          // Finger to create template for
            unitId              // Biometric unit ID
            );
    if (FAILED(hr))
    {
        wprintf_s(L"\n WinBioEnrollBegin failed. hr = 0x%x\n", hr);
        goto e_Exit;
    }

    // Capture enrollment information by swiping the sensor with
    // the finger identified by the subFactor argument in the 
    // WinBioEnrollBegin function.
    for (int swipeCount = 1;; ++swipeCount)
    {
        wprintf_s(L"\n Swipe the sensor to capture %s sample.",
                 (swipeCount == 1)?L"the first":L"another");

        hr = WinBioEnrollCapture(
                sessionHandle,  // Handle to open biometric session
                &rejectDetail   // [out] Failure information
                );

        wprintf_s(L"\n Sample %d captured from unit number %d.", 
                  swipeCount, 
                  unitId);

        if (hr == WINBIO_I_MORE_DATA)
        {
            wprintf_s(L"\n    More data required.\n");
            continue;
        }
        if (FAILED(hr))
        {
            if (hr == WINBIO_E_BAD_CAPTURE)
            {
                wprintf_s(L"\n  Error: Bad capture; reason: %d", 
                          rejectDetail);
                continue;
            }
            else
            {
                wprintf_s(L"\n WinBioEnrollCapture failed. hr = 0x%x", hr);
                goto e_Exit;
            }
        }
        else
        {
            wprintf_s(L"\n    Template completed.\n");
            break;
        }
    }

    // Discard the enrollment if the appropriate flag is set.
    // Commit the enrollment if it is not discarded.
    if (discardEnrollment == TRUE)
    {
        wprintf_s(L"\n Discarding enrollment...\n\n");
        hr = WinBioEnrollDiscard( sessionHandle );
        if (FAILED(hr))
        {
            wprintf_s(L"\n WinBioLocateSensor failed. hr = 0x%x\n", hr);
        }
        goto e_Exit;    
    }
    else
    {
        wprintf_s(L"\n Committing enrollment...\n");
        hr = WinBioEnrollCommit( 
                sessionHandle,      // Handle to open biometric session
                &identity,          // WINBIO_IDENTITY object for the user
                &isNewTemplate);    // Is this a new template

        if (FAILED(hr))
        {
            wprintf_s(L"\n WinBioEnrollCommit failed. hr = 0x%x\n", hr);
            goto e_Exit;
        }
    }


e_Exit:
    if (sessionHandle != NULL)
    {
        WinBioCloseSession(sessionHandle);
        sessionHandle = NULL;
    }

    wprintf_s(L" Press any key to continue...");
    _getch();

    return hr;
}


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

WinBioAcquireFocus

WinBioEnrollBegin

WinBioEnrollCaptureWithCallback

WinBioEnrollCommit

WinBioEnrollDiscard

WinBioReleaseFocus