PWINBIO_CAPTURE_CALLBACK 콜백 함수(winbio.h)
비동기 WinBioCaptureSampleWithCallback 함수의 결과를 반환하기 위해 Windows 생체 인식 프레임워크에서 호출됩니다. 클라이언트 애플리케이션은 이 함수를 구현해야 합니다.
- 작업이 완료되면 알림을 받을 PWINBIO_ASYNC_COMPLETION_CALLBACK 함수를 구현합니다.
- WinBioAsyncOpenSession 함수를 호출합니다. 콜백의 주소를 CallbackRoutine 매개 변수에 전달합니다. NotificationMethod 매개 변수에 WINBIO_ASYNC_NOTIFY_CALLBACK 전달합니다. 비동기 세션 핸들을 검색합니다.
- 비동기 세션 핸들을 사용하여 WinBioCaptureSample을 호출합니다. 작업이 완료되면 Windows 생체 인식 프레임워크는 결과를 사용하여 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
애플리케이션에서 정의하고 WinBioCaptureSampleWithCallback 함수의 CaptureCallbackContext 매개 변수에 전달된 버퍼에 대한 포인터입니다. 버퍼는 프레임워크 또는 생체 인식 단위에 의해 수정되지 않습니다. 애플리케이션은 데이터를 사용하여 수행할 작업을 결정하거나 생체 인식 캡처에 대한 추가 정보를 유지 관리할 수 있습니다.
[in] OperationStatus
캡처 작업에서 반환된 오류 코드입니다.
[in] UnitId
생체 인식 단위 ID 번호입니다.
[in] Sample
샘플 데이터에 대한 포인터입니다.
[in] SampleSize
Sample 매개 변수가 가리키는 샘플 데이터의 크기(바이트)입니다.
[in] RejectDetail
작업을 수행하기 위한 오류(있는 경우)에 대한 추가 정보입니다. 자세한 내용은 설명 부분을 참조하세요.
반환 값
없음
설명
현재 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 |
헤더 | winbio.h |