Поделиться через


функция обратного вызова PIBIO_STORAGE_QUERY_BY_SUBJECT_FN (winbio_adapter.h)

Вызывается биометрической платформой Windows или адаптером подсистемы для поиска шаблонов, соответствующих указанному удостоверению и подфактору.

Синтаксис

PIBIO_STORAGE_QUERY_BY_SUBJECT_FN PibioStorageQueryBySubjectFn;

HRESULT PibioStorageQueryBySubjectFn(
  [in, out] PWINBIO_PIPELINE Pipeline,
  [in]      PWINBIO_IDENTITY Identity,
  [in]      WINBIO_BIOMETRIC_SUBTYPE SubFactor
)
{...}

Параметры

[in, out] Pipeline

Указатель на структуру WINBIO_PIPELINE , связанную с биометрической единицей, выполняющей операцию.

[in] Identity

Указатель на структуру WINBIO_IDENTITY , содержащую идентификатор GUID или идентификатор безопасности для расположения. Если поле Тип этой структуры содержит WINBIO_IDENTITY_TYPE_WILDCARD, запрос возвращает каждый шаблон, соответствующий параметру SubFactor .

[in] SubFactor

Значение WINBIO_BIOMETRIC_SUBTYPE , указывающее подфактор для расположения. Если это значение равно WINBIO_SUBTYPE_ANY, запрос возвращает все шаблоны, соответствующие параметру Identity .

Возвращаемое значение

Если функция выполняется успешно, она возвращает S_OK. Если функция завершается сбоем, она должна вернуть одно из следующих значений HRESULT , чтобы указать на ошибку.

Код возврата Описание
E_INVALIDARG
Аргумент, заданный параметром SubFactor , недопустим, или член структуры, указанной параметром Identity , недопустим.
E_POINTER
Обязательным аргументом указателя является NULL.
WINBIO_E_DATABASE_NO_RESULTS
Запрос выполнен успешно, но соответствующие записи найти не удалось.
WINBIO_E_DATABASE_LOCKED
База данных заблокирована.
WINBIO_E_DATABASE_READ_ERROR
Возникла неуказаная проблема.
WINBIO_E_INVALID_DEVICE_STATE
Элемент StorageContext объекта конвейера имеет значение NULL или недопустимый член FileHandle .

Комментарии

Если этот метод возвращает успешно, результирующий набор в конвейере заменяется результатами запроса, даже если запрос возвращает пустой набор.

Вызывающие элементы этой функции должны иметь возможность извлекать все записи, выполнив следующие действия:

  • Передача структуры WINBIO_IDENTITY в параметре Identity с полем Тип, для WINBIO_IDENTITY_TYPE_WILDCARD.
  • Передача WINBIO_SUBTYPE_ANY в параметре SubFactor .
После успешного вызова этой функции курсор результирующих наборов должен располагаться на первой записи в наборе.
Важно  

Не пытайтесь проверить значение, указанное для параметра SubFactor . Служба биометрических данных Windows проверит предоставленное значение перед его передачей в реализацию. Если значение равно WINBIO_SUBTYPE_NO_INFORMATION или WINBIO_SUBTYPE_ANY, проверьте, где это необходимо.

 

Примеры

В следующем псевдокоде показана одна из возможных реализаций этой функции. Пример не компилируется. Вы должны адаптировать его в соответствии с вашей целью.

/////////////////////////////////////////////////////////////////////////////////////////
//
// StorageAdapterQueryBySubject
//
// Purpose:
//      Locates templates that match a specified identity and sub-factor.
//
// Parameters:
//      Pipeline  -  Pointer to a WINBIO_PIPELINE structure associated with 
//                   the biometric unit performing the operation.
//      Identity  -  Pointer to a WINBIO_IDENTITY structure that contains the GUID 
//                   or SID to be located.
//      SubFactor -  A WINBIO_BIOMETRIC_SUBTYPE value that specifies the sub-factor 
//                   to be located.
//
static HRESULT
WINAPI
StorageAdapterQueryBySubject(
    __inout PWINBIO_PIPELINE Pipeline,
    __in PWINBIO_IDENTITY Identity,
    __in WINBIO_BIOMETRIC_SUBTYPE SubFactor
    )
{
    HRESULT hr = S_OK;
    SIZE_T recordCount = 0;

    // Verify that pointer arguments are not NULL.
    if (!ARGUMENT_PRESENT(Pipeline) ||
        !ARGUMENT_PRESENT(Identity))
    {
        hr = E_POINTER;
        goto cleanup;
    }

    // Retrieve the context from the pipeline.
    PWINBIO_STORAGE_CONTEXT storageContext = (PWINBIO_STORAGE_CONTEXT)Pipeline->StorageContext;

    // Verify the pipeline state.
    if (storageContext == NULL || storageContext->FileHandle == INVALID_HANDLE_VALUE)
    {
        hr =  WINBIO_E_INVALID_DEVICE_STATE;
        goto cleanup;
    }

    // Verify the Identity argument.
    if (Identity->Type != WINBIO_ID_TYPE_GUID &&
        Identity->Type != WINBIO_ID_TYPE_SID &&
        Identity->Type != WINBIO_ID_TYPE_WILDCARD)
    {
        hr = E_INVALIDARG;
        goto cleanup;
    }

    if (Identity->Type == WINBIO_ID_TYPE_WILDCARD &&
        Identity->Value.Wildcard != WINBIO_IDENTITY_WILDCARD)
    {
        hr = E_INVALIDARG;
        goto cleanup;
    }

    // WINBIO_SUBTYPE_ANY is a valid sub-factor.
    // WINBIO_SUBTYPE_NO_INFORMATION is not a valid sub-factor.
    if (SubFactor == WINBIO_SUBTYPE_NO_INFORMATION)
    {
        hr = E_INVALIDARG;
        goto cleanup;
    }

    // Call a custom function (_FindAllMatchingRecords) that compares the 
    // identity and sub-factor values from the caller to the identity and
    // sub-factor values of every record in the database and adds the matching
    // database records to the result set in the pipeline.
    hr = _FindAllMatchingRecords( 
            Pipeline,
            Identity,
            SubFactor,
            &recordCount
            );
    if (FAILED(hr))
    {
        goto cleanup;
    }
    if (recordCount == 0)
    {
        hr = WINBIO_E_DATABASE_NO_RESULTS;
        goto cleanup;
    }

cleanup:

    return hr;
}

Требования

Требование Значение
Минимальная версия клиента Windows 7 [только классические приложения]
Минимальная версия сервера Windows Server 2008 R2 [только классические приложения]
Целевая платформа Windows
Header winbio_adapter.h (включая Winbio_adapter.h)

См. также раздел

Функции подключаемых модулей

StorageAdapterFirstRecord

StorageAdapterGetCurrentRecord

StorageAdapterGetRecordCount

StorageAdapterNextRecord

StorageAdapterQueryByContent