Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Записывает биометрический образец и добавляет его в шаблон. Начиная с Windows 10 сборки 1607, эта функция доступна для использования с мобильным образом.
Синтаксис
HRESULT WinBioEnrollCapture(
[in] WINBIO_SESSION_HANDLE SessionHandle,
[out, optional] WINBIO_REJECT_DETAIL *RejectDetail
);
Параметры
[in] SessionHandle
Значение WINBIO_SESSION_HANDLE, определяющее открытый биометрический сеанс. Откройте синхронный дескриптор сеанса, вызвав WinBioOpenSession. Откройте дескриптор асинхронного сеанса, вызвав WinBioAsyncOpenSession.
[out, optional] RejectDetail
Указатель на значение ULONG , содержащее дополнительные сведения о неудачном захвате биометрического образца. Если запись выполнена успешно, этот параметр имеет значение нулю. Для отслеживания отпечатков пальцев определены следующие значения:
- 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
Возвращаемое значение
Если функция выполнена успешно, она возвращает S_OK. Если функция завершается ошибкой, она возвращает значение HRESULT , указывающее на ошибку. Возможные значения включают, но не ограничиваются ими в следующей таблице. Список распространенных кодов ошибок см. в разделе "Общие значения HRESULT".
| Код возврата | Description |
|---|---|
|
Вызывающая учетная запись не разрешена для регистрации. |
|
Недопустимый дескриптор сеанса. |
|
Указатель, указанный параметром RejectDetail , не может иметь значение NULL. |
|
Не удалось записать пример. Дополнительные сведения см. в значении RejectDetail . |
|
Биометрическая единица используется и заблокирована. |
|
Для создания надежного шаблона требуется один или несколько дополнительных примеров. Необходимо обновить инструкции пользователю, чтобы отправить дополнительные примеры и снова вызвать WinBioEnrollCapture . |
Замечания
Любое приложение, которое регистрируется с помощью биометрических единиц в системном пуле, должно иметь фокус окна при вызове WinBioEnrollBegin. Если это не так, вызов блокируется до тех пор, пока приложение не получит фокус окна, и пользователь предоставил биометрический образец. Поэтому рекомендуется, чтобы приложение не вызывало WinBioEnrollBegin , пока оно не получило фокус. Способ получения фокуса зависит от типа написанного приложения. Например, при создании приложения графического интерфейса можно реализовать обработчик сообщений, который записывает WM_ACTIVATE, WM_SETFOCUS или другое соответствующее сообщение. Если вы пишете приложение CUI, вызовите GetConsoleWindow , чтобы получить дескриптор в окне консоли и передать этот дескриптор функции SetForegroundWindow , чтобы принудительно перевести окно консоли на передний план и назначить его фокус. Если приложение работает в отсоединяемом процессе и не имеет окна или не является службой Windows, используйте WinBioAcquireFocus и WinBioReleaseFocus для управления фокусом вручную.
Чтобы использовать WinBioEnrollCapture синхронно, вызовите функцию с дескриптором сеанса, созданным путем вызова WinBioOpenSession. Блоки функции блокируются до завершения операции или возникновения ошибки.
Чтобы использовать WinBioEnrollCapture асинхронно, вызовите функцию с дескриптором сеанса, созданным путем вызова WinBioAsyncOpenSession. Платформа выделяет WINBIO_ASYNC_RESULT структуру и использует ее для возврата сведений об успешном выполнении операции или сбое. Если операция не выполнена, платформа возвращает WINBIO_REJECT_DETAIL сведения в вложенной структуре EnrollCapture . Структура WINBIO_ASYNC_RESULT возвращается обратному вызову приложения или в очередь сообщений приложения в зависимости от значения, заданного в параметре NotificationMethod функции WinBioAsyncOpenSession :
- Если вы решили получать уведомления о завершении с помощью обратного вызова, необходимо реализовать функцию PWINBIO_ASYNC_COMPLETION_CALLBACK и задать параметр NotificationMethodдля WINBIO_ASYNC_NOTIFY_CALLBACK.
- Если вы решили получать уведомления о завершении с помощью очереди сообщений приложения, необходимо задать для параметра NotificationMethodзначение WINBIO_ASYNC_NOTIFY_MESSAGE. Платформа возвращает указатель WINBIO_ASYNC_RESULT на поле LPARAM сообщения окна.
Windows 7: Эту операцию можно выполнять асинхронно с помощью функции WinBioEnrollCaptureWithCallback . Функция проверяет входные аргументы и возвращает немедленно. Если входные аргументы недопустимы, функция возвращает код ошибки. В противном случае платформа запускает операцию в другом потоке. Когда асинхронная операция завершается или возникает ошибка, платформа отправляет результаты в функцию PWINBIO_ENROLL_CAPTURE_CALLBACK , реализованную приложением.
Примеры
Следующая функция регистрирует биометрический шаблон в системном пуле путем вызова WinBioEnrollCapture. Ссылка на статическую библиотеку Winbio.lib и включите следующие файлы заголовков:
- Windows.h
- Stdio.h
- Conio.h
- Winbio.h
HRESULT EnrollSysPool(
BOOL discardEnrollment,
WINBIO_BIOMETRIC_SUBTYPE subFactor)
{
HRESULT hr = S_OK;
WINBIO_IDENTITY identity = {0};
WINBIO_SESSION_HANDLE sessionHandle = NULL;
WINBIO_UNIT_ID unitId = 0;
WINBIO_REJECT_DETAIL rejectDetail = 0;
BOOLEAN isNewTemplate = TRUE;
// Connect to the system pool.
hr = WinBioOpenSession(
WINBIO_TYPE_FINGERPRINT, // Service provider
WINBIO_POOL_SYSTEM, // Pool type
WINBIO_FLAG_DEFAULT, // Configuration and access
NULL, // Array of biometric unit IDs
0, // Count of biometric unit IDs
NULL, // Database ID
&sessionHandle // [out] Session handle
);
if (FAILED(hr))
{
wprintf_s(L"\n WinBioOpenSession failed. ");
wprintf_s(L"hr = 0x%x\n", hr);
goto e_Exit;
}
// Locate a sensor.
wprintf_s(L"\n Swipe your finger on the sensor...\n");
hr = WinBioLocateSensor( sessionHandle, &unitId);
if (FAILED(hr))
{
wprintf_s(L"\n WinBioLocateSensor failed. hr = 0x%x\n", hr);
goto e_Exit;
}
// Begin the enrollment sequence.
wprintf_s(L"\n Starting enrollment sequence...\n");
hr = WinBioEnrollBegin(
sessionHandle, // Handle to open biometric session
subFactor, // Finger to create template for
unitId // Biometric unit ID
);
if (FAILED(hr))
{
wprintf_s(L"\n WinBioEnrollBegin failed. hr = 0x%x\n", hr);
goto e_Exit;
}
// Capture enrollment information by swiping the sensor with
// the finger identified by the subFactor argument in the
// WinBioEnrollBegin function.
for (int swipeCount = 1;; ++swipeCount)
{
wprintf_s(L"\n Swipe the sensor to capture %s sample.",
(swipeCount == 1)?L"the first":L"another");
hr = WinBioEnrollCapture(
sessionHandle, // Handle to open biometric session
&rejectDetail // [out] Failure information
);
wprintf_s(L"\n Sample %d captured from unit number %d.",
swipeCount,
unitId);
if (hr == WINBIO_I_MORE_DATA)
{
wprintf_s(L"\n More data required.\n");
continue;
}
if (FAILED(hr))
{
if (hr == WINBIO_E_BAD_CAPTURE)
{
wprintf_s(L"\n Error: Bad capture; reason: %d",
rejectDetail);
continue;
}
else
{
wprintf_s(L"\n WinBioEnrollCapture failed. hr = 0x%x", hr);
goto e_Exit;
}
}
else
{
wprintf_s(L"\n Template completed.\n");
break;
}
}
// Discard the enrollment if the appropriate flag is set.
// Commit the enrollment if it is not discarded.
if (discardEnrollment == TRUE)
{
wprintf_s(L"\n Discarding enrollment...\n\n");
hr = WinBioEnrollDiscard( sessionHandle );
if (FAILED(hr))
{
wprintf_s(L"\n WinBioLocateSensor failed. hr = 0x%x\n", hr);
}
goto e_Exit;
}
else
{
wprintf_s(L"\n Committing enrollment...\n");
hr = WinBioEnrollCommit(
sessionHandle, // Handle to open biometric session
&identity, // WINBIO_IDENTITY object for the user
&isNewTemplate); // Is this a new template
if (FAILED(hr))
{
wprintf_s(L"\n WinBioEnrollCommit failed. hr = 0x%x\n", hr);
goto e_Exit;
}
}
e_Exit:
if (sessionHandle != NULL)
{
WinBioCloseSession(sessionHandle);
sessionHandle = NULL;
}
wprintf_s(L" Press any key to continue...");
_getch();
return hr;
}
Требования
| Требование | Ценность |
|---|---|
| Минимальный поддерживаемый клиент | Windows 7 [только настольные приложения] |
| минимальный поддерживаемый сервер | Windows Server 2008 R2 [только классические приложения] |
| целевая платформа | Виндоус |
| Header | winbio.h (include Winbio.h) |
| Library | Winbio.lib |
| DLL | Winbio.dll |