WinBioGetCredentialState 函式 (winbio.h)
擷取值,指定是否已為指定的使用者設定認證。 從 Windows 10 組建 1607 開始,此函式可用來搭配行動映射使用。
語法
HRESULT WinBioGetCredentialState(
[in] WINBIO_IDENTITY Identity,
[in] WINBIO_CREDENTIAL_TYPE Type,
[out] WINBIO_CREDENTIAL_STATE *CredentialState
);
參數
[in] Identity
WINBIO_IDENTITY 結構,其中包含要查詢認證之用戶帳戶的 SID。
[in] Type
指定認證類型的 WINBIO_CREDENTIAL_TYPE 值。 這個值可以是下列其中一個值:
值 | 意義 |
---|---|
|
已檢查密碼型認證。 |
[out] CredentialState
WINBIO_CREDENTIAL_STATE列舉值的指標,指定是否已設定用戶認證。 這個值可以是下列其中一個值:
值 | 意義 |
---|---|
|
尚未指定認證。 |
|
已指定認證。 |
傳回值
如果函式成功,它會傳回S_OK。 如果函式失敗,它會傳回 HRESULT 值,指出錯誤。 可能的值包括 (但不限於) 下表中的這些值。 如需常見錯誤碼的清單,請參閱 一般 HRESULT 值。
傳回碼 | Description |
---|---|
|
呼叫端沒有擷取認證狀態的許可權。 |
|
指定的身分識別不存在。 |
|
目前的系統管理原則禁止使用認證提供者。 |
備註
WinBioGetCredentialState 通常用來提供使用者介面中認證狀態的意見反應。 例如,註冊應用程式可能會在提示使用者輸入認證之前查詢認證狀態。
呼叫 WinBioSetCredential 函式,以將認證與用戶產生關聯。
沒有提高許可權的使用者只能擷取自己的認證相關信息。 提高許可權的使用者可以擷取任何認證的資訊。
範例
下列函式會呼叫 WinBioGetCredentialState 來擷取使用者的認證狀態。 連結到Winbio.lib 靜態庫,並包含下列頭檔:
- 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;
}
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 7 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2008 R2 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | winbio.h (包含Winbio.h) |
程式庫 | Winbio.lib |
Dll | Winbio.dll |