PIBIO_ENGINE_EXPORT_ENGINE_DATA_FN
コールバックシグネチャ
HRESULT PIBIO_ENGINE_EXPORT_ENGINE_DATA_FN(
WINBIO_PIPELINE* Pipeline,
BYTE Flags,
WINBIO_BIR** SampleBuffer,
UINT_PTR* SampleSize
);パラメーター
| フィールド | 型 | 説明 |
|---|---|---|
| Pipeline | WINBIO_PIPELINE* | 操作を実行するバイオメトリックユニットに関連付けられた WINBIO_PIPELINE 構造体へのポインター。 |
| Flags | BYTE | エンジンが返す WINBIO_BIR 構造体のプロパティを指定する値。次のセキュリティおよび処理レベルのフラグのビットごとの OR を指定できます。 データは暗号化されています。
|
| SampleBuffer | WINBIO_BIR** | 特徴セットまたはテンプレートを格納する WINBIO_BIR 構造体へのポインターを受け取る変数のアドレス。 |
| SampleSize | UINT_PTR* | SampleBuffer パラメーターで返される WINBIO_BIR 構造体のサイズ (バイト単位) を格納する変数へのポインター。 |
公式ドキュメント
直近に処理された特徴セットまたはテンプレートのコピーを、標準の WINBIO_BIR 構造体の形式でエンジンから取得するために、Windows Biometric Framework から呼び出されます。
戻り値
関数が成功した場合は S_OK を返します。関数が失敗した場合は、エラーを示すために次のいずれかの HRESULT 値を返す必要があります。
| 戻り値 | 説明 |
|---|---|
| エンジンアダプターが、Flags パラメーターで指定されたフラグの組み合わせをサポートしていません。 | |
| WINBIO_BIR 構造体を作成するための十分なメモリがありません。 | |
| 必須のポインターパラメーターが NULL です。 | |
| パイプラインに、Flags パラメーターで要求される種類のデータが含まれていません。 | |
| このメソッドは現在実装されていません。 |
解説(Remarks)
SampleBuffer パラメーターで返すバッファーは、HeapAlloc 関数を使用してプロセスヒープから割り当てる必要があります。バッファーを作成すると、それは Windows Biometric Framework の所有物になります。Framework は使用を終えた時点でこのメモリを解放するため、この関数の実装ではバッファーを解放したり、そのポインターを保存したりしてはなりません。ポインターを保存しないことで、この関数から戻った後にエンジンアダプターの他の部分がそのバッファーを使用しようとするのを防げます。
例
次の擬似コードは、この関数の実装例の一つを示しています。この例はそのままではコンパイルできません。目的に合わせて調整してください。
//////////////////////////////////////////////////////////////////////////////////////////
//
// EngineAdapterExportEngineData
//
// Purpose:
// Retrieves a copy of the most recently processed feature set or template.
//
// Parameters:
// Pipeline - Pointer to a WINBIO_PIPELINE structure associated
// with the biometric unit performing the operation
// Flags - Security and processing level flags
// SampleBuffer - Contains the feature set or template
// SampleSize - Size, in bytes, of the structure returned in the
// SampleBuffer parameter.
//
static HRESULT
WINAPI
EngineAdapterExportEngineData(
__inout PWINBIO_PIPELINE Pipeline,
__in WINBIO_BIR_DATA_FLAGS Flags,
__out PWINBIO_BIR *SampleBuffer,
__out PSIZE_T SampleSize
)
{
HRESULT hr = S_OK;
PWINBIO_BIR birAddress = NULL;
SIZE_T birSize = 0;
// 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_ENGINE_CONTEXT context =
(PWINBIO_ENGINE_CONTEXT)Pipeline->EngineContext;
// At least one processing level flag must be set. Your adapter can also
// place additional restrictions on supported export formats.
if (Flags & (WINBIO_DATA_FLAG_RAW |
WINBIO_DATA_FLAG_INTERMEDIATE |
WINBIO_DATA_FLAG_PROCESSED) == 0)
{
hr = E_INVALIDARG;
goto cleanup;
}
// You must implement the _CreateBirFromAdapterData function to extract
// data from the engine context and create a new WINBIO_BIR structure. The
// function passes ownership of the new biometric information record (BIR)
// to the EngineAdapterExportEngineData routine which then passes the BIR
// to the caller.
hr = _CreateBirFromAdapterData( context, Flags, &birAddress, &birSize);
if (SUCCEEDED(hr))
{
*SampleBuffer = birAddress;
*SampleSize = birSize;
}
cleanup:
return hr;
}
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)