如何改变Windows开机时登陆的验证机制 VC/MFC / 基础类 - CSDN社区 community.csdn.net

来源:百度文库 编辑:神马文学网 时间:2024/04/28 05:39:32
先说说登录过程吧,首先声明,winlogon.exe可不是随意可更换的,我们更换的是GINA,而非winlogon.exe,如果处理不当,可能WINDOWS就起不来了.  
   
 在“交互式登录”过程中,Winlogon调用了GINA组文件,把用户提供的账号和密码传达给GINA,由GINA负责对账号和密码的有效性进行验证,然后把验证结果反馈给Winlogon程序。在与Winlogon.exe对话时,GINA会首先确定Winlogon.exe的当前状态,再根据不同状态来执行不同的验证工作。通常Winlogon.exe有三种状态:  
   
    1.已登录状态  
   
    顾名思义,用户在成功登录后,就进入了“已登录状态”。在此状态下,用户可以执行有控制权限的任何操作。  
   
    2.已注销状态  
   
    用户在已登录状态下,选择“注销”命令后,就进入了“已注销状态”,并显示Winlogon桌面,而由GINA负责显示登录对话框或欢迎屏幕。  
   
    3.已锁定状态  
   
 当用户按下“Win+L”键锁定计算机后,就进入了“已锁定状态”。在此状态下,GINA负责显示可供用户登录的对话框。此时用户有两种选择,一种是输入当前用户的密码返回“已登录状态”,另一种是输入管理员账号和密码,返回“已注销状态”,但原用户状态和未保存数据丢失。  
   
    ////登录到本机的过程  
   
    1.用户首先按Ctrl+Alt+Del组合键。    
   
    2.Winlogon检测到用户按下SAS键,就调用GINA,由GINA显示登录对话框,以便用户输入账号和密码。  
   
    3.用户输入账号和密码,确定后,GINA把信息发送给LSA进行验证。  
   
    4.在用户登录到本机的情况下,LSA会调用Msv1_0.dll这个验证程序包,将用户信息处理后生成密钥,同SAM数据库中存储的密钥进行对比。  
   
    5.如果对比后发现用户有效,SAM会将用户的SID(Security   Identifier--安全标识),用户所属用户组的SID,和其他一些相关信息发送给LSA。  
   
    6.LSA将收到的SID信息创建安全访问令牌,然后将令牌的句柄和登录信息发送给Winlogon.exe。  
   
    7.Winlogon.exe对用户登录稍作处理后,完成整个登录过程。  
   
    ////登录到域的过程  
   
    登录到域的验证过程,对于不同的验证协议也有不同的验证方法。如果域控制器是Windows   NT  4.0,那么使用的是NTLM验证协议,其验证过程和前面的“登录到本机的过程”差不多,区别就在于验证账号的工作不是在本地SAM数据库中进行,而是在域控制器中进行;而对于Windows   2000和Windows   2003域控制器来说,使用的一般为更安全可靠的Kerberos  V5协议。通过这种协议登录到域,要向域控制器证明自己的域账号有效,用户需先申请允许请求该域的TGS(Ticket-Granting  Service--票据授予服务)。获准之后,用户就会为所要登录的计算机申请一个会话票据,最后还需申请允许进入那台计算机的本地系统服务。  
   
    其过程如下:  
   
    1.用户首先按Ctrl+Alt+Del组合键。  
   
    2.Winlogon检测到用户按下SAS键,就调用GINA,由GINA显示登录对话框,以便用户输入账号和密码。  
   
    3.用户选择所要登录的域和填写账号与密码,确定后,GINA将用户输入的信息发送给LSA进行验证。  
   
    4.在用户登录到本机的情况下,LSA将请求发送给Kerberos验证程序包。通过散列算法,根据用户信息生成一个密钥,并将密钥存储在证书缓存区中。  
   
    5.Kerberos验证程序向KDC(Key   Distribution   Center--密钥分配中心)发送一个包含用户身份信息和验证预处理数据的验证服务请求,其中包含用户证书和散列算法加密时间的标记。    
   
    6.KDC接收到数据后,利用自己的密钥对请求中的时间标记进行解密,通过解密的时间标记是否正确,就可以判断用户是否有效。    
    7.如果用户有效,KDC将向用户发送一个TGT(Ticket-Granting  Ticket--票据授予票据)。该TGT(AS_REP)将用户的密钥进行解密,其中包含会话密钥、该会话密钥指向的用户名称、该票据的最大生命期以及其他一些可能需要的数据和设置等。用户所申请的票据在KDC的密钥中被加密,并附着在AS_REP中。在TGT的授权数据部分包含用户账号的SID以及该用户所属的全局组和通用组的SID。注意,返回到LSA的SID包含用户的访问令牌。票据的最大生命期是由域策略决定的。如果票据在活动的会话中超过期限,用户就必须申请新的票据。  
   
 8.当用户试图访问资源时,客户系统使用TGT从域控制器上的Kerberos  TGS请求服务票据(TGS_REQ)。然后TGS将服务票据(TGS_REP)发送给客户。该服务票据是使用服务器的密钥进行加密的。同时,SID被Kerberos服务从TGT复制到所有的Kerberos服务包含的子序列服务票据中。       
   
    9.客户将票据直接提交到需要访问的网络服务上,通过服务票据就能证明用户的标识和针对该服务的权限,以及服务对应用户的标识。
