eyesmart
驱动牛犊
驱动牛犊
  • 注册日期2007-04-01
  • 最后登录2009-06-29
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1034回复:0

Smart Card Logon 不知道发在这里是否合适

楼主#
更多 发布于:2007-09-27 11:25
在GINA的函数中,提供了对Smart Card的接口,如有些参数可以是WLX_SAS_TYPE_SC_INSERT和WLX_SAS_TYPE_SC_REMOVE,但是我发现这些选项只是个摆设,不像Ctrl + Alt + Del动作,windows是不会检测智能卡动作的发生,必须由自己来检测这些事件的发生,然后调用WlxSasNotify,不知我的看法是否正确。最后我在GINA中创建了一个线程,这个线程负责检测智能卡事件的发生,如果发生了感兴趣的事件,就调用WlxSasNotify来触发相应的响应函数。

    我碰到了一个问题,理论上用了WlxSasNotify函数后,系统会从Default desktop切换到winlogon desktop,处理完了响应函数后,系统会切换回来。但是我的系统有时会无法从winlogon desktop切换到Default desktop,一直挂在winlogon desktop上,这种情况与我的创建线程有关系吗?我的线程什么都没做啊,就是在GetMessage,然后发现消息后就调用WlxSasNotify。

其中的一个函数退出后系统就可能会挂在winlogon desktop上,有很少时候才表现正常

int WINAPI WlxLoggedOnSAS(
    PVOID           pWlxContext,
    DWORD           dwSasType,
    PVOID           pReserved)
{
    BOOL    bExist;
    int     iRet = WLX_SAS_ACTION_NONE;
    
    if(dwSasType == WLX_SAS_TYPE_SC_REMOVE)
    {
        bExist = DeviceExist((LPGUID)&GUID_CLASS_JANUS_LOCK);
        if(!bExist)            
                                                  iRet = WLX_SAS_ACTION_LOCK_WKSTA;
                     }
    else
        iRet = MSWlxLoggedOnSAS( pWlxContext, dwSasType, pReserved );

                     return iRet;
}
游客

返回顶部