Función WinBioRemoveCredential (winbio.h)
Elimina una credencial de inicio de sesión biométrico para un usuario especificado. A partir de Windows 10, compilación 1607, esta función está disponible para su uso con una imagen móvil.
Sintaxis
HRESULT WinBioRemoveCredential(
[in] WINBIO_IDENTITY Identity,
[in] WINBIO_CREDENTIAL_TYPE Type
);
Parámetros
[in] Identity
Estructura WINBIO_IDENTITY que contiene el SID de la cuenta de usuario para la que se quitará la credencial de inicio de sesión.
[in] Type
Valor de WINBIO_CREDENTIAL_TYPE que especifica el tipo de credencial. Puede ser uno de los siguientes valores:
Valor | Significado |
---|---|
|
Se eliminará la credencial basada en contraseña. |
|
Se eliminarán todas las credenciales de inicio de sesión del usuario. |
Valor devuelto
Si la función se ejecuta 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 eliminar la credencial. |
|
La identidad especificada no existe o no tiene ningún registro relacionado en el almacén de credenciales. |
Comentarios
Los usuarios que no tienen privilegios elevados solo pueden eliminar sus propias credenciales. Los usuarios elevados pueden quitar las credenciales de cualquier cuenta de usuario. La eliminación de una credencial no afecta a ninguna inscripción biométrica para ese usuario. La eliminación de una credencial biométrica no impide que el usuario inicie sesión con una contraseña. Solo los procesos de integridad medio y superior pueden eliminar credenciales. Si un proceso de integridad inferior intenta eliminar credenciales, la función devuelve E_ACCESSDENIED.
Ejemplos
La siguiente función muestra cómo llamar a WinBioRemoveCredential para quitar las credenciales de un usuario específico. También se incluye la función auxiliar GetCurrentUserIdentity. Vincule a la biblioteca estática Winbio.lib e incluya los siguientes archivos de encabezado:
- Windows.h
- Stdio.h
- Conio.h
- Winbio.h
HRESULT RemoveCredential()
{
HRESULT hr = S_OK;
WINBIO_IDENTITY identity;
// Find the identity of the user.
wprintf_s(L"\n Finding user identity.\n");
hr = GetCurrentUserIdentity( &identity );
if (FAILED(hr))
{
wprintf(L"\n User identity not found. hr = 0x%x\n", hr);
goto e_Exit;
}
// Remove the user credentials.
hr = WinBioRemoveCredential(identity, WINBIO_CREDENTIAL_PASSWORD);
if (FAILED(hr))
{
wprintf(L"\n WinBioRemoveCredential failed. hr = 0x%x\n", hr);
goto e_Exit;
}
wprintf_s(L"\n User credentials successfully removed.\n");
e_Exit:
wprintf_s(L"\n Press any key to exit...");
_getch();
return hr;
}
//------------------------------------------------------------------------
// The following function retrieves the identity of the current user.
// This is a helper function and is not part of the Windows Biometric
// Framework API.
//
HRESULT GetCurrentUserIdentity(__inout PWINBIO_IDENTITY Identity)
{
// Declare variables.
HRESULT hr = S_OK;
HANDLE tokenHandle = NULL;
DWORD bytesReturned = 0;
struct{
TOKEN_USER tokenUser;
BYTE buffer[SECURITY_MAX_SID_SIZE];
} tokenInfoBuffer;
// Zero the input identity and specify the type.
ZeroMemory( Identity, sizeof(WINBIO_IDENTITY));
Identity->Type = WINBIO_ID_TYPE_NULL;
// Open the access token associated with the
// current process
if (!OpenProcessToken(
GetCurrentProcess(), // Process handle
TOKEN_READ, // Read access only
&tokenHandle)) // Access token handle
{
DWORD win32Status = GetLastError();
wprintf_s(L"Cannot open token handle: %d\n", win32Status);
hr = HRESULT_FROM_WIN32(win32Status);
goto e_Exit;
}
// Zero the tokenInfoBuffer structure.
ZeroMemory(&tokenInfoBuffer, sizeof(tokenInfoBuffer));
// Retrieve information about the access token. In this case,
// retrieve a SID.
if (!GetTokenInformation(
tokenHandle, // Access token handle
TokenUser, // User for the token
&tokenInfoBuffer.tokenUser, // Buffer to fill
sizeof(tokenInfoBuffer), // Size of the buffer
&bytesReturned)) // Size needed
{
DWORD win32Status = GetLastError();
wprintf_s(L"Cannot query token information: %d\n", win32Status);
hr = HRESULT_FROM_WIN32(win32Status);
goto e_Exit;
}
// Copy the SID from the tokenInfoBuffer structure to the
// WINBIO_IDENTITY structure.
CopySid(
SECURITY_MAX_SID_SIZE,
Identity->Value.AccountSid.Data,
tokenInfoBuffer.tokenUser.User.Sid
);
// Specify the size of the SID and assign WINBIO_ID_TYPE_SID
// to the type member of the WINBIO_IDENTITY structure.
Identity->Value.AccountSid.Size = GetLengthSid(tokenInfoBuffer.tokenUser.User.Sid);
Identity->Type = WINBIO_ID_TYPE_SID;
e_Exit:
if (tokenHandle != NULL)
{
CloseHandle(tokenHandle);
}
return hr;
}
Requisitos
Requisito | Value |
---|---|
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 (incluya Winbio.h) |
Library | Winbio.lib |
Archivo DLL | Winbio.dll |