Función WinBioLogonIdentifiedUser (winbio.h)
La función WinBioLogon IdentificationUser hace que un usuario rápido cambie a la cuenta asociada a la última operación de identificación correcta realizada por la sesión biométrica.
HRESULT WinBioLogonIdentifiedUser(
[in] WINBIO_SESSION_HANDLE SessionHandle
);
[in] SessionHandle
Valor de WINBIO_SESSION_HANDLE que identifica la sesión biométrica que ha realizado recientemente una operación de identificación correcta. Abra el identificador de sesión mediante una llamada a WinBioOpenSession.
Si la función se realiza correctamente, devuelve S_OK. Si se produce un error en la función, devuelve un valor HRESULT que indica el error. Entre los valores posibles se incluyen los que se indican en la tabla siguiente, entre otros. Para obtener una lista de códigos de error comunes, consulte Valores HRESULT comunes.
Código devuelto | Descripción |
---|---|
|
El autor de la llamada no tiene permiso para cambiar de usuario o la sesión biométrica no está actualizada. |
|
El identificador de sesión no es válido. |
|
El usuario identificado por el parámetro SessionHandle es el mismo que el usuario actual. |
|
No se pudo iniciar sesión el usuario. |
|
La directiva administrativa actual prohíbe el uso del proveedor de credenciales. |
|
El cambio rápido de usuario no está habilitado. |
|
No se puede realizar un cambio rápido de usuario porque el inicio de sesión seguro (CTRL+ALT+DELETE) está habilitado actualmente. |
Normalmente, las aplicaciones que admiten el cambio rápido de usuario llaman a la función WinBioLogonIdentifiedUser cuando identifican a un usuario distinto del que ha iniciado sesión actualmente.
El intento de cambio de usuario rápido puede dejar un evento de inicio de sesión en el registro de seguridad, pero la identidad no se almacena automáticamente cuando finaliza el administrador de credenciales.
La sesión biométrica especificada por el parámetro SessionHandle controla la cuenta de destino para el evento de cambio de usuario rápido. Si ese identificador se ha usado recientemente para realizar una operación de identificación, la identidad resultante se registrará después del cambio de usuario rápido.
Por motivos de seguridad, Windows Biometric Framework requiere que la operación de identificación y la llamada a WinBioLogon IdentificationUser se produzcan en un breve período de tiempo. Después de ese período, la identificación se considera obsoleta y se producirá un error en la llamada a WinBioLogon IdentificationUser . El intervalo de tiempo de espera predeterminado es de cinco segundos, pero un administrador puede hacerlo tan grande como 60 segundos.
Llamar a esta función cuando el usuario de destino es el mismo que el usuario actual devuelve S_FALSE y se omite el intento de cambio de usuario rápido.
La siguiente función llama a WinBioLogon IdentifiedUser para iniciar sesión en un usuario identificado previamente. Para que esta función funcione correctamente, no se debe habilitar el inicio de sesión seguro. Vincule a la biblioteca estática Winbio.lib e incluya los siguientes archivos de encabezado:
- 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;
}
Cliente mínimo compatible | Windows 7 [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2008 R2 [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | winbio.h (incluye Winbio.h) |
Library | Winbio.lib |
Archivo DLL | Winbio.dll |