浅谈WDM和WDF驱动
文章平均质量分 74
Z18_28_19
在这个圈子里混了很多年了,总觉得有写点东西的必要,管他好的,坏的,对的,错的!
展开
-
Windows驱动中的设备对象
设备对象,顾名思义,就是把一个设备抽象成一个对象来管理。它代表一个被驱动管理的设备,但这个设备,不一定是实际存在的。在WDM驱动中,一般我们在AddDevice函数中来创建它。指向AddDevice的函数指针是驱动对象的一个域。下面我们给出它书本中的数据结构说明。 当然,我们也可以使用windbg的dt命令查看设备对象的数据结构。原创 2012-08-23 21:02:22 · 1641 阅读 · 0 评论 -
Windows驱动的设备PNP和电源设置
加班,还是悠着点吧,毕竟,多加班没好处! 今天,介绍下,关于PNP的操作,也就是即插即用。我们知道Windows支持PNP,但是,设备首先要声明,设备本身是支持的。 上一章,我们讲了很多关于WdfDeviceInitXXXXXX的函数。那些都是在创建设备对象之前,调用的。设置属性,以参数的形式传给创建设备对象的函数。 而我们的PNP的操原创 2012-09-25 23:10:02 · 5019 阅读 · 0 评论 -
Windows驱动中的inf文件
我们知道Windows设备驱动的安装都需要inf文件,inf文件中定义了驱动的服务,定义了驱动的硬件子键,服务子键和类子键。使操作系统可以方便的了解你的驱动的属性,特性等等。 Windows系统从98到2000,到XP,Vista,Win7,以及Win8,容量越来越大。在很大的程度上,是由于驱动的原因。因为支持的设备越来越多,所以驱动越来越多。我们先来看硬件子键,一般原创 2012-10-17 22:07:52 · 6128 阅读 · 0 评论 -
Windows驱动_WDDM之二
总有一些事情的牵绊,时常自己会为这些琐事恍惚,所以一直没有快速的更新下去。其实坚持做一件事真的很难。而且是长时间的坚持。人都是有惰性的,谁不想利用休息的时间好好休息一下了。为了明天,自己的明天,我需要坚持,需要战胜惰性,总有一天我们也会破茧成蝶。我希望这一天来的较早一些。还是不想给自己一个星期,必须更新多少,这个还是由自己把握。 WDDM和XDDM一样,需要一个显示驱动和一个显原创 2013-03-09 18:14:21 · 4711 阅读 · 0 评论 -
Windows驱动_WDDM之一
好长一段时间没有更新Windows 驱动相关的章节,因为一直在更新相关数据结构相关的章节,因为一直在告诫自己,在某一段时间内,只能做好一件事。我们都在挖井,其实地下水都是水平的,而99%的人在途中进行放弃,只有1%的人最终挖到水。唯有坚持,虽然不一定成功,但不坚持,半途而费,更无成功的可能,每天进步一点点,水滴石穿,不段的积累,才有不断的超越。目前,感觉因为都是软件,所以,时不时的也可以更新驱动的原创 2013-01-24 21:06:26 · 3516 阅读 · 0 评论 -
Windows驱动_MSDN网址
http://msdn.microsoft.com/en-us/library/windows/hardware/ff569513(v=vs.85).aspx原创 2013-02-20 19:34:39 · 989 阅读 · 0 评论 -
Windows驱动_WDDM之三
下面这幅图显示了关于WDDM从渲染设备的创建一直到内容最终被显示的整个流程。详细的调用顺序我们可以参看下面的描述。 1, 当一个应用程序请求创建了一个渲染设备,显示的小端口驱动会接收到DxgkDdiCreateDevice的调用。下面给出其MSDN中的定义。PDXGKDDI_CREATEDEVICE DxgkDdiCreateDevice;NTSTATUS APIENTRY D原创 2013-03-21 21:12:27 · 3950 阅读 · 1 评论 -
Windows驱动_WDDM之四
人有时很奇怪,有时很多愁,有时很善感,有时候觉得自己很委屈,为什么,自己会是这样,觉得对自己是多么的不公,但是回头想想,其实也是公平的,包含整体的公平,也许这就是自己的人生。我应该去接受它。更加的努力。其实,我要相信自己,现在不比别人差,以后要比别人更强。其实,现在还是没有强大的足够的内心而已。人生是长跑,前面既然,这样那样的原因落后,后面就要奋起直追。 下面几个章节,原创 2013-03-23 18:08:28 · 2084 阅读 · 0 评论 -
Windows驱动的IOCTL
虽然目前,没有具体的项目,但是Direct3D学习还是会继续。其实很多东西,虽然看起来现在没多大用处,说不定将来有很大的用处。这个无法衡量,多学点,总是有好处的。后面,断断续续,会把另外的几个方向,WDDM 驱动,数据结构算法,也开始捡起来继续。现在需要的是,将知识变成体系。所以,需要大量的总结。 我们今天看一下Windows驱动中的IOCTL,IOCTL顾名思义,就是IO原创 2013-05-06 21:36:39 · 3719 阅读 · 1 评论 -
Windows驱动中的电源管理
想来想去,今天还是更新一章,虽然回来点晚!因为,可能以后的时间会越来越少,一方面,是案子马上会非常忙,还有更重要的是,宝宝要会回来了! 不知道,为什么,今天一直在想,怎么去准备创业,哪个方向,才是适合自己的。想来想去,都没觉得合适的。还是需要机会,和积累的,你积淀了该需要的,唯一就是机会的。而现在,我还不够,远远不够。 我们知道,在WDM中,所有的电原创 2012-09-24 22:41:58 · 4593 阅读 · 0 评论 -
WDF驱动中的内存管理
今年的经济形势不太好,目前很多公司都受其影响了!看来,需要冬眠了,正好抓住这个时间,好好总结总结,冲冲电,梳理梳理! 我们知道,在内核模式,使用内存要非常小心,搞不好,会让系统崩溃。直接蓝屏重启!如果是驱动的问题,那就麻烦了。如果在接触硬件之前,出问题,那只有重新装系统了。如果不是必须的驱动,我们可以进入安全模式。或者在另外的系统里,删除这个驱动文件。原创 2012-10-14 20:53:00 · 4836 阅读 · 0 评论 -
Windows驱动中的Request
今天是星期一,不知道为什么,每到星期一,就头疼,可能是周末症状,还没有调整过来的原因吧! 继续昨天的话题,昨天有看到IO_STACK_LOCATION,那么对于在WDF中,这个IO_STACK_LOCATION到哪里去了呢?答案就是Request,即WDFREQUEST的结构体,很遗憾Windows没有公开此结构体。不过,我们可以从其创建的参数,和一些初始其的宏定义原创 2012-09-10 22:44:05 · 2692 阅读 · 0 评论 -
Windows驱动中的驱动对象
Windows中的驱动对象,顾名思义,就代码驱动程序本身。下面给出WDM中的驱动对象的数据结构的定义。 这里我们只介绍几个数据成员,其它的成员以后再介绍。 DeviceObject,代表驱动程序支持的第一个设备,再通过设备对象的水平结构,也及时DeviceOjbect中的NextDevice,我们可以把所有这个驱动程序支持的一组设备,通过设备原创 2012-08-26 19:15:33 · 1567 阅读 · 0 评论 -
Windows驱动中的IRP
如所周知,Windows中的驱动中的所有的IO请求都是已IRP的形式存在的。即所有的应用程序对驱动程序的调用,驱动程序对驱动程序的调用,都是通过IRP,驱动程序本身的所有功能都是通过IRP来呈现的,下面给出IRP的MSDN中数据结构定义: typedef struct _IRP { . . PMDL MdlAddress; ULONG原创 2012-08-26 21:07:33 · 1209 阅读 · 0 评论 -
Windows 驱动中的IO堆栈
最近好忙,事情好多,不知道,自己能不能遵守之前的约定,一个星期更新一篇。尽量抽出时间了,还有要注意身体,身体是自己的,身体是革命的本钱,身体不好,再大的志向,也不可能实现。忙中偷闲,喝杯茶去! 今天来看一下,跟IRP密切相关的一个数据结构,IO_STACK_LOCATION,即IO堆栈,我们知道内核的IO管理器,每创建一个IRP,必然会创建一个IO_STACK_LOCAT原创 2012-09-09 22:06:16 · 1812 阅读 · 0 评论 -
Windows驱动中的队列
今天还好!可以很早下班,而且主要是不太忙了,所以以后要加紧更新了!希望今年可以对windows驱动做个很好的总结。 今天想介绍下,跟IRP也非常相关的队列。这里只简单介绍下,后续还会修改。我们知道在WDM驱动模型中,我们的IRP,需要排队,因为一下无法处理那么多的IRP,怎么办了,那就需要队列。队列的对象一般放在我们的设备扩展中。这里一般我们还会用到两个函数IoS原创 2012-09-13 20:54:15 · 2795 阅读 · 0 评论 -
Windows驱动中的资源
今天下雨,在下的时候,赶紧回来!还好呵呵,还是有点忙!又是加班的一天。 今天介绍下Windows驱动中资源,资源就是硬件需要用的,我们知道,所有的这些资源,我们都是在ACPI的DSDT中分配的,包含IO地址,内存地址,中断号等等。硬件抽象层会根据我们所配置的资源,根据不同的芯片,来给我们外围的芯片分配这些资源。那么我们一般在驱动哪里接受这些资源呢?原创 2012-09-11 21:57:09 · 2662 阅读 · 0 评论 -
Windows驱动资源的使用一
今天买了飞机票,好贵啊!2400又没了!没办法!该用的钱还是得用! 上次讲到了,Windows驱动中的资源,今天着重讲一下,Windows资源,如何使用。关于中断,内存,IO这些,以后再讲。今天重点讲一下,总线驱动的引用。我们知道,在设备驱动中,经常会使用I2C,GPIO这些资源,但是我们如何进行操作了,当然,我们可以直接进行IO映射。直接I2C,GPIO地址进行操作原创 2012-09-16 21:12:57 · 3705 阅读 · 0 评论 -
Windows驱动中的IoTarget
今天不忙!还好!今天想把WDF中的关于IOTARGET对象,做个说明。之前,在WDM中,如果驱动需要调用驱动,我们需要用到设备对象的名字,如果没有名字,需要使用指针。需要使用IoGetDeviceObjectPointer,不过一直没有在WDM中使用过。后续仔细研究了,再在搏客上更新!今天主要看一下,WDF中的目标对象。 首先,我们还是需要得到一个到目标设备对象的路径,也原创 2012-09-20 19:03:46 · 3053 阅读 · 0 评论 -
Windows驱动中的中断
我们都知道,中断对于Windows驱动的重要性。MSFT推荐对于对硬件的操作都采用中断的方式,我们都知道,中断是一种资源,所以需要配置,申请。一般来说,我们都是在ACPI中配置中断资源。而在驱动中,在WDM时代,我们需要调用IoConnectInterrupt函数,此函数定义如下: NTSTATUS IoConnectInterrupt( OU原创 2012-09-20 21:02:23 · 4712 阅读 · 0 评论 -
Windows驱动中的Crash回调
没事不写博客,手就有点痒,不知道干嘛?总感觉今天有点什么事没做一样。所以,现在又开始写了。感觉自己已经对其他的东西,没有兴趣。一开电脑,首先看下新闻,然后看下公司的邮箱。然后,就是下载点东东。就没事情了。今天写什么了,就写点关于Windows驱动的CRASH回调函数的一些用法。 我们知道CRASH,是Windows系统产生了无法恢复的错误,导致整个系统无法进行下去,而没有办法的一种选择原创 2013-05-09 21:49:18 · 2472 阅读 · 2 评论