функция обратного вызова 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 , чтобы указать на ошибку.
Код возврата | Описание |
---|---|
|
Параметр Pipeline не может иметь значение NULL. |
|
Поле 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) |