WinBioEnrollBegin-Funktion (winbio.h)

Initiiert eine biometrische Registrierungssequenz und erstellt eine leere biometrische Vorlage. Ab Windows 10, Build 1607, ist diese Funktion für die Verwendung mit einem mobilen Image verfügbar.

Syntax

HRESULT WinBioEnrollBegin(
  [in] WINBIO_SESSION_HANDLE    SessionHandle,
  [in] WINBIO_BIOMETRIC_SUBTYPE SubFactor,
  [in] WINBIO_UNIT_ID           UnitId
);

Parameter

[in] SessionHandle

Ein WINBIO_SESSION_HANDLE Wert, der eine offene biometrische Sitzung identifiziert. Öffnen Sie ein synchrones Sitzungshandle, indem Sie WinBioOpenSession aufrufen. Öffnen Sie ein asynchrones Sitzungshandle, indem Sie WinBioAsyncOpenSession aufrufen.

[in] SubFactor

Ein WINBIO_BIOMETRIC_SUBTYPE Wert, der zusätzliche Informationen zur Registrierung bereitstellt. Dies muss einer der folgenden Werte sein:

  • WINBIO_ANSI_381_POS_RH_THUMB
  • WINBIO_ANSI_381_POS_RH_INDEX_FINGER
  • WINBIO_ANSI_381_POS_RH_MIDDLE_FINGER
  • WINBIO_ANSI_381_POS_RH_RING_FINGER
  • WINBIO_ANSI_381_POS_RH_LITTLE_FINGER
  • WINBIO_ANSI_381_POS_LH_THUMB
  • WINBIO_ANSI_381_POS_LH_INDEX_FINGER
  • WINBIO_ANSI_381_POS_LH_MIDDLE_FINGER
  • WINBIO_ANSI_381_POS_LH_RING_FINGER
  • WINBIO_ANSI_381_POS_LH_LITTLE_FINGER
  • WINBIO_ANSI_381_POS_RH_FOUR_FINGERS
  • WINBIO_ANSI_381_POS_LH_FOUR_FINGERS

[in] UnitId

Ein WINBIO_UNIT_ID Wert, der die biometrische Einheit identifiziert. Dieser Wert darf nicht 0 sein. Sie können eine Einheiten-ID finden, indem Sie die Funktionen WinBioEnumBiometricUnits oder WinBioLocateSensor aufrufen.

Rückgabewert

Wenn die Funktion erfolgreich ist, gibt sie S_OK zurück. Wenn die Funktion fehlschlägt, gibt sie einen HRESULT-Wert zurück, der den Fehler angibt. Mögliches Werte (aber nicht die Einzigen) sind die in der folgenden Tabelle. Eine Liste allgemeiner Fehlercodes finden Sie unter Allgemeine HRESULT-Werte.

Rückgabecode Beschreibung
E_ACCESSDENIED
Der Aufrufer verfügt nicht über die Berechtigung zur Registrierung.
E_HANDLE
Das Sitzungshandle ist ungültig.
E_INVALIDARG
Der SubFactor-Parameter kann nicht gleich WINBIO_SUBTYPE_NO_INFORMATION oder WINBIO_SUBTYPE_ANY sein, und der UnitId-Parameter kann nicht gleich 0 sein.
WINBIO_E_ENROLLMENT_IN_PROGRESS
Ein Registrierungsvorgang wird bereits ausgeführt, und es kann nur eine Registrierung zu einem bestimmten Zeitpunkt erfolgen.
WINBIO_E_LOCK_VIOLATION
Die biometrische Einheit wird verwendet und ist gesperrt.

Hinweise

Eine einzige biometrische Registrierung erfordert die Sammlung mehrerer Proben von einem Benutzer. Es kann jederzeit nur ein Registrierungsvorgang durchgeführt werden, und alle biometrischen Proben, die für eine einzelne Registrierung gelten, müssen vom gleichen Sensor generiert werden. Dieser Sensor wird durch den UnitId-Parameter angegeben.

