次の方法で共有


WinBioLogonIdentifiedUser 関数 (winbio.h)

WinBioLogonIdentifiedUser 関数を使用すると、生体認証セッションによって最後に正常に実行された識別操作に関連付けられているアカウントにユーザーが高速に切り替わります。

構文

HRESULT WinBioLogonIdentifiedUser(
  [in] WINBIO_SESSION_HANDLE SessionHandle
);

パラメーター

[in] SessionHandle

最近 正常な識別 操作を実行した生体認証セッションを識別するWINBIO_SESSION_HANDLE値。 WinBioOpenSession を呼び出してセッション ハンドルを開きます。

戻り値

関数が成功した場合は、S_OK を返します。 関数が失敗した場合は、エラーを示す HRESULT 値を返します。 有効な値を次の表に示しますが、これ以外にもあります。 一般的なエラー コードの一覧については、「 共通 HRESULT 値」を参照してください。

リターン コード 説明
E_ACCESSDENIED
呼び出し元がユーザーを切り替えるアクセス許可を持っていないか、生体認証セッションが最新ではありません。
E_HANDLE
セッション ハンドルが無効です。
S_FALSE
SessionHandle パラメーターで識別されるユーザーは、現在のユーザーと同じです。
SEC_E_LOGON_DENIED
ユーザーにログオンできませんでした。
WINBIO_E_CRED_PROV_DISABLED
現在の管理ポリシーでは、資格情報プロバイダーの使用が禁止されています。
WINBIO_E_FAST_USER_SWITCH_DISABLED
高速ユーザー切り替えが有効になっていません。
WINBIO_E_SAS_ENABLED
セキュリティで保護されたログオン (Ctrl + Alt + DELETE) が現在有効になっているため、高速なユーザー切り替えを実行できません。

解説

WinBioLogonIdentifiedUser 関数は、通常、現在ログオンしているユーザー以外のユーザーを識別するときに、高速なユーザー切り替えをサポートするアプリケーションによって呼び出されます。

高速ユーザー 切り替えの試行では、ログオン イベントをセキュリティ ログに残すことができますが、資格情報マネージャーが終了したときに ID は自動的に格納されません。

SessionHandle パラメーターで指定された生体認証セッションは、高速ユーザー 切り替えイベントのターゲット アカウントを制御します。 そのハンドルを最近使用して識別操作を実行した場合、結果の ID は高速ユーザー 切り替え後にログインされます。

セキュリティ上の理由から、Windows 生体認証フレームワークでは、識別操作と WinBioLogonIdentifiedUser の呼び出しが短時間で行われる必要があります。 その期間が経過すると、ID は古いと見なされ、 WinBioLogonIdentifiedUser の呼び出しは失敗します。 既定のタイムアウト間隔は 5 秒ですが、管理者は 60 秒の大きさにすることができます。

ターゲット ユーザーが現在のユーザーが S_FALSE を返すのと同じで、高速ユーザー 切り替えの試行が無視された場合に、この関数を呼び出します。

次の関数は、WinBioLogonIdentifiedUser を呼び出して、以前に識別されたユーザーにログオンします。 この関数を正しく機能させるには、セキュリティで保護されたログオンを有効にしないでください。 Winbio.lib 静的ライブラリにリンクし、次のヘッダー ファイルを含めます。

  • 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;
}


要件

   
サポートされている最小のクライアント Windows 7 [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2008 R2 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー winbio.h (Winbio.h を含む)
Library Winbio.lib
[DLL] Winbio.dll

関連項目

WinBioIdentify

WinBioIdentifyWithCallback