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 |
---|---|
|
O chamador não tem permissão para alternar usuários ou a sessão biométrica está desatualizada. |
|
O identificador de sessão não é válido. |
|
O usuário identificado pelo parâmetro SessionHandle é o mesmo que o usuário atual. |
|
O usuário não pôde ser conectado. |
|
A política administrativa atual proíbe o uso do provedor de credenciais. |
|
A troca rápida de usuários não está habilitada. |
|
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 |