如何改变Windows开机时登陆的验证机制 VC/MFC / 基础类 - CSDN社区 community.csdn.net 如何改变Windows开机时登陆的验证机制 VC/MFC / 基础类 2如何让基于对话框的MFC程序启动后自动隐藏对话框 VC/MFC / 界面 - 社区 community.csdn.net 请教:如何用VC得到当前IE正在浏览的网页的网址和title? VC/MFC / HTML/XML - CSDN社区 community.csdn.net 如何删除页眉和页脚? Windows专区 / Office使用 - CSDN社区 community.csdn.net VC中, 为何每次都要重新编译? VC/MFC / 基础类 - CSDN社区 commu... vc中listbox控件为什么不能横滚动 VC/MFC / 基础类 - CSDN社区 co... 如何删除页眉或页脚? Windows专区 / Office使用 - 社区 community.csdn.net 如何安装SUN公司的SOLARIS操作系统------(unix)50分呀!!! Linux/Unix社区 / 系统维护与使用区 - CSDN社区 community.csdn.net 在ADO中如何获得一个表中记录的总数? VC/MFC / 数据库 - CSDN社区 com... 嵌入式汇编中divl的用法? Linux/Unix社区 / 内核及驱动程序研究区 - CSDN社区 community.csdn.net 用GCC将源文件编译成库文件的问题 Linux/Unix社区 / 程序开发区 - CSDN社区 community.csdn.net 华为笔试过了,面试时又出了一道题 C/C / C语言 - CSDN社区 community.csdn.net 请问各位大侠:C++的异常处理(try、catch、throw)与C语言的Setjmp()、Longjmp()机制有什么区别?非常感谢! C/C / C 语言 - CSDN社区 community.csdn.net 谁有《C 高级实用程序设计》- C程序汉字显示技术 那一章的源代码 C/C / 非技术区 - CSDN社区 community.csdn.net vc中如何调用webservice? VC/MFC / 进程/线程/DLL - CSDN社... 如何保存SQL的money类型数据。 .NET技术 / VB.NET - CSDN社区 c... asp.net 数据缓存机制 - cnkiminzhuhu的专栏 - CSDN博客 .NET下的内存分配机制 - 梦想MVP - CSDN博客 如何面试程序员? - CSDN.NET - CSDN资讯 如何将CString转换为char[] VC/MFC / 基础类 如何在程序执行比较长时间的处理时弹出一个等待对话框 VC/MFC / 基础类 dll中如何得到一个对话框的句柄 - VC/MFC / 基础类 求教!用hibernate,怎么用count(),sum(),怎么能根据条件查询,执行语句? Java / 框架、开源 - CSDN社区 community.csdn.net