第7章WinLogon编程..docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第7章WinLogon编程WinLogon是系统提供的一个重要进程,熟悉WinLogon编程,能够更好地对系统进行控制。本章主要介绍GINA程序的编写。7.1WinLogon概述Windows环境的Logon程序是系统自行启动的重要进程,这个进程领先于外壳程序运行,它主要用于对Windows工作站和相应桌面进行保护,确保存取权限。一般地,本地系统拥有对这些对象存取的全部权限,只有通过登录界面的用户才能存取工作站对象,完全存取应用程序桌面对象。另外,WinLogon率先挂接了User32服务器,监视Ctrl+Alt+DelSAS(SecureAttentionSequence)事件。WinLogon把SAS可用事件信息通知给GINAs,作为安全守护序列或者作为它们的一部分。一般地,GINAs应该监视它们自己的SASs事件。然而,任何支持标准Ctrl+Alt+Del安全守护的GINA程序,都将被WinLogon作为WinLogon支持的SAS对象之一。当WinLogon遇到SAS事件发生时,或者GINA把SAS通知给WinLogon时,WinLogon就会设置相应的状态标志。改变WinLogon桌面,并调用其中一个GINA提供的SAS处理函数。当用户完成系统登录的时候,他们的配置信息被加载到注册表中。用户的信息将使用HKEY_LOCAL_USER注册键。WinLogon的这些自动操作是在成功登录之后,在激活最新登录用户的外壳程序之前。用户登录时GINA负责为登录用户创建一个或者多个初始化进程。WinLogon为GINA提供了支持,把最新登录用户的安全属性应用到他们创建的进程中。然而,对于GINA可取的方法是调用Windows的CreateProcessAsUser函数,让系统提供这种服务。WinLogon会自动监视键盘和鼠标活动,决定什么时候激活屏幕保护程序。一旦屏幕保护程序被激活,WinLogon会持续监视键盘和鼠标活动,决定什么时候终止屏幕保护程序。如果屏幕保护程序启用了安全属性,WinLogon就会锁定工作站。当有鼠标和键盘活动时,Winlogon会调用GINA的WlxDisplayLockedNotice函数,继续锁定工作者。如果屏幕保护程序没有应用安全属性,任何键盘和鼠标活动都会终止屏幕保护程序而不必通知给GINA。7.2WinLogon通知包的创建WinLogon通知包是一个动态链接库,这个动态链接库输出了一些函数,用于处理WinLogon事件。比如说,用户登录到系统时,WinLogon会逐次调用通知包的登录事件处理函数提供事件的信息。通知包中的事件处理函数的名称由开发者提供,但是它的函数名称必须在注册表中注册,WinLogon会自动检查注册表,得到函数的名称。用户不必为每一个WinLogon事件实现和注册全部的事件处理。每一种事件处理函数都必须遵循事件处理函数规范。这种规范只有一个参数,即WLX_NOTIFICATION_INFO结构类型。WinLogon将忽略事件处理函数的输出,如果处理一个事件时需要和WinLogon交互,应该使用Winlgon支持函数。这些通知事件包括锁定、解锁、注销、登录、启动、关机、启动屏幕保护程序、终止屏幕保护程序、启动外壳程序等。开发WinLogon通知包可以作为开发Windows服务的替代方案,这种方法的好处在于它可以得到许多用户活动的通知,而且编码要比使用WindowsNT服务简单得多。创建一个WinLogon通知包需要创建一个动态链接库,为了让WinLogon知道这个动态链接库,可以向注册表中加入适当的注册信息。在程序实现中启动一个Win32程序,由于进程是由WinLogon启动的,该进程拥有系统账号,因此用户是不能简单地通过终止任务结束这个进程的。这和WindowsNT服务是一致的。用户可以在Logoff中通知处理时终止进程。如果进程需要保持激活,可以使用EndProcessAtWinlogoff函数。如果希望这个进程为登录用户所有,则应该在启动通知期间而不是logon通知中使用CreateProcessAsUser函数。实现步骤如下:(1)创建动态链接库。//sample.cpp#includewindows.h#includeWinwlx.hPROCESS_INFORMATIONg_pi;TCHARg_szPath[]=_T(c:\somepath\execut.exe\arguments\);SafeTerminateProcess(HANDLEhProcess,UINTuExitCode);BOOLWINAPIDllMain(HINSTANCEhInstance,DWORDdwReason,LPVOIDlpReserved){switch(dwReason){caseDL

文档评论(0)

yxnm + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档