コールバック関数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 にすることはできません。 |
|
WINBIO_PIPELINE構造体の SensorContext フィールドを NULL にすることはできません。 |
注釈
メモリ リークを防ぐために、SensorAdapterDetach 関数の実装では、パイプラインの SensorContext メンバーが指すプライベート WINBIO_SENSOR_CONTEXT構造体と、センサー コンテキストにアタッチされている他のリソースを解放する必要があります。
この関数の呼び出し時にパイプライン オブジェクトの SensorContext フィールドが NULL の場合、パイプラインは正しく初期化されていないため、 windows 生体認証フレームワークに問題を通知するためにWINBIO_E_INVALID_DEVICE_STATEを返す必要があります。
S_OKを返す前に、この関数は、WINBIO_PIPELINE構造体の SensorContext フィールドを NULL に設定する必要があります。
この関数は、ストレージ アダプターとエンジン アダプターがパイプラインから削除された後に呼び出されるため、この関数の実装では、パイプライン オブジェクトの EngineInterface メンバーと StorageInterface メンバーが指すWINBIO_ENGINE_INTERFACEまたはWINBIO_STORAGE_INTERFACE構造体によって参照される関数を呼び出さないでください。
WINBIO_PIPELINE構造体の SensorHandle メンバーには SensorAdapterDetach が呼び出された後でも有効なハンドルが含まれるため、必要に応じて ハンドルを使用してセンサー デバイスにアクセスできます。 この関数は、センサー ハンドルを閉じてはいけません。 Windows 生体認証フレームワークは、 SensorAdapterDetach から戻った後に行われます。
例
次の擬似コードは、この関数の 1 つの可能な実装を示しています。 この例はコンパイルされません。 目的に合わせて調整する必要があります。
//////////////////////////////////////////////////////////////////////////////////////////
//
// 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 |
ヘッダー | winbio_adapter.h (Winbio_adapter.h を含む) |