Partager via


PIBIO_SENSOR_DETACH_FN fonction de rappel (winbio_adapter.h)

Appelé par l’infrastructure biométrique Windows immédiatement avant qu’un adaptateur de capteur ne soit supprimé du pipeline de traitement de l’unité biométrique. L’objectif de cette fonction est de libérer les ressources spécifiques de l’adaptateur attachées au pipeline.

Syntaxe

PIBIO_SENSOR_DETACH_FN PibioSensorDetachFn;

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

Paramètres

[in, out] Pipeline

Pointeur vers la structure WINBIO_PIPELINE associée à l’unité biométrique effectuant l’opération.

Valeur retournée

Si la fonction réussit, elle retourne S_OK. Si la fonction échoue, elle doit retourner l’une des valeurs HRESULT suivantes pour indiquer l’erreur.

Code de retour Description
E_POINTER
Le paramètre Pipeline ne peut pas être NULL.
WINBIO_E_INVALID_DEVICE_STATE
Le champ SensorContext de la structure WINBIO_PIPELINE ne peut pas être NULL.

Remarques

Pour éviter les fuites de mémoire, votre implémentation de la fonction SensorAdapterDetach doit libérer la structure de WINBIO_SENSOR_CONTEXT privée pointée par le membre SensorContext du pipeline, ainsi que toutes les autres ressources attachées au contexte du capteur.

Si le champ SensorContext dans l’objet pipeline a la valeur NULL lorsque cette fonction est appelée, le pipeline n’a pas été correctement initialisé et vous devez retourner WINBIO_E_INVALID_DEVICE_STATE pour informer l’infrastructure biométrique Windows du problème.

Avant de retourner S_OK, cette fonction doit définir le champ SensorContext de la structure WINBIO_PIPELINE sur NULL.

Étant donné que cette fonction est appelée après que les adaptateurs de stockage et de moteur ont été supprimés du pipeline, votre implémentation de cette fonction ne doit pas appeler les fonctions référencées par les structures WINBIO_ENGINE_INTERFACE ou WINBIO_STORAGE_INTERFACE pointées par les membres EngineInterface et StorageInterface de l’objet pipeline.

Étant donné que le membre SensorHandle de la structure WINBIO_PIPELINE contiendra un handle valide même après l’appel de SensorAdapterDetach , vous pouvez utiliser le handle pour accéder au périphérique de capteur si nécessaire. Cette fonction ne doit pas fermer la poignée du capteur. L’infrastructure biométrique Windows le fera après le retour de SensorAdapterDetach .

Exemples

Le pseudo-code suivant montre une implémentation possible de cette fonction. L’exemple ne se compile pas. Vous devez l’adapter à votre objectif.

//////////////////////////////////////////////////////////////////////////////////////////
//
// SensorAdapterDetach
//
// Purpose:
//      Cancels all pending sensor operations.
//      
// Parameters:
//      Pipeline -  Pointer to a WINBIO_PIPELINE structure associated with 
//                  the biometric unit.
//
static HRESULT
WINAPI
SensorAdapterDetach(
    __inout PWINBIO_PIPELINE Pipeline
    )
{
    PWINBIO_SENSOR_CONTEXT sensorContext = NULL;

    // Verify that the Pipeline parameter is not NULL.
    if (!ARGUMENT_PRESENT(Pipeline))
    {
        hr = E_POINTER;
        goto cleanup;
    }
 
    // Validate the current state of the sensor.
    if (Pipeline->SensorContext == NULL)
    {
        return WINBIO_E_INVALID_DEVICE_STATE;
    }

    // Cancel any pending I/O to the device.
    SensorAdapterCancel(Pipeline);

    // Take ownership of the sensor context from the pipeline.
    sensorContext = (PWINBIO_SENSOR_CONTEXT)Pipeline->SensorContext;
    Pipeline->SensorContext = NULL;

    // Release any structures that remain attached to the context block. 
    // The following example assumes that your sensor adapter context 
    // contains pointers to a capture buffer and an attributes buffer.
    if (sensorContext->CaptureBuffer != NULL)
    {
        // Zero the capture buffer.
        SecureZeroMemory(
            sensorContext->CaptureBuffer,
            sensorContext->CaptureBufferSize);

        // Release the capture buffer.
        _AdapterRelease(sensorContext->CaptureBuffer);
        sensorContext->CaptureBuffer = NULL;
        sensorContext->CaptureBufferSize = 0;
    }

    if (sensorContext->AttributesBuffer != NULL)
    {
        // Zero the attributes buffer.
        SecureZeroMemory(
            sensorContext->AttributesBuffer,
            sensorContext->AttributesBufferSize);

        // Release the attributes buffer.
        _AdapterRelease(sensorContext->AttributesBuffer);
        sensorContext->AttributesBuffer = NULL;
        sensorContext->AttributesBufferSize = 0;
    }

    // Close the overlapped I/O event handle.
    CloseHandle(sensorContext->Overlapped.hEvent);

    // Release the context structure.
    _AdapterRelease(sensorContext);
    sensorContext = NULL;
   
    return S_OK;
}

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_adapter.h (include Winbio_adapter.h)

Voir aussi

Fonctions de plug-in

SensorAdapterAttach

WINBIO_PIPELINE