-
-
[旧帖] [原创][求助][原创][原创][菜鸟学驱动]初探Windows内部结构(申请邀请码) 0.00雪花
-
发表于: 2010-4-18 00:32 1489
-
前言
如题,我也是开始学习windows驱动开发,本人也没有啥背景,仅会点C语言,知道未来路途艰难,相信有看雪,有朋友们,坚持就会有收获,今天是我学习以来第一次写文章,所以不知道从哪里说起,希望大牛们多鼓励。多一些指点,少一些攻击。毕竟我还是一个菜鸟嘛。
首今天我觉得要学习一门知识,最重要的就是要理清这个知识的基本框架,这几天我也是东看西看的,没有任何收获,看来看到了张大牛的《Windows驱动开发技术详解》,才有了一些思路。下面的这些内容很多都是引至他书中的一些内容,不知道这算不算侵权,若有侵权,请张大牛联系我,我好删贴。呵呵。
废话不多说了,下面就是就开始了。
一、驱动的开发模型分类
关于这个,我在看了很多资料,大家都讲得不够通彻,(可能我是菜鸟的缘故吧。)
有什么VXD、KDM、WDM、WDF啊,可能大家一上来看到这些东西,就有点怕了。其实这个是和Windows操作系统的分类有关的。(如果叫驱动模型分类,还不如说是windows操作系统分类好)
大家熟知的windows系统有windows 95,windows 98,windows ME都属于windows 9x系列的。还有大家熟悉和不熟悉的windows NT3.1 ,windows NT3.5,windows NT4.0,windows 2000以及大家现在常用的windows XP此属于windows NT系列的。
windows 9x系列属于从16位操作系统到32位系列的一个过度。在这里其实做为驱动模型来讲是指要满足一些特性而言的,比如:电源管理、即插即用等。
所以我们大家暂不用了解那么多,简单区分:将一切在windows 2000^^^windows 7下能正常动作且未调用WDF相关的内核API函数的驱动称为传统型驱动(包括NT式),如果调用了WDF相关内核的则称为WDF驱动。
也就是说我讨论驱动只有传统型驱动和WDF驱动。WDF驱动是可以调用传统型驱动所调用的内核AP,WDF视为传统型的升级版。
二、WINDOWS分层
可能我这个分层的概领不怎么准确,但是也是这个意思。
Windows总体上分为内核模式(kernel model)和用户核式(user model)。那么这个分层是CPU有关系的。CPU也分为4层,从ring 0,ring1,ring2到ring3这四层。Ring 0权限最高,Ring 3层最底。
Windows内核层是运行在ring 0(简称r0)。而用户模式运行在ring 3层。其实现在操作系统似乎只有r0层和r3层。(CPU与操作系统的关系如下图)
三、window操作系统与应用系统的关系
大家可能在想,为什么操作系统要分层呢。因为应用系统和操作系统是相互隔离的。只有操作系统才的核心代码有特权运行在r0层。所以操作系统与应用系统有点类似c/s结构。
四、windows操作系统总体架构。
关于这个话题似乎太强大了,这个不是我们菜鸟所能研究的,但是我觉得大家只要理解windows操作系统总体结构层次,以及每天的作用就可以了, 下面我简单的根据我的理解,和大家聊一天。首先看一个图,也是张大牛总结的。
看着这个图,大家再慢慢理解windows操作系统的总体结构就比较清楚了。
1、应用程序:我们所用自己编写的应用程序(指windows平台的),不论是vb,c,c++等编写的程序,都是采用win32子系统采用API函数。所以编写windows应用系统是比较简单的,只要大家熟练使用win32的api函数,然后熟悉一个IDE工具,就可以很容易的写出系统了。至于系统的好坏那就另当别论了。
2、WIN32子系统:大家把这个理解成windows子系统,提供了大量的API函数。
根据功能主要分为三个,分别是:USER函数、GUI函数、KERNEL函数。
USER函数:这类函数管理窗口、菜单、对话框和控件等
GUI函数:这类主要是设备上执行绘图操作。
KERNEL函数:主要是负责非GUI资源,如进程、线程等。
3、Native API:这个和WIN32 API是一样的名字,只是名字前加了NT二个字母。Native API是用户从用户模式进入内核模式的大门。他是通过软中断试进入内核模式的。(win2k是用int 2eh,winxp是用sysenter),并调用内核服务的。
4、系统服务函数:通过Native api进入内核模式,软中断会将native api中的参数和系统服务号一同传入内核模式。根据这个索引可以在SSDT里找到相应内核函数的地址。(SSDT:system service descriptor table系统服务描述表.)如图所示。
其实我学习驱动的目的就是想知道,游戏公司是怎么使用这个驱动保护游戏的。我查了一些资料,据说是可以HOOK SSDT,改写SSDT地址,将标准的系统服务地址必掉,达到破保护的目的。我也没试过,也不知道行不行,我估计下一步就是研究这个了。呵呵。
5.相关的执行组件。
Windows 是相当繁杂的一个东西,所以底层需要一些组件各负其责进行工作。我仅描述其作用,具体很多东西,其实我也不是太清楚。
(1)、对象管理程序
主要作用:创建、管理、回收这些对象组件。大家可能已经知道了,在驱动开发中涉及到很多对象,比如:驱动对象,设备对象等。
(2)、进程管理程序
这个大家只要明白,其实在系统里最小的单元不是进程,而是线程。进程好比是一个容器。进程管理器的作用是创建和终止线程,线程是由内核负责调度的。
(3)、虚拟内存
这个大家只要了解,每个程序都有一个进程,每个进程都有4G的虚拟内存。每个进程都是虚拟的,这样可以保护进程类的数据,不被其他进程破坏。
同时这4GB内存分为二块,2GB是用户模式地址,(从0到0x7ffffff)。2GB是内核模式的。(从0x80000000到0xFFFFFFFF)。内核部分的地址都是相同的。因此比较痛狠那些写内核病毒程序的人,你要写就写好一点,不要总是让咱们蓝屏。
(4)I/O管理器:
负责发送IRP请求,简单的讲就是向咱们的设备发送消息。
(5)驱动程序
简单的讲就是对I/O管理器发送的消息(IRP)进行处理。
(6)内核
主要作用大家都比较清楚了。为执行体组件提供基本支持,同是负责进程的调度等工作。
小结:
其实我也很想把我自己理解的一些东西写进去,但是发现当自己写东西的时候才是那么的难,再此也很感谢在写教程的大牛们,没有你的付出就不会有菜鸟们的进步。希望自己有时间的时候,慢慢这些东西都写出来了,大家一起研究游戏的一些东西。呵呵。希望有这方面爱好的朋友进来一起学习。QQ群号:86499421
菜鸟学驱动.doc
如题,我也是开始学习windows驱动开发,本人也没有啥背景,仅会点C语言,知道未来路途艰难,相信有看雪,有朋友们,坚持就会有收获,今天是我学习以来第一次写文章,所以不知道从哪里说起,希望大牛们多鼓励。多一些指点,少一些攻击。毕竟我还是一个菜鸟嘛。
首今天我觉得要学习一门知识,最重要的就是要理清这个知识的基本框架,这几天我也是东看西看的,没有任何收获,看来看到了张大牛的《Windows驱动开发技术详解》,才有了一些思路。下面的这些内容很多都是引至他书中的一些内容,不知道这算不算侵权,若有侵权,请张大牛联系我,我好删贴。呵呵。
废话不多说了,下面就是就开始了。
一、驱动的开发模型分类
关于这个,我在看了很多资料,大家都讲得不够通彻,(可能我是菜鸟的缘故吧。)
有什么VXD、KDM、WDM、WDF啊,可能大家一上来看到这些东西,就有点怕了。其实这个是和Windows操作系统的分类有关的。(如果叫驱动模型分类,还不如说是windows操作系统分类好)
大家熟知的windows系统有windows 95,windows 98,windows ME都属于windows 9x系列的。还有大家熟悉和不熟悉的windows NT3.1 ,windows NT3.5,windows NT4.0,windows 2000以及大家现在常用的windows XP此属于windows NT系列的。
windows 9x系列属于从16位操作系统到32位系列的一个过度。在这里其实做为驱动模型来讲是指要满足一些特性而言的,比如:电源管理、即插即用等。
所以我们大家暂不用了解那么多,简单区分:将一切在windows 2000^^^windows 7下能正常动作且未调用WDF相关的内核API函数的驱动称为传统型驱动(包括NT式),如果调用了WDF相关内核的则称为WDF驱动。
也就是说我讨论驱动只有传统型驱动和WDF驱动。WDF驱动是可以调用传统型驱动所调用的内核AP,WDF视为传统型的升级版。
二、WINDOWS分层
可能我这个分层的概领不怎么准确,但是也是这个意思。
Windows总体上分为内核模式(kernel model)和用户核式(user model)。那么这个分层是CPU有关系的。CPU也分为4层,从ring 0,ring1,ring2到ring3这四层。Ring 0权限最高,Ring 3层最底。
Windows内核层是运行在ring 0(简称r0)。而用户模式运行在ring 3层。其实现在操作系统似乎只有r0层和r3层。(CPU与操作系统的关系如下图)
三、window操作系统与应用系统的关系
大家可能在想,为什么操作系统要分层呢。因为应用系统和操作系统是相互隔离的。只有操作系统才的核心代码有特权运行在r0层。所以操作系统与应用系统有点类似c/s结构。
四、windows操作系统总体架构。
关于这个话题似乎太强大了,这个不是我们菜鸟所能研究的,但是我觉得大家只要理解windows操作系统总体结构层次,以及每天的作用就可以了, 下面我简单的根据我的理解,和大家聊一天。首先看一个图,也是张大牛总结的。
看着这个图,大家再慢慢理解windows操作系统的总体结构就比较清楚了。
1、应用程序:我们所用自己编写的应用程序(指windows平台的),不论是vb,c,c++等编写的程序,都是采用win32子系统采用API函数。所以编写windows应用系统是比较简单的,只要大家熟练使用win32的api函数,然后熟悉一个IDE工具,就可以很容易的写出系统了。至于系统的好坏那就另当别论了。
2、WIN32子系统:大家把这个理解成windows子系统,提供了大量的API函数。
根据功能主要分为三个,分别是:USER函数、GUI函数、KERNEL函数。
USER函数:这类函数管理窗口、菜单、对话框和控件等
GUI函数:这类主要是设备上执行绘图操作。
KERNEL函数:主要是负责非GUI资源,如进程、线程等。
3、Native API:这个和WIN32 API是一样的名字,只是名字前加了NT二个字母。Native API是用户从用户模式进入内核模式的大门。他是通过软中断试进入内核模式的。(win2k是用int 2eh,winxp是用sysenter),并调用内核服务的。
4、系统服务函数:通过Native api进入内核模式,软中断会将native api中的参数和系统服务号一同传入内核模式。根据这个索引可以在SSDT里找到相应内核函数的地址。(SSDT:system service descriptor table系统服务描述表.)如图所示。
其实我学习驱动的目的就是想知道,游戏公司是怎么使用这个驱动保护游戏的。我查了一些资料,据说是可以HOOK SSDT,改写SSDT地址,将标准的系统服务地址必掉,达到破保护的目的。我也没试过,也不知道行不行,我估计下一步就是研究这个了。呵呵。
5.相关的执行组件。
Windows 是相当繁杂的一个东西,所以底层需要一些组件各负其责进行工作。我仅描述其作用,具体很多东西,其实我也不是太清楚。
(1)、对象管理程序
主要作用:创建、管理、回收这些对象组件。大家可能已经知道了,在驱动开发中涉及到很多对象,比如:驱动对象,设备对象等。
(2)、进程管理程序
这个大家只要明白,其实在系统里最小的单元不是进程,而是线程。进程好比是一个容器。进程管理器的作用是创建和终止线程,线程是由内核负责调度的。
(3)、虚拟内存
这个大家只要了解,每个程序都有一个进程,每个进程都有4G的虚拟内存。每个进程都是虚拟的,这样可以保护进程类的数据,不被其他进程破坏。
同时这4GB内存分为二块,2GB是用户模式地址,(从0到0x7ffffff)。2GB是内核模式的。(从0x80000000到0xFFFFFFFF)。内核部分的地址都是相同的。因此比较痛狠那些写内核病毒程序的人,你要写就写好一点,不要总是让咱们蓝屏。
(4)I/O管理器:
负责发送IRP请求,简单的讲就是向咱们的设备发送消息。
(5)驱动程序
简单的讲就是对I/O管理器发送的消息(IRP)进行处理。
(6)内核
主要作用大家都比较清楚了。为执行体组件提供基本支持,同是负责进程的调度等工作。
小结:
其实我也很想把我自己理解的一些东西写进去,但是发现当自己写东西的时候才是那么的难,再此也很感谢在写教程的大牛们,没有你的付出就不会有菜鸟们的进步。希望自己有时间的时候,慢慢这些东西都写出来了,大家一起研究游戏的一些东西。呵呵。希望有这方面爱好的朋友进来一起学习。QQ群号:86499421
菜鸟学驱动.doc
赞赏
他的文章
看原图
赞赏
雪币:
留言: