Compartir a través de


PIBIO_SENSOR_DETACH_FN función de devolución de llamada (winbio_adapter.h)

Lo llama Windows Biometric Framework inmediatamente antes de que se quite un adaptador de sensor de la canalización de procesamiento de la unidad biométrica. El propósito de esta función es liberar recursos específicos del adaptador conectados a la canalización.

Sintaxis

PIBIO_SENSOR_DETACH_FN PibioSensorDetachFn;

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

Parámetros

[in, out] Pipeline

Puntero a la estructura WINBIO_PIPELINE asociada a la unidad biométrica que realiza la operación.

Valor devuelto

Si la función se realiza correctamente, devuelve S_OK. Si se produce un error en la función, debe devolver uno de los siguientes valores HRESULT para indicar el error.

Código devuelto Descripción
E_POINTER
El parámetro Pipeline no puede ser NULL.
WINBIO_E_INVALID_DEVICE_STATE
El campo SensorContext de la estructura WINBIO_PIPELINE no puede ser NULL.

Comentarios

Para evitar pérdidas de memoria, la implementación de la función SensorAdapterDetach debe liberar la estructura de WINBIO_SENSOR_CONTEXT privada a la que apunta el miembro SensorContext de la canalización junto con cualquier otro recurso asociado al contexto del sensor.

Si el campo SensorContext del objeto de canalización es NULL cuando se llama a esta función, la canalización no se inicializó correctamente y debe devolver WINBIO_E_INVALID_DEVICE_STATE para notificar al marco biométrico de Windows el problema.

Antes de devolver S_OK, esta función debe establecer el campo SensorContext de la estructura WINBIO_PIPELINE en NULL.

Dado que se llama a esta función después de quitar los adaptadores de almacenamiento y motor de la canalización, la implementación de esta función no debe llamar a ninguna función a la que hacen referencia las estructuras WINBIO_ENGINE_INTERFACE o WINBIO_STORAGE_INTERFACE a las que apuntan los miembros EngineInterface y StorageInterface del objeto de canalización.

Dado que el miembro SensorHandle de la estructura WINBIO_PIPELINE contendrá un identificador válido incluso después de llamar a SensorAdapterDetach , puede usar el identificador para acceder al dispositivo del sensor si es necesario. Esta función no debe cerrar el identificador del sensor. El marco biométrico de Windows lo hará después de que Se devuelva SensorAdapterDetach .

Ejemplos

El pseudocódigo siguiente muestra una posible implementación de esta función. El ejemplo no se compila. Debes adaptarlo para adaptarlo a tu propósito.

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

Requisitos

Requisito Value
Cliente mínimo compatible Windows 7 [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2008 R2 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado winbio_adapter.h (incluya Winbio_adapter.h)

Consulte también

Funciones de complemento

SensorAdapterAttach

WINBIO_PIPELINE