Jede Anwendung, die mithilfe einer biometrischen Einheit im Systempool registriert wird, muss beim Aufrufen von WinBioEnrollBegin den Fensterfokus haben. Andernfalls wird der Aufruf blockiert, bis die Anwendung den Fensterfokus erhält und der Benutzer ein biometrisches Beispiel bereitgestellt hat. Es wird daher empfohlen, dass Ihre Anwendung WinBioEnrollBegin erst aufruft, wenn sie den Fokus erlangt hat. Die Art und Weise, wie Sie den Fokus erlangen, hängt von der Art der Anwendung ab, die Sie schreiben. Wenn Sie beispielsweise eine GUI-Anwendung erstellen, können Sie einen Nachrichtenhandler implementieren, der eine WM_ACTIVATE, WM_SETFOCUS oder eine andere geeignete Nachricht erfasst. Wenn Sie eine CUI-Anwendung schreiben, rufen Sie GetConsoleWindow auf, um ein Handle an das Konsolenfenster abzurufen, und übergeben Sie dieses Handle an die SetForegroundWindow-Funktion , um das Konsolenfenster im Vordergrund zu erzwingen und ihm den Fokus zuzuweisen. Wenn Ihre Anwendung in einem getrennten Prozess ausgeführt wird und über kein Fenster verfügt oder ein Windows-Dienst ist, verwenden Sie WinBioAcquireFocus und WinBioReleaseFocus , um den Fokus manuell zu steuern.

Um WinBioEnrollBegin synchron zu verwenden, rufen Sie die Funktion mit einem Sitzungshandle auf, das durch Aufrufen von WinBioOpenSession erstellt wurde. Die Funktion blockiert, bis der Vorgang abgeschlossen ist oder ein Fehler auftritt.

Um WinBioEnrollBegin asynchron zu verwenden, rufen Sie die Funktion mit einem Sitzungshandle auf, das durch Aufrufen von WinBioAsyncOpenSession erstellt wurde. Das Framework weist eine WINBIO_ASYNC_RESULT-Struktur zu und verwendet sie, um Informationen zum Erfolg oder Fehler des Vorgangs zurückzugeben. Wenn der Vorgang erfolgreich ist, gibt das Framework WINBIO_BIOMETRIC_SUBTYPE Informationen in einer geschachtelten EnrollBegin-Struktur zurück. Wenn der Vorgang nicht erfolgreich ist, gibt das Framework Fehlerinformationen zurück. Die WINBIO_ASYNC_RESULT Struktur wird an den Anwendungsrückruf oder an die Anwendungsmeldungswarteschlange zurückgegeben, abhängig vom Wert, den Sie im NotificationMethod-Parameter der WinBioAsyncOpenSession-Funktion festgelegt haben:

  • Wenn Sie sich dafür entscheiden, Vervollständigungsbenachrichtigungen mithilfe eines Rückrufs zu erhalten, müssen Sie eine PWINBIO_ASYNC_COMPLETION_CALLBACK-Funktion implementieren und den NotificationMethod-Parameter auf WINBIO_ASYNC_NOTIFY_CALLBACK festlegen.
  • Wenn Sie sich dafür entscheiden, Vervollständigungsbenachrichtigungen mithilfe der Anwendungsnachrichtenwarteschlange zu erhalten, müssen Sie den NotificationMethod-Parameter auf WINBIO_ASYNC_NOTIFY_MESSAGE festlegen. Das Framework gibt einen WINBIO_ASYNC_RESULT-Zeiger auf das LPARAM-Feld der Fensternachricht zurück.
Um Speicherverluste zu verhindern, müssen Sie WinBioFree aufrufen, um die WINBIO_ASYNC_RESULT-Struktur freizugeben, nachdem Sie sie verwendet haben.

Beispiele

Die folgende Funktion registriert eine biometrische Vorlage im Systempool. WinBioEnrollBegin wird aufgerufen, um die Registrierungssequenz zu starten. Verknüpfen Sie die statische Bibliothek Winbio.lib, und fügen Sie die folgenden Headerdateien ein:

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


Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 7 [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 R2 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile winbio.h (einschließlich Winbio.h)
Bibliothek Winbio.lib
DLL Winbio.dll

Weitere Informationen

WinBioAcquireFocus

WinBioEnrollCapture

WinBioEnrollCaptureWithCallback

WinBioEnrollCommit

WinBioEnrollDiscard

WinBioReleaseFocus