Freigeben über


PIBIO_STORAGE_CLOSE_DATABASE_FN Rückruffunktion (winbio_adapter.h)

Vom Windows-Biometrischen Framework aufgerufen, um die datenbank zu schließen, die der Pipeline zugeordnet ist, und alle zugehörigen Ressourcen freizugeben.

Syntax

PIBIO_STORAGE_CLOSE_DATABASE_FN PibioStorageCloseDatabaseFn;

HRESULT PibioStorageCloseDatabaseFn(
  [in, out] PWINBIO_PIPELINE Pipeline
)
{...}

Die Parameter

[in, out] Pipeline

Zeigen Sie auf eine WINBIO_PIPELINE Struktur, die der biometrischen Einheit zugeordnet ist, die den Vorgang ausführt.

Rückgabewert

Wenn die Funktion erfolgreich ist, wird S_OK zurückgegeben. Wenn die Funktion fehlschlägt, muss sie einen der folgenden HRESULT-Werte zurückgeben, um den Fehler anzugeben.

Rückgabecode Description
E_POINTER
Das Pipeline-Argument darf nicht NULL sein.
WINBIO_E_DATABASE_CANT_CLOSE
Ein nicht angegebenes Problem hat dazu geführt, dass die Anforderung fehlschlägt.

Bemerkungen

Das Windows-Biometrische Framework schreibt keine bestimmte Zwischenspeicherungsrichtlinie vor, aber wenn die Datenbank einen Speichercache von Datensätzen verwaltet, sollte diese Funktion nicht geschriebene Datensätze in den Speicher leeren.

Diese Funktion muss alle von vorherigen Datenbankabfragevorgängen generierten Resultsets ungültig werden.

Examples

Der folgende Pseudocode zeigt eine mögliche Implementierung dieser Funktion. Das Beispiel wird nicht kompiliert. Sie müssen sie an Ihren Zweck anpassen.

/////////////////////////////////////////////////////////////////////////////////////////
//
// StorageAdapterCloseDatabase
//
// Purpose:
//      Close the database associated with the pipeline and free all 
//      related resources.
//
// Parameters:
//      Pipeline -  Pointer to a WINBIO_PIPELINE structure associated with 
//                  the biometric unit performing the operation.
//
static HRESULT
WINAPI
StorageAdapterCloseDatabase(
    __inout PWINBIO_PIPELINE Pipeline
    )
{
    HRESULT hr = S_OK;

    // Verify that the Pipeline parameter is not NULL.
    if (!ARGUMENT_PRESENT(Pipeline))
    {
        hr = E_POINTER;
        goto cleanup;
    }

    // Retrieve the context from the pipeline.
    PWINBIO_STORAGE_CONTEXT storageContext = 
           (PWINBIO_STORAGE_CONTEXT)Pipeline->StorageContext;

    // Verify the pipeline state.
    if (storageContext == NULL ||
        Pipeline->StorageHandle == INVALID_HANDLE_VALUE)
    {
        hr = WINBIO_E_INVALID_DEVICE_STATE;
        goto cleanup;
    }

    // Remove any data structures attached to the context and remove the
    // context from the pipeline.
    _CleanupCryptoContext(&storageContext->CryptoContext);
    StorageAdapterClearContext(Pipeline);

    // Close the database file handle.
    CloseHandle( Pipeline->StorageHandle );
    Pipeline->StorageHandle = INVALID_HANDLE_VALUE;

    // Call a custom function (_PurgeDeletedRecords) to remove deleted records
    // from the database file.
    _PurgeDeletedRecords( 
        &storageContext->DatabaseId, 
        (LPCWSTR)&storageContext->FilePath
        );

    // Overwrite the database ID and path.
    SecureZeroMemory(&storageContext->DatabaseId, sizeof(WINBIO_UUID));
    SecureZeroMemory(storageContext->FilePath, (MAX_PATH+1)*sizeof(WCHAR));

cleanup:

    return hr;
}

Anforderungen

Anforderung Wert
Mindestens unterstützter Client Windows 7 [nur Desktop-Apps]
Mindestanforderungen für unterstützte Server Windows Server 2008 R2 [nur Desktop-Apps]
Zielplattform Fenster
Header winbio_adapter.h (einschließen Winbio_adapter.h)

Siehe auch

Plug-In-Funktionen

StorageAdapterCreateDatabase

StorageAdapterEraseDatabase

StorageAdapterOpenDatabase