Funzione WinBioGetCredentialState (winbio.h)
Recupera un valore che specifica se le credenziali sono state impostate per l'utente specificato. A partire da Windows 10, build 1607, questa funzione è disponibile per l'uso con un'immagine per dispositivi mobili.
Sintassi
HRESULT WinBioGetCredentialState(
[in] WINBIO_IDENTITY Identity,
[in] WINBIO_CREDENTIAL_TYPE Type,
[out] WINBIO_CREDENTIAL_STATE *CredentialState
);
Parametri
[in] Identity
Struttura WINBIO_IDENTITY che contiene il SID dell'account utente su cui viene eseguita la query sulle credenziali.
[in] Type
Valore WINBIO_CREDENTIAL_TYPE che specifica il tipo di credenziale. I valori possibili sono i seguenti:
Valore | Significato |
---|---|
|
Viene verificata la credenziale basata su password. |
[out] CredentialState
Puntatore a un valore di enumerazione WINBIO_CREDENTIAL_STATE che specifica se sono state impostate le credenziali utente. I valori possibili sono i seguenti:
Valore | Significato |
---|---|
|
Non è stata specificata alcuna credenziale. |
|
È stata specificata una credenziale. |
Valore restituito
Se la funzione ha esito positivo, restituisce S_OK. Se la funzione ha esito negativo, restituisce un valore HRESULT che indica l'errore. I valori possibili includono, ma non sono limitati a, quelli indicati nella tabella seguente. Per un elenco dei codici di errore comuni, vedere Valori HRESULT comuni.
Codice restituito | Descrizione |
---|---|
|
Il chiamante non dispone dell'autorizzazione per recuperare lo stato delle credenziali. |
|
L'identità specificata non esiste. |
|
I criteri amministrativi correnti impediscono l'uso del provider di credenziali. |
Commenti
WinBioGetCredentialState viene in genere usato per fornire commenti e suggerimenti sullo stato delle credenziali in un'interfaccia utente. Ad esempio, un'applicazione di registrazione potrebbe eseguire query sullo stato delle credenziali prima di richiedere credenziali a un utente.
Chiamare la funzione WinBioSetCredential per associare le credenziali a un utente.
Gli utenti che non dispongono di privilegi elevati possono recuperare informazioni solo sulle proprie credenziali. Gli utenti con privilegi elevati possono recuperare informazioni per qualsiasi credenziale.
Esempio
La funzione seguente chiama WinBioGetCredentialState per recuperare lo stato delle credenziali per un utente. Collegarsi alla libreria statica Winbio.lib e includere i file di intestazione seguenti:
- Windows.h
- Stdio.h
- Conio.h
- Winbio.h
HRESULT GetCredentialState()
{
// Declare variables.
HRESULT hr = S_OK;
WINBIO_IDENTITY identity;
WINBIO_CREDENTIAL_STATE credState;
// Find the identity of the user.
wprintf_s(L"\n Finding user identity.\n");
hr = GetCurrentUserIdentity( &identity );
if (FAILED(hr))
{
wprintf_s(L"\n User identity not found. hr = 0x%x\n", hr);
return hr;
}
// Find the credential state for the user.
wprintf_s(L"\n Calling WinBioGetCredentialState.\n");
hr = WinBioGetCredentialState(
identity, // User GUID or SID
WINBIO_CREDENTIAL_PASSWORD, // Credential type
&credState // [out] Credential state
);
if (FAILED(hr))
{
wprintf_s(L"\n WinBioGetCredentialState failed. hr = 0x%x\n", hr);
goto e_Exit;
}
// Print the credential state.
switch(credState)
{
case WINBIO_CREDENTIAL_SET:
wprintf_s(L"\n Credential set.\n");
break;
case WINBIO_CREDENTIAL_NOT_SET:
wprintf_s(L"\n Credential NOT set.\n");
break;
default:
wprintf_s(L"\n ERROR: Invalid credential state.\n");
hr = E_FAIL;
}
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;
}
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows 7 [solo app desktop] |
Server minimo supportato | Windows Server 2008 R2 [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | winbio.h (include Winbio.h) |
Libreria | Winbio.lib |
DLL | Winbio.dll |