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 函数通常由支持快速用户切换的应用程序调用,这些应用程序标识当前登录的用户以外的用户。

快速用户切换尝试可能会将登录事件保留在安全日志中,但凭据管理器终止时不会自动存储标识。

SessionHandle 参数指定的生物识别会话控制快速用户切换事件的目标帐户。 如果该句柄最近已用于执行标识操作,则生成的标识将在快速用户切换后登录。

出于安全原因,Windows 生物识别框架要求标识操作和对 WinBioLogonIdentifiedUser 的 调用在短时间内进行。 在该时间段后,标识被视为过期,对 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