Функция WinBioLocateSensor (winbio.h)
Извлекает идентификатор биометрической единицы, выбранной пользователем в интерактивном режиме.
Синтаксис
HRESULT WinBioLocateSensor(
[in] WINBIO_SESSION_HANDLE SessionHandle,
[out, optional] WINBIO_UNIT_ID *UnitId
);
Параметры
[in] SessionHandle
Значение WINBIO_SESSION_HANDLE, определяющее открытый биометрический сеанс. Откройте синхронный дескриптор сеанса, вызвав WinBioOpenSession. Откройте асинхронный дескриптор сеанса, вызвав WinBioAsyncOpenSession.
[out, optional] UnitId
Указатель на значение ULONG , указывающее биометрическую единицу.
Возвращаемое значение
Если функция выполняется успешно, она возвращает S_OK. Если функция завершается сбоем, она возвращает значение HRESULT , указывающее на ошибку. Допустимые значения включают, но не ограничиваются, значения, приведенные в следующей таблице. Список распространенных кодов ошибок см. в разделе Общие значения HRESULT.
Код возврата | Описание |
---|---|
|
Недопустимый дескриптор сеанса. |
|
Указатель, заданный параметром UnitId, не может иметь значение NULL. |
|
Не удалось выполнить операцию, так как биометрическая единица в настоящее время используется для транзакции регистрации (только для системного пула). |
Комментарии
Эту функцию можно использовать в системах с несколькими датчиками, чтобы определить, какой датчик предпочтителен для регистрации пользователем. Эта функция не возвращает идентификационные сведения. Он предоставляется только для указания выбора датчика пользователем.
Вызовы этой функции с использованием системного пула будут блокироваться, пока приложение не получит фокус окна и пользователь не предоставит биометрическую выборку. Поэтому рекомендуется, чтобы приложение не вызывало WinBioLocateSensor , пока оно не получит фокус. Способ получения фокуса зависит от типа приложения, которое вы пишете. Например, при создании приложения с графическим интерфейсом можно реализовать обработчик сообщений, который захватывает WM_ACTIVATE, WM_SETFOCUS или другое соответствующее сообщение. Если вы пишете приложение CUI, вызовите Метод GetConsoleWindow , чтобы получить дескриптор в окне консоли и передать этот дескриптор в функцию SetForegroundWindow , чтобы принудительно поместить окно консоли на передний план и назначить ему фокус. Если приложение выполняется в отсоединяемом процессе и не имеет окна или является службой Windows, используйте WinBioAcquireFocus и WinBioReleaseFocus для управления фокусом вручную.
Чтобы использовать WinBioLocateSensor синхронно, вызовите функцию с дескриптором сеанса, созданным путем вызова WinBioOpenSession. Функция блокируется, пока операция не завершится или не возникнет ошибка.
Чтобы использовать WinBioLocateSensor асинхронно , вызовите функцию с дескриптором сеанса, созданным путем вызова WinBioAsyncOpenSession. Платформа выделяет структуру WINBIO_ASYNC_RESULT и использует ее для возврата сведений об успешном или неудачном выполнении операции. Структура 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: Эту операцию можно выполнить асинхронно с помощью функции WinBioLocateSensorWithCallback . Функция проверяет входные аргументы и возвращает немедленно. Если входные аргументы недопустимы, функция возвращает код ошибки. В противном случае платформа запускает операцию в другом потоке. Когда асинхронная операция завершается или возникает ошибка, платформа отправляет результаты в функцию PWINBIO_LOCATE_SENSOR_CALLBACK , реализованную приложением.
Примеры
Следующая функция вызывает WinBioLocateSensor для поиска установленного биометрического датчика. Ссылка на статическую библиотеку Winbio.lib и включение следующих файлов заголовков:
- Windows.h
- Stdio.h
- Conio.h
- Winbio.h
HRESULT LocateSensor( )
{
HRESULT hr = S_OK;
WINBIO_SESSION_HANDLE sessionHandle = NULL;
WINBIO_UNIT_ID unitId = 0;
// 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 WinBioEnumBiometricUnits failed. hr = 0x%x\n", hr);
goto e_Exit;
}
// Locate the sensor.
wprintf_s(L"\n Tap the sensor once...\n");
hr = WinBioLocateSensor( sessionHandle, &unitId);
if (FAILED(hr))
{
wprintf_s(L"\n WinBioLocateSensor failed. hr = 0x%x\n", hr);
goto e_Exit;
}
wprintf_s(L"\n Sensor located successfully. ");
wprintf_s(L"\n Unit ID = %d \n", unitId);
e_Exit:
if (sessionHandle != NULL)
{
WinBioCloseSession(sessionHandle);
sessionHandle = NULL;
}
wprintf_s(L"\n Hit any key to exit...");
_getch();
return hr;
}
Требования
Минимальная версия клиента | Windows 7 [только классические приложения] |
Минимальная версия сервера | Windows Server 2008 R2 [только классические приложения] |
Целевая платформа | Windows |
Header | winbio.h (включая Winbio.h) |
Библиотека | Winbio.lib |
DLL | Winbio.dll |