在文章《WlxLoggedOutSAS的实现方法》中提到保留msgina.dll里的WlxLoggedOutSAS,但用自己的LSA验证的方法。
这里遇到新的情况。
一、情况描述
1、设计为:
第一次登录时就采用自定义的LSA验证,如果用户本地输入,那么WlxLoggedOutSAS结束时,从返回的
参数中获得用户名与密码,然后交由自己的LSA验证。
目的:
2、
RDP中注销后,在计算机的锁屏时输入用户名与密码进行登录。此时是会话2的WlxLoggedOutSAS结束。
结束时通知会话0进行LSA登录(因为此时会话0是处于Logoff状态),那么登录的用户名与密码哪里来呢?
当会话2的WlxLoggedOutSAS结束后返回的pszDomain是有值的,但是因为我通知会话0进行LSA验证了,此时
会话0的pszDomain竟然是0xccccccc。
if ( 0xcccccccc == (unsigned int)g_CXRedGinaApp.m_sWlxLogOutContext.s_pMprNotifyInfo->pszDomain || NULL == g_CXRedGinaApp.m_sWlxLogOutContext.s_pMprNotifyInfo->pszDomain)
{
wcscpy(wstrUserName, CShareData::m_lpShareData->DataLogonInfo.u.up.username);
wcscpy(wstrPassWord, CShareData::m_lpShareData->DataLogonInfo.u.up.password);
wcscpy(wstrDomain, CShareData::m_lpShareData->DataLogonInfo.u.up.domain);
}
解决方法:
在会话2结束时把用户名与密码保存到共享内存中,然后通知完会话0后,会话0再从共享中读出来进行LSA验证。
3、WlxLogoff出现异常
解决方法:
WlxLogoff函数自己重写,不用msgina.dll中的接口。
4、