Функция WinBioCaptureSample (winbio.h)
Захватывает биометрическую выборку и заполняет биометрическую информационную запись (BIR) необработанными или обработанными данными.
Синтаксис
HRESULT WinBioCaptureSample(
[in] WINBIO_SESSION_HANDLE SessionHandle,
[in] WINBIO_BIR_PURPOSE Purpose,
[in] WINBIO_BIR_DATA_FLAGS Flags,
[out, optional] WINBIO_UNIT_ID *UnitId,
PWINBIO_BIR *Sample,
[out, optional] SIZE_T *SampleSize,
[out, optional] WINBIO_REJECT_DETAIL *RejectDetail
);
Параметры
[in] SessionHandle
Значение WINBIO_SESSION_HANDLE , определяющее открытый биометрический сеанс. Откройте синхронный дескриптор сеанса, вызвав WinBioOpenSession. Откройте асинхронный дескриптор сеанса, вызвав WinBioAsyncOpenSession.
[in] Purpose
Битовая маска WINBIO_BIR_PURPOSE, указывающая предполагаемое использование образца. Это может быть побитовое ИЛИ следующих значений:
- WINBIO_PURPOSE_VERIFY
- WINBIO_PURPOSE_IDENTIFY
- WINBIO_PURPOSE_ENROLL
- WINBIO_PURPOSE_ENROLL_FOR_VERIFICATION
- WINBIO_PURPOSE_ENROLL_FOR_IDENTIFICATION
[in] Flags
Значение типа , указывающее тип обработки, применяемой к захваченной выборке. Это может быть побитовое ИЛИ следующих флагов уровня безопасности и обработки:
- WINBIO_DATA_FLAG_PRIVACY
Зашифруйте пример.
- WINBIO_DATA_FLAG_INTEGRITY
Подпишите пример или защитите его с помощью кода проверки подлинности сообщения (MAC)
- WINBIO_DATA_FLAG_SIGNED
Если этот флаг и флаг WINBIO_DATA_FLAG_INTEGRITY установлены, подпишите пример. Если этот флаг не задан, но установлен флаг WINBIO_DATA_FLAG_INTEGRITY, вычислить MAC-файл.
- WINBIO_DATA_FLAG_RAW
Возвращает образец точно так, как он был захвачен датчиком.
- WINBIO_DATA_FLAG_INTERMEDIATE
Верните образец после его очистки и фильтрации.
- WINBIO_DATA_FLAG_PROCESSED
Верните образец после того, как он будет готов к использованию для целей, указанных параметром Purpose.
[out, optional] UnitId
Указатель на WINBIO_UNIT_ID значение, содержащее идентификатор биометрической единицы, создающей образец.
Sample
Адрес переменной, получающей указатель на WINBIO_BIR структуру, содержащую образец. После завершения использования структуры необходимо передать указатель на WinBioFree , чтобы освободить память, выделенную для примера.
[out, optional] SampleSize
Указатель на SIZE_T значение, содержащее размер в байтах структуры WINBIO_BIR , возвращаемой в параметре Sample .
[out, optional] RejectDetail
Указатель на значение 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
Возвращаемое значение
Если функция завершается успешно, она возвращает S_OK. Если функция завершается сбоем, она возвращает значение HRESULT , указывающее на ошибку. Допустимые значения включают, но не ограничиваются, значения, приведенные в следующей таблице. Список распространенных кодов ошибок см. в разделе Общие значения HRESULT.
Код возврата | Описание |
---|---|
|
Вызывающий объект не имеет разрешения на запись необработанных выборок или сеанс не был открыт с помощью флага WINBIO_FLAG_RAW . |
|
Недопустимый дескриптор сеанса. |
|
Биометрический блок не поддерживает запрошенную операцию. |
|
Указатели UnitId, Sample, SampleSize и RejectDetail не могут иметь значение NULL. |
|
Не удалось завершить операцию, так как биометрическая единица в настоящее время используется для транзакции регистрации (только системный пул). |
|
Не удалось завершить операцию, так как в пуле датчиков присутствует защищенный датчик. |
Комментарии
Чтобы успешно вызвать эту функцию, необходимо открыть дескриптор сеанса, указав WINBIO_FLAG_RAW в параметре Flags функций WinBioOpenSession или WinBioAsyncOpenSession . В настоящее время только приложения, работающие под учетными записями "Администраторы" и "Локальная система", имеют необходимые привилегии.
Допустимые сочетания параметров Назначение и Флаги зависят от возможностей используемой биометрической единицы. Обратитесь к документации по датчику поставщика, чтобы определить, какие сочетания допустимых значений назначения и флагов поддерживаются и как они влияют на захваченные данные. После завершения использования примера приложение должно вызвать WinBioFree , чтобы освободить память, выделенную для него функцией WinBioCaptureSample .
Чтобы использовать WinBioCaptureSample синхронно, вызовите функцию с дескриптором сеанса, созданным путем вызова WinBioOpenSession. Функция блокируется до тех пор, пока не будет записан пример или не возникнет ошибка. Вызовы WinBioCaptureSample с использованием системного пула будут блокироваться, пока вызывающее приложение не получит фокус окна и пользователь не предоставит пример одному из датчиков в пуле. Если датчик, выбранный пользователем, уже используется для транзакции регистрации, функция завершается сбоем и возвращает WINBIO_E_ENROLLMENT_IN_PROGRESS.
Чтобы использовать WinBioCaptureSample асинхронно, вызовите функцию с дескриптором сеанса, созданным путем вызова WinBioAsyncOpenSession. Платформа выделяет структуру WINBIO_ASYNC_RESULT и использует ее для возврата сведений об успешном или неудачном выполнении операции. Если операция записи выполнена успешно, платформа возвращает сведения о образце во вложенной структуре CaptureSample . Если операция не выполнена, платформа возвращает сведения об ошибке. Структура 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: Эту операцию можно выполнить асинхронно с помощью функции WinBioCaptureSampleWithCallback . Функция проверяет входные аргументы и возвращает немедленно. Если входные аргументы недопустимы, функция возвращает код ошибки. В противном случае платформа запускает операцию в другом потоке. Когда асинхронная операция завершается или возникает ошибка, платформа отправляет результаты в функцию PWINBIO_CAPTURE_CALLBACK , реализованную приложением.
Примеры
Следующая функция вызывает WinBioCaptureSample для получения биометрической выборки от пользователя. Ссылка на статическую библиотеку Winbio.lib и включение следующих файлов заголовков:
- Windows.h
- Stdio.h
- Conio.h
- Winbio.h
HRESULT CaptureSample()
{
HRESULT hr = S_OK;
WINBIO_SESSION_HANDLE sessionHandle = NULL;
WINBIO_UNIT_ID unitId = 0;
WINBIO_REJECT_DETAIL rejectDetail = 0;
PWINBIO_BIR sample = NULL;
SIZE_T sampleSize = 0;
// Connect to the system pool.
hr = WinBioOpenSession(
WINBIO_TYPE_FINGERPRINT, // Service provider
WINBIO_POOL_SYSTEM, // Pool type
WINBIO_FLAG_RAW, // Access: Capture raw data
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.
wprintf_s(L"\n Calling WinBioCaptureSample - Swipe sensor...\n");
hr = WinBioCaptureSample(
sessionHandle,
WINBIO_NO_PURPOSE_AVAILABLE,
WINBIO_DATA_FLAG_RAW,
&unitId,
&sample,
&sampleSize,
&rejectDetail
);
if (FAILED(hr))
{
if (hr == WINBIO_E_BAD_CAPTURE)
{
wprintf_s(L"\n Bad capture; reason: %d\n", rejectDetail);
}
else
{
wprintf_s(L"\n WinBioCaptureSample failed. hr = 0x%x\n", hr);
}
goto e_Exit;
}
wprintf_s(L"\n Swipe processed - Unit ID: %d\n", unitId);
wprintf_s(L"\n Captured %d bytes.\n", sampleSize);
e_Exit:
if (sample != NULL)
{
WinBioFree(sample);
sample = NULL;
}
if (sessionHandle != NULL)
{
WinBioCloseSession(sessionHandle);
sessionHandle = NULL;
}
wprintf_s(L"\n Press any key to exit...");
_getch();
return hr;
}
Требования
Минимальная версия клиента | Windows 7 [только классические приложения] |
Минимальная версия сервера | Windows Server 2008 R2 [только классические приложения] |
Целевая платформа | Windows |
Header | winbio.h (включая Winbio.h) |
Библиотека | Winbio.lib |
DLL | Winbio.dll |