我是靠谱客的博主 鲤鱼睫毛,最近开发中收集的这篇文章主要介绍Windows内核学习笔记(一)--浅谈驱动对象、设备对象与请求,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

      最近在学习Windows内核编程,同时也接触到了一些驱动的概念,其中有一些概念让人比较容易混淆,所以就写了这篇文章发表一下自己的看法:

      首先,谈谈驱动对象(DRIVER_OBJECT),可以说驱动对象代表的是一个驱动程序(或者叫内核模块)。在写内核程序时,必须要填写这样一种结构,来告诉Windows程序提供的功能。内核程序并不生成进程,它们有系统的System进程加载,可以存在于任何的进程。

      设备对象(DEVICE_OBJECT)可以是一个具体的物理设备,如:键盘、硬盘等;也可以是一个虚拟的“设备”,如:用于进程间通信的管道。设备对象由驱动对象创建,一个驱动对象可以创建很多个设备对象。这些设备对象储存在一个设备栈中,这些设备对象是用链表连接在一起的,当新的设备对象产生时应该是用的尾插入(和人理解)。

      对于请求,我们可以理解为Windows SDK程序设计里的消息。一般都是以IRP方式传递的。而设备对象是唯一可以接受请求的实体。然而一个驱动对象中可能会有很多个设备对象,那么是由哪一个设备对象来处理呢?

我的理解是:就像MFC中的消息传递机制一样,会有一个消息的接收顺序;IRP请求也是这样,它先发送到设备栈中最上面的一个设备(最新加入),没有被处理就继续向下发送,如果到最后都还是没有被处理,我认为会有一个默认的处理。

      这就是我对这几个概念的理解,如有不正确的地方,欢迎大家批评指正!

 

最后

以上就是鲤鱼睫毛为你收集整理的Windows内核学习笔记(一)--浅谈驱动对象、设备对象与请求的全部内容,希望文章能够帮你解决Windows内核学习笔记(一)--浅谈驱动对象、设备对象与请求所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部