Поделиться через


функция обратного вызова PIBIO_SENSOR_DETACH_FN (winbio_adapter.h)

Вызывается биометрической платформой Windows непосредственно перед удалением адаптера датчика из конвейера обработки биометрической единицы. Эта функция предназначена для освобождения определенных ресурсов адаптера, подключенных к конвейеру.

Синтаксис

PIBIO_SENSOR_DETACH_FN PibioSensorDetachFn;

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

Параметры

[in, out] Pipeline

Указатель на структуру WINBIO_PIPELINE , связанную с биометрической единицей, выполняющей операцию.

Возвращаемое значение

Если функция выполняется успешно, она возвращает S_OK. Если функция завершается сбоем, она должна вернуть одно из следующих значений HRESULT , чтобы указать на ошибку.

Код возврата Описание
E_POINTER
Параметр Pipeline не может иметь значение NULL.
WINBIO_E_INVALID_DEVICE_STATE
Поле SensorContext структуры WINBIO_PIPELINE не может иметь значение NULL.

Комментарии

Чтобы предотвратить утечку памяти, реализация функции SensorAdapterDetach должна освободить частную структуру WINBIO_SENSOR_CONTEXT , на которую указывает член SensorContext конвейера, а также любые другие ресурсы, подключенные к контексту датчика.

Если при вызове этой функции поле SensorContext в объекте конвейера имеет значение NULL , конвейер не был инициализирован должным образом и необходимо вернуть WINBIO_E_INVALID_DEVICE_STATE , чтобы уведомить Windows Биометрическую платформу о проблеме.

Перед возвращением S_OK эта функция должна задать для поля SensorContext структуры WINBIO_PIPELINEзначение NULL.

Так как эта функция вызывается после удаления адаптеров хранилища и подсистемы из конвейера, реализация этой функции не должна вызывать функции, на которые ссылается WINBIO_ENGINE_INTERFACE или WINBIO_STORAGE_INTERFACE структуры, на которые указывают элементы EngineInterface и StorageInterface объекта конвейера.

Так как элемент SensorHandle структуры WINBIO_PIPELINE будет содержать допустимый дескриптор даже после вызова SensorAdapterDetach , вы можете использовать дескриптор для доступа к устройству датчика при необходимости. Эта функция не должна закрывать дескриптор датчика. Биометрическая платформа Windows сделает это после возврата SensorAdapterDetach .

Примеры

В следующем псевдокоде показана одна из возможных реализаций этой функции. Пример не компилируется. Вы должны адаптировать его в соответствии с вашей целью.

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

Требования

Требование Значение
Минимальная версия клиента Windows 7 [только классические приложения]
Минимальная версия сервера Windows Server 2008 R2 [только классические приложения]
Целевая платформа Windows
Header winbio_adapter.h (включая Winbio_adapter.h)

См. также раздел

Функции подключаемых модулей

SensorAdapterAttach

WINBIO_PIPELINE