функция обратного вызова PWINBIO_CAPTURE_CALLBACK (winbio.h)
Вызывается Платформой Биометрических данных Windows для возврата результатов из асинхронной функции WinBioCaptureSampleWithCallback . Клиентское приложение должно реализовать эту функцию.
- Реализуйте функцию PWINBIO_ASYNC_COMPLETION_CALLBACK для получения уведомления по завершении операции.
- Вызовите функцию WinBioAsyncOpenSession . Передайте адрес обратного вызова в параметре CallbackRoutine . Передайте WINBIO_ASYNC_NOTIFY_CALLBACK в параметре NotificationMethod . Получение асинхронного дескриптора сеанса.
- Используйте асинхронный дескриптор сеанса для вызова WinBioCaptureSample. Когда операция завершится, Windows Biometric Framework выделит и инициализирует структуру WINBIO_ASYNC_RESULT с результатами и вызовет обратный вызов с указателем на структуру результатов.
- Вызовите WinBioFree из реализации обратного вызова, чтобы освободить структуру WINBIO_ASYNC_RESULT после завершения ее использования.
Синтаксис
PWINBIO_CAPTURE_CALLBACK PwinbioCaptureCallback;
void PwinbioCaptureCallback(
[in, optional] PVOID CaptureCallbackContext,
[in] HRESULT OperationStatus,
[in] WINBIO_UNIT_ID UnitId,
[in] PWINBIO_BIR Sample,
[in] SIZE_T SampleSize,
[in] WINBIO_REJECT_DETAIL RejectDetail
)
{...}
Параметры
[in, optional] CaptureCallbackContext
Указатель на буфер, определенный приложением и переданный в параметр CaptureCallbackContext функции WinBioCaptureSampleWithCallback . Буфер не изменяется платформой или биометрической единицей. Приложение может использовать эти данные, чтобы определить, какие действия следует выполнить или сохранить дополнительные сведения о биометрической записи.
[in] OperationStatus
Код ошибки, возвращенный операцией записи.
[in] UnitId
Идентификационный номер биометрической единицы.
[in] Sample
Указатель на образец данных.
[in] SampleSize
Размер образца данных, на которые указывает параметр Sample , в байтах.
[in] RejectDetail
Дополнительные сведения о сбое при выполнении операции. Дополнительные сведения см. в подразделе "Примечания".
Возвращаемое значение
None
Remarks
В настоящее время Платформа Биометрических данных Windows поддерживает только средства чтения отпечатков пальцев. Таким образом, если операция завершается сбоем и возвращает дополнительные сведения в константе WINBIO_REJECT_DETAIL , это будет одно из следующих значений:
- WINBIO_FP_TOO_HIGH
- WINBIO_FP_TOO_LOW
- WINBIO_FP_TOO_LEFT
- WINBIO_FP_TOO_RIGHT
- WINBIO_FP_TOO_FAST
- WINBIO_FP_TOO_SLOW
- WINBIO_FP_POOR_QUALITY
- WINBIO_FP_TOO_SKEWED
- WINBIO_FP_TOO_SHORT
- WINBIO_FP_MERGE_FAILURE
Примеры
В следующем примере кода пример захватывается асинхронно путем вызова WinBioCaptureSampleWithCallback и передачи указателя на пользовательскую функцию обратного вызова CaptureSampleCallback. Ссылка на статическую библиотеку Winbio.lib и включение следующих файлов заголовков:
- Windows.h
- Stdio.h
- Conio.h
- Winbio.h
HRESULT CaptureSampleWithCallback(BOOL bCancel)
{
HRESULT hr = S_OK;
WINBIO_SESSION_HANDLE sessionHandle = NULL;
// Connect to the system pool.
hr = WinBioOpenSession(
WINBIO_TYPE_FINGERPRINT, // Service provider
WINBIO_POOL_SYSTEM, // Pool type
WINBIO_FLAG_RAW, // Raw access
NULL, // Array of biometric unit IDs
0, // Count of biometric unit IDs
WINBIO_DB_DEFAULT, // Default database
&sessionHandle // [out] Session handle
);
if (FAILED(hr))
{
wprintf_s(L"\n WinBioOpenSession failed. hr = 0x%x\n", hr);
goto e_Exit;
}
// Capture a biometric sample asynchronously.
wprintf_s(L"\n Calling WinBioCaptureSampleWithCallback ");
hr = WinBioCaptureSampleWithCallback(
sessionHandle, // Open session handle
WINBIO_NO_PURPOSE_AVAILABLE, // Intended use of the sample
WINBIO_DATA_FLAG_RAW, // Sample format
CaptureSampleCallback, // Callback function
NULL // Optional context
);
if (FAILED(hr))
{
wprintf_s(L"\n WinBioCaptureSampleWithCallback failed. ");
wprintf_s(L"hr = 0x%x\n", hr);
goto e_Exit;
}
wprintf_s(L"\n Swipe the sensor ...\n");
// Cancel the capture process if the bCancel flag is set.
if (bCancel)
{
wprintf_s(L"\n Starting CANCEL timer...");
Sleep( 7000 );
wprintf_s(L"\n Calling WinBioCancel\n");
hr = WinBioCancel( sessionHandle );
if (FAILED(hr))
{
wprintf_s(L"\n WinBioCancel failed. hr = 0x%x\n", hr);
goto e_Exit;
}
}
// Wait for the asynchronous capture process to complete
// or be canceled.
hr = WinBioWait( sessionHandle );
if (FAILED(hr))
{
wprintf_s(L"\n WinBioWait failed. hr = 0x%x\n", hr);
}
e_Exit:
if (sessionHandle != NULL)
{
WinBioCloseSession(sessionHandle);
sessionHandle = NULL;
}
wprintf_s(L"\n Press any key to exit...");
_getch();
return hr;
}
//------------------------------------------------------------------------
// The following function is the callback for WinBioCaptureSampleWithCallback.
// The function filters the response from the biometric subsystem and
// writes a result to the console window.
//
VOID CALLBACK CaptureSampleCallback(
__in_opt PVOID CaptureCallbackContext,
__in HRESULT OperationStatus,
__in WINBIO_UNIT_ID UnitId,
__in_bcount(SampleSize) PWINBIO_BIR Sample,
__in SIZE_T SampleSize,
__in WINBIO_REJECT_DETAIL RejectDetail
)
{
UNREFERENCED_PARAMETER(CaptureCallbackContext);
wprintf_s(L"\n CaptureSampleCallback executing");
wprintf_s(L"\n Swipe processed - Unit ID: %d", UnitId);
if (FAILED(OperationStatus))
{
if (OperationStatus == WINBIO_E_BAD_CAPTURE)
{
wprintf_s(L"\n Bad capture; reason: %d\n", RejectDetail);
}
else
{
wprintf_s(L"\n WinBioCaptureSampleWithCallback failed. ");
wprintf_s(L" OperationStatus = 0x%x\n", OperationStatus);
}
goto e_Exit;
}
wprintf_s(L"\n Captured %d bytes.\n", SampleSize);
e_Exit:
if (Sample != NULL)
{
WinBioFree(Sample);
Sample = NULL;
}
}
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 7 [только классические приложения] |
Минимальная версия сервера | Windows Server 2008 R2 [только классические приложения] |
Целевая платформа | Windows |
Header | winbio.h |