PWINBIO_CAPTURE_CALLBACK funzione di callback (winbio.h)
Chiamato da Windows Biometric Framework per restituire i risultati dalla funzione asincrona WinBioCaptureSampleWithCallback . L'applicazione client deve implementare questa funzione.
- Implementare una funzione PWINBIO_ASYNC_COMPLETION_CALLBACK per ricevere un avviso al termine dell'operazione.
- Chiamare la funzione WinBioAsyncOpenSession . Passare l'indirizzo del callback nel parametro CallbackRoutine . Passare WINBIO_ASYNC_NOTIFY_CALLBACK nel parametro NotificationMethod . Recuperare un handle di sessione asincrono.
- Usare l'handle di sessione asincrono per chiamare WinBioCaptureSample. Al termine dell'operazione, Windows Biometric Framework allocherà e inizializzerà una struttura WINBIO_ASYNC_RESULT con i risultati e richiamerà il callback con un puntatore alla struttura dei risultati.
- Chiama WinBioFree dall'implementazione del callback per rilasciare la struttura WINBIO_ASYNC_RESULT al termine dell'uso.
Sintassi
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
)
{...}
Parametri
[in, optional] CaptureCallbackContext
Puntatore a un buffer definito dall'applicazione e passato al parametro CaptureCallbackContext della funzione WinBioCaptureSampleWithCallback . Il buffer non viene modificato dal framework o dall'unità biometrica. L'applicazione può usare i dati per determinare quali azioni eseguire o mantenere informazioni aggiuntive sull'acquisizione biometrica.
[in] OperationStatus
Codice di errore restituito dall'operazione di acquisizione.
[in] UnitId
Numero ID unità biometrica.
[in] Sample
Puntatore ai dati di esempio.
[in] SampleSize
Dimensioni, in byte, dei dati di esempio a cui punta il parametro Sample .
[in] RejectDetail
Ulteriori informazioni sull'errore, se presente, per eseguire l'operazione. Per altre informazioni, vedere la sezione Osservazioni.
Valore restituito
nessuno
Osservazioni
Attualmente, Windows Biometric Framework supporta solo lettori di impronte digitali. Pertanto, se un'operazione ha esito negativo e restituisce informazioni aggiuntive in una costante WINBIO_REJECT_DETAIL , sarà uno dei valori seguenti:
- 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
Esempio
L'esempio di codice seguente acquisisce un esempio in modo asincrono chiamando WinBioCaptureSampleWithCallback e passando un puntatore a una funzione di callback personalizzata, CaptureSampleCallback. Collegarsi alla libreria statica Winbio.lib e includere i file di intestazione seguenti:
- 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;
}
}
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows 7 [solo app desktop] |
Server minimo supportato | Windows Server 2008 R2 [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | winbio.h |