コールバック関数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 値を返す必要があります。

リターン コード 説明
E_OUTOFMEMORY
WINBIO_BIR構造体を作成するのに十分なメモリがありません。
E_POINTER
必須ポインター パラメーターは NULL です
WINBIO_E_INVALID_DEVICE_STATE
Pipeline 引数が指すWINBIO_PIPELINE構造体の SensorContext メンバーは NULL です
WINBIO_E_NO_CAPTURE_DATA
キャプチャ データが存在しません。
E_NOTIMPL
このメソッドは、現在実装されていません。

解説

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 を含む)

関連項目

プラグイン関数