WinBioGetCredentialState 関数 (winbio.h)
指定したユーザーに対して資格情報が設定されているかどうかを示す値を取得します。 Windows 10 ビルド 1607 以降では、この関数をモバイル イメージで使用できます。
構文
HRESULT WinBioGetCredentialState(
[in] WINBIO_IDENTITY Identity,
[in] WINBIO_CREDENTIAL_TYPE Type,
[out] WINBIO_CREDENTIAL_STATE *CredentialState
);
パラメーター
[in] Identity
資格情報のクエリ対象のユーザー アカウントの SID を含む WINBIO_IDENTITY 構造体。
[in] Type
資格情報の種類を指定する WINBIO_CREDENTIAL_TYPE 値。 次のいずれかの値を指定できます。
値 | 意味 |
---|---|
|
パスワードベースの資格情報がチェックされます。 |
[out] CredentialState
ユーザー資格情報が設定されているかどうかを指定する WINBIO_CREDENTIAL_STATE 列挙値へのポインター。 次のいずれかの値を指定できます。
値 | 意味 |
---|---|
|
資格情報が指定されていません。 |
|
資格情報が指定されています。 |
戻り値
関数が成功した場合は、S_OK を返します。 関数が失敗した場合は、エラーを示す HRESULT 値を返します。 有効な値を次の表に示しますが、これ以外にもあります。 一般的なエラー コードの一覧については、「 共通の HRESULT 値」を参照してください。
リターン コード | 説明 |
---|---|
|
呼び出し元には、資格情報の状態を取得するアクセス許可がありません。 |
|
指定された ID が存在しません。 |
|
現在の管理ポリシーでは、資格情報プロバイダーの使用は禁止されています。 |
注釈
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 を含む) |
Library | Winbio.lib |
[DLL] | Winbio.dll |