LOGON描述(4)

作者:陆麟
转载请征得作者同意.如有BUG,请汇报.
2000.3.29


好了,现在GINA相对于LOGON的初始化已经完成.但是现在还没有用户登录界面.当然,为了让GINA有机会显示欢迎图画,LOGON要求GINA EXPORT一个函数:
VOID WINAPI WlxDisplaySASNotice(PVOID   pContext);
该函数的唯一功能就是显示欢迎窗口.并且监督是否有自己定义的SAS(安全提示码序列)出现.如果出现,则要通知LOGON有个登录请求发出.SAS在NT下缺省情况为CTL+ALT+DEL.但是并不一定只有CTL+ALT+DEL才能作为SAS.GINA本身可以提供SAS监督.当然,用CTL+ALT+DEL更为方便.因为在初始化时GINA已经收到了一个函数:
VOID WlxUseCtrlAltDel(HANDLE hWlx);
该函数通知LOGON,GINA使用CTL+ALT+DEL为SAS.如果要用其他的SAS,GINA必须自己HOOK热键.并且通过:
WlxSasNotify(hGlobalWlx, dwSasType);
报告SAS出现.由于HOOK将更增GINA写作工作量,而且MS提供缺省的CTL+ALT+DEL服务,那么用CTL+ALT+DEL在决大多数情况下就够了.
会到话题.现在出现的是欢迎画面.当用户键入CTL+ALT+DEL时,登录接口出现了.:DDD现在我们就进入了MS所谓的INTERACTIVE LOGON.
现在,LOGON调用GINA的
int WlxLoggedOutSAS(
  PVOID                 pWlxContext,
  DWORD                 dwSasType,
  PLUID                 pAuthenticationId,
  PSID                  pLogonSid,
  PDWORD                pdwOptions,
  PHANDLE               phToken,
  PWLX_MPR_NOTIFY_INFO  pMprNotifyInfo,
  PVOID                 *pProfile
);
函数.GINA现在用这个函数来显示对话框并且收集用户信息并且调用LSA进行验证.如果通过了验证,那么就会填写MprNotifyInfo结构.这个结构用以通知MPR:用户登录喽!
此时,NT带的GINA会分析本机是否在一个DOMAIN里,根据不同的情况显示不同的对话框.当用户机器不属于DOMAIN.那么根本就没机会填写DOMAIN名字.当机器隶属于一个NT网络架构的网,用户将可以有DOMAIN域填写.用以告知NT用户希望以什么身份登录.
今天就讲到这里,下次将顺WlxLoggedOutSAS的线路进入LSA进入激动人心的讲解.大家睁大眼睛看啊.