コールバック関数PIBIO_SENSOR_EXPORT_SENSOR_DATA_FN (winbio_adapter.h)
Windows 生体認証フレームワークによって呼び出され、標準の WINBIO_BIR 構造として書式設定された、最近キャプチャされた生体認証サンプルのコピーを取得します。
構文
PIBIO_SENSOR_EXPORT_SENSOR_DATA_FN PibioSensorExportSensorDataFn;
HRESULT PibioSensorExportSensorDataFn(
[in, out] PWINBIO_PIPELINE Pipeline,
[out] PWINBIO_BIR *SampleBuffer,
[out] PSIZE_T SampleSize
)
{...}
パラメーター
[in, out] Pipeline
操作を実行する生体認証ユニットに関連付けられている WINBIO_PIPELINE 構造体へのポインター。
[out] SampleBuffer
サンプルを含む WINBIO_BIR 構造体へのポインターを受け取る変数のアドレス。
[out] SampleSize
SampleBuffer パラメーターで指定されたバッファーのサイズ (バイト単位) を受け取る変数へのポインター。
戻り値
関数が成功した場合は、S_OK を返します。 関数が失敗した場合は、エラーを示すために次のいずれかの HRESULT 値を返す必要があります。
リターン コード | 説明 |
---|---|
|
WINBIO_BIR構造体を作成するのに十分なメモリがありません。 |
|
必須ポインター パラメーターは NULL です。 |
|
Pipeline 引数が指すWINBIO_PIPELINE構造体の SensorContext メンバーは NULL です。 |
|
キャプチャ データが存在しません。 |
|
このメソッドは、現在実装されていません。 |
解説
HeapAlloc 関数を使用して、プロセス ヒープから SampleBuffer パラメーターで返されるバッファーを割り当てる必要があります。 作成されると、このバッファーは Windows 生体認証フレームワークのプロパティになります。 フレームワークはこのメモリの使用が完了すると割り当てを解除するため、この関数の実装ではバッファーの割り当てを解除したり、バッファーへのポインターを保存したりしないでください。 ポインターを保存しないことにより、この関数が戻った後にエンジン アダプターの他の部分がバッファーの使用を試みないようにすることができます。
例
次の擬似コードは、この関数の 1 つの可能な実装を示しています。 この例はコンパイルされません。 目的に合わせて調整する必要があります。
//////////////////////////////////////////////////////////////////////////////////////////
//
// SensorAdapterExportSensorData
//
// Purpose:
// Retrieves a copy of the most recently captured biometric sample.
//
// Parameters:
// Pipeline - Pointer to a WINBIO_PIPELINE structure associated with
// the biometric unit.
// SampleBuffer - Address of a variable that receives a pointer to a
// WINBIO_BIR structure that contains the sample.
// SampleSize - Pointer to a variable that receives the size, in bytes,
// of the buffer specified by the SampleBuffer parameter.
//
static HRESULT
WINAPI
SensorAdapterExportSensorData(
__inout PWINBIO_PIPELINE Pipeline,
__out PWINBIO_BIR *SampleBuffer,
__out SIZE_T *SampleSize
)
{
PWINBIO_BIR sampleBuffer = NULL;
// Verify that pointer arguments are not NULL.
if (!ARGUMENT_PRESENT(Pipeline) ||
!ARGUMENT_PRESENT(SampleBuffer) ||
!ARGUMENT_PRESENT(SampleSize))
{
hr = E_POINTER;
goto cleanup;
}
// Retrieve the context from the pipeline.
PWINBIO_SENSOR_CONTEXT sensorContext =
(PWINBIO_SENSOR_CONTEXT)Pipeline->SensorContext;
// Verify the state of the pipeline.
if (sensorContext == NULL)
{
return WINBIO_E_INVALID_DEVICE_STATE;
}
// Determine whether there is capture data to return.
if (sensorContext->CaptureBuffer == NULL ||
sensorContext->CaptureBuffer->CaptureData.Size == 0)
{
return WINBIO_E_NO_CAPTURE_DATA;
}
// Allocate a buffer, copy the data into it, and return
// the buffer and buffer size to the caller.
sampleBuffer = _AdapterAlloc(sensorContext->CaptureBuffer->CaptureData.Size);
if (sampleBuffer == NULL)
{
return E_OUTOFMEMORY;
}
RtlCopyMemory(
sampleBuffer,
sensorContext->CaptureBuffer->CaptureData.Data,
sensorContext->CaptureBuffer->CaptureData.Size
);
*SampleBuffer = sampleBuffer;
sampleBuffer = NULL;
*SampleSize = Pipeline->SensorContext->CaptureBuffer->CaptureData.Size;
return S_OK;
}
要件
サポートされている最小のクライアント | Windows 7 [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2008 R2 [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | winbio_adapter.h (Winbio_adapter.h を含む) |
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示