Função WinBioLogonIdentifiedUser (winbio.h)

A função WinBioLogonIdentifiedUser faz com que um usuário mude rapidamente para a conta associada à última operação de identificação bem-sucedida executada pela sessão biométrica.

Sintaxe

HRESULT WinBioLogonIdentifiedUser(
  [in] WINBIO_SESSION_HANDLE SessionHandle
);

Parâmetros

[in] SessionHandle

Um valor WINBIO_SESSION_HANDLE que identifica a sessão biométrica que realizou recentemente uma operação de identificação bem-sucedida. Abra o identificador de sessão chamando WinBioOpenSession.

Valor retornado

Se a função for bem-sucedida, ela retornará S_OK. Se a função falhar, ela retornará um valor HRESULT que indica o erro. Os possíveis valores incluem, mas sem limitação, aqueles na tabela a seguir. Para obter uma lista de códigos de erro comuns, consulte Valores HRESULT comuns.

Código de retorno Descrição
E_ACCESSDENIED
O chamador não tem permissão para alternar usuários ou a sessão biométrica está desatualizada.
E_HANDLE
O identificador de sessão não é válido.
S_FALSE
O usuário identificado pelo parâmetro SessionHandle é o mesmo que o usuário atual.
SEC_E_LOGON_DENIED
O usuário não pôde ser conectado.
WINBIO_E_CRED_PROV_DISABLED
A política administrativa atual proíbe o uso do provedor de credenciais.
WINBIO_E_FAST_USER_SWITCH_DISABLED
A troca rápida de usuários não está habilitada.
WINBIO_E_SAS_ENABLED
Não é possível executar a alternância rápida de usuário porque o logon seguro (CTRL+ALT+DELETE) está habilitado no momento.

Comentários

A função WinBioLogonIdentifiedUser normalmente é chamada por aplicativos que dão suporte à troca rápida de usuários quando identificam um usuário diferente daquele que está conectado no momento.

A tentativa rápida de alternância de usuário pode deixar um evento de logon no log de segurança, mas a identidade não é armazenada automaticamente quando o gerenciador de credenciais é encerrado.

A sessão biométrica especificada pelo parâmetro SessionHandle controla a conta de destino para o evento de comutador de usuário rápido. Se esse identificador tiver sido usado recentemente para executar uma operação de identificação, a identidade resultante será conectada após a opção rápida do usuário.

Por motivos de segurança, a Estrutura Biométrica do Windows exige que a operação de identificação e a chamada para WinBioLogonIdentifiedUser ocorram em um curto período de tempo. Após esse período, a identificação é considerada desatualizada e a chamada para WinBioLogonIdentifiedUser falhará. O intervalo de tempo limite padrão é de cinco segundos, mas um administrador pode torná-lo tão grande quanto 60 segundos.

Chamar essa função quando o usuário de destino é o mesmo que o usuário atual retorna S_FALSE e a tentativa rápida de alternância de usuário é ignorada.

Exemplos

A função a seguir chama WinBioLogonIdentifiedUser para fazer logon em um usuário identificado anteriormente. Para que essa função funcione corretamente, o logon seguro não deve ser habilitado. Link para a biblioteca estática Winbio.lib e inclua os seguintes arquivos de cabeçalho:

  • Windows.h
  • Stdio.h
  • Conio.h
  • Winbio.h
HRESULT LogonIdentifiedUser()
{
    // Declare variables.
    HRESULT hr;
    WINBIO_SESSION_HANDLE sessionHandle = NULL;
    WINBIO_UNIT_ID  UnitId;
    WINBIO_IDENTITY Identity;
    WINBIO_BIOMETRIC_SUBTYPE SubFactor;
    WINBIO_REJECT_DETAIL RejectDetail;
    BOOL    bContinue = 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
            WINBIO_DB_DEFAULT,                       // Database ID
            &sessionHandle              // [out] Session handle
            );
    if (FAILED(hr))
    {
        wprintf_s(L"\n WinBioOpenSession failed. hr = 0x%x\n", hr);
        goto e_Exit;
    }

    // Locate the biometric sensor and retrieve a WINBIO_IDENTITY object.
    // You must swipe your finger on the sensor.
    wprintf_s(L"\n Calling WinBioIdentify - Swipe finger on sensor...\n");
    while(bContinue)
    {
        hr = WinBioIdentify(
                sessionHandle,          // Session handle    
                &UnitId,                // Biometric unit ID
                &Identity,              // User SID or GUID
                &SubFactor,             // Finger sub factor
                &RejectDetail           // rejection information
                );

        switch(hr)
        {
        case S_OK:
            bContinue = FALSE;
            break;
        default:
            wprintf_s(L"\n WinBioIdentify failed. hr = 0x%x\n", hr);
            break;
        }
    }

    if (SUCCEEDED(hr))
    {
        // Switch to the target after receiving a good identity.
        hr = WinBioLogonIdentifiedUser(sessionHandle);

        switch(hr)
        {
        case S_FALSE:
            printf("\n Target is the logged on user. No action taken.\n");
            break;
        case S_OK:
            printf("\n Fast user switch initiated.\n");
            break;
        default:
            wprintf_s(L"\n WinBioLogonIdentifiedUser failed. hr = 0x%x\n", hr);
            break;
        }
    }

e_Exit:

    if (sessionHandle != NULL)
    {
        WinBioCloseSession(sessionHandle);
        sessionHandle = NULL;
    }

    wprintf_s(L"\n Press any key to exit...");
    _getch();

    return hr;
}


Requisitos

   
Cliente mínimo com suporte Windows 7 [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2008 R2 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho winbio.h (inclua Winbio.h)
Biblioteca Winbio.lib
DLL Winbio.dll

Confira também

WinBioIdentify

WinBioIdentifyWithCallback