首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 网络安全-> 教你一招
ring0 / ring3 跨级别进程通信-.NET教程,评论及其它
作者:网友供稿 点击:133
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 

进行wdm/ifs开发时,常需要开发一个gui来同用户互动,并借此控制驱动程序的行为,或者向用户汇报底层信息。一个著名的例子是filemon。这个程序功能全面,但其不足也很致命:通过轮询法来交互ring0/ring3的数据,经常造成系统资源不足,或者干脆挂起。

在用户模态下的进程间通信模式,可以移植到ring0/ring3的通信中,使得kernel进程中的流程与用户态进程进行同步。这种可能性来自于内核对象管理技术——所有的mutex/semaphore都是内核对象(这也是多线程程序设计所依赖的基本服务)。由于ring0/ring3中的进程都能访问这些“基本”内核对象,利用他们来做同步是理所当然的。这样的同步模式和平常使用没有多少区别,只是ring0程序在访问mutex/semaphore是步骤不同。

下文摘自一篇本科毕业论文,这个片断剖析了杀毒引擎中内核/用户态通信技术,十分有借鉴价值。

注:文中"hooksys.sys"为nt service的binary image, "guidll.dll"为用户态gui进程的组件


hooksys.sys中使用命名的信号量来唤醒ring3级线程。具体做法如下:首先在guidll.dll中调用createsemaphore创建一个命名信号量hookopen并设为无信号状态,同时调用createthread创建一个线程。线程代码的入口处通过调用waitforsingleobject在此信号量上等待被ring0钩子函数唤醒查毒。驱动程序这边则在初始化过程中通过未公开的例程obreferenceobjectbyname(\basenamedobjects\hookopen)得到命名信号量对象hookopen的指针,当它拦截到文件打开请求时调用kereleasesemaphore将hookopen置为有信号状态唤醒ring3级等待检查打开文件的线程。其实guidll.dll共创建了两个命名信号量,还有一个hookclose用于唤醒ring3级等待检查关闭文件的线程。

 

guidll.dll中使用命名的事件来唤醒暂时挂起等待查毒完毕的ring0钩子函数。具体做法如下:hooksys.sys在其初始化过程中通过zwcreateevent函数创建一组命名事件对象(此处必须合理设置安全描述符,否则ring3线程将无法使用事件句柄)并得到其句柄,同时通过obreferenceobjectbyhandle得到句柄引用的事件对象的指针。然后hooksys.sys将这一组事件句柄和指针对以及事件名保存在备用链表的每个元素中:ring3使用句柄,ring0使用指针。当钩子函数拦截到文件请求时它首先唤醒ring3查毒线程,然后马上调用kewaitforsingleobject在一个事件\basenamedobjects\hookxxxx上等待查毒的完成。而被唤醒的ring3查毒线程通过openeventa函数由事件名字得到其句柄,在结束查毒后发出一个setevent调用将事件置为有信号状态从而唤醒ring0挂起的钩子函数。当然,以上讨论仅限于打开文件操作,钩子函数在拦截到其它文件请求时并不调用kewaitforsingleobject等待查毒的完成,而是唤醒ring3查毒线程后直接返回;相应的ring3查毒线程也就不必在查毒完成后调用setevent进行远程唤醒。

 


文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·Java 中开源的CMS系统-JSP教程,Java技巧及代码
·ASP.NET服务器控件发送脚本-ASP教程,远程脚本
·javaCC学习笔记-JSP教程,Java技巧及代码
·asp.net中的模态对话框-ASP教程,ASP应用
·在.net应用程序中使用用户控件-.NET教程,组件控件开发
·身份证15位转换成18位代码(vbscript)-ASP教程,脚本编码
·基于dsp控制的数字式双向dc/dc变换器的实现
·利用Asp.net 动态创建DataList-ASP教程,ASP应用
·最佳的数据库分页方法-ASP教程,数据库相关
·利用JAVA技术进行XML编程(第一部分)-JSP教程,Java与XML
最新文章
·网关防护做得好web威胁少一半_教你一招教程
·计算机安全十大建议_教你一招教程
·给ie加个参数 永远不怕ie主页被修改_教你一招教程
·修改十四项设置 打造安全牢靠易用电脑_教你一招教程
·论垂直搜索引擎存在的意义_站长心得
·简单分析个人网站最缺少的几点要素_站长心得
·个人网站赢利探讨:网站究竟是如何盈利的?_站长心得
·网站设计的思考网页版面布局的原理_站长心得
·建立用自己域名结尾的hotmail邮箱2_站长心得
·随时保障系统安全五步搞定补丁管理部署_教你一招教程
相关主题
西部数码虚拟主机

友情链接
CNNIC 西部数码
万网 自助建站
虚拟主机 asp空间
域名注册 域名
域名申请 主页空间
论坛空间 网站空间
国际域名 虚拟空间
空间租用 DDOS防火墙
成都主机托管 四川主机托管
主机租用 服务器租用
网站目录 自助建站
虚拟主机 网址大全
软件下载
自助链接
虚拟主机资讯 特价虚拟主机
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
发表评论 打印  刷新     关闭