Windows驱动 INF文件

参考一:百度百科

参考二:INF文件的节

参考三:wikipedia

参考四:MSDN: INF File

INF文件的节

INF文件是一个文本文件,由许多按层次结构排列的节组成,他们以方括号中的节名称开始,如[Version]、[Manufacturer]等,后面是改接所含有的各个项,如Signature、DriverVer等。节中各项的基本定义格式为

entry=value[,value…]

其中,“entry”标示项名称,“value”标示该想的取值。节名和项名称都不区分大小写,且对于Windows 98,其必须小于28个字符;对于Windows 2000,其长度的最大值为255个字节。下表是INF文件中常用的节。

INF文件中常用的节



说明


Version


INF文件的开始


SourceDisksNames


指明去的那个程序所在的磁盘或CD-ROM


SourceDisksFiles


指明驱动程序的文件名


Destination


指明INF文件和驱动程序的目标文件


Manufacturer


指明供应商及其对应Models节的名称


Models


指明Install/DDInstall节的名称、设备的硬件ID等信息


Install(Windows 98)

Install(Windows 2000)


指明需复制的文件、想注册表中添加的内容等信息


DDInstall.Services

仅适用于Windows 2000


指明驱动程序安装的详细信息


String


指明一系列字符串

1Version节

Version节通常作为INF文件的开始,下表列出了其包含的各项。所有INF文件都必须含有Version节及其Signature项

Version节中的各项



说明


Signature


指明驱动程序的签名,其取值为:$Windows NT$、$Windows 95$、$Chicago$、


Class


指明驱动程序所属的类别


ClassGuid


指明设备类的GUID,其格式为:{nnnnnnnn-nnnn-nnnn-nnnnnnnnnnnn}


Provider


指明该INF文件的供应商


LayoutFile


仅由操作系统内部提供的INF文件使用


CatalogFile


指明数字签名文件的文件名,其扩展名为.cat


DriverVer


指明驱动程序的版本信息,其格式为:mm/dd/yyyy[,x.y.v.z]


注:①n代表一个16进制数

下面对主要的各项进行详细介绍。

①.Signature项:指明驱动程序的签名。对于Windows 98和Windows 2000下的USB设备驱动程序,该项的取值通常为“$Chicago$”。

②.Class和ClassGuid项:指明驱动程序所属的设备类别及其GUID,其取值情况见下表。

常用设备类别及其GUID


Class


ClassGuid


说明


1394


6BDD1FC1-810F-11D0-BEC7-08002BE2092F


1394主控制器


CDROM


4D36E965-E325-11CE-BFC1-08002BE10318


CD-ROM驱动器


DiskDrive


4D36E967-E325-11CE-BFC1-08002BE10318


磁盘驱动器


Display


4D36E968-E325-11CE-BFC1-08002BE10318


显示适配器


FDC


4D36E969-E325-11CE-BFC1-08002BE10318


软盘驱动器


HDC


4D36E96A-E325-11CE-BFC1-08002BE10318


硬盘控制器


HIDClass


745a17a0-74d3-11d0-b6fe-00a0c90f57da


人机接口设备


Keyboard


4D36E96B-E325-11CE-BFC1-08002BE10318


键盘


Modem


4d36e96c-e325-11ce-bfc1-08002be10318


调制解调器


Monitor


4d36e96e-e325-11ce-bfc1-08002be10318


监视器


Mouse


4d36e96f-e325-11ce-bfc1-08002be10318


鼠标


Net


4d36e972-e325-11ce-bfc1-08002be10318


网络适配器


Ports


4d36e978-e325-11ce-bfc1-08002be10318


端口(COM&LPT)


Printer


4d36e979-e325-11ce-bfc1-08002be10318


打印机


System


4d36e97d-e325-11ce-bfc1-08002be10318


系统设备


TapeDrive


6D807884-7D21-11CF-801C-08002BE10318


磁带驱动器


USB


36FC9E60-C465-11CF-8056-444553540000


USB

③.DriverVer项:指明驱动程序的版本信息。其“mm/dd/yyyy”代表月/日/年;“x.y.v.z”代表驱动程序的版本号,它是可选的。

2.SourceDisksNames节

SourceDisksNames节指明设备驱动程序所在的磁盘或CD-ROM,其各项的格式如下:

diskid=disk-description,disk-label,disk-serial-number   (Windows 98)

diskid=disk-description[,[tagfile][,unused,path]]  (Windows 2000)

其中,“disked”指出磁盘驱动器的编号,它是正整型数,通常从1开始,且不能重复;“disk-description”表示磁盘的描述信息,他通常为一个字符串。对于Windows 98,“disk-label”指出磁盘的卷标;“disk-serial-numbe”指出磁盘的序列号。对于Windows 2000,“tagfile”指出磁盘标签文件的文件名;“unused”保留未用;“path”指出驱动程序所在的路径;“[ ]”表示可选参数。

3.SourceDisksFiles节

SourceDisksFiles节指明设备驱动程序的文件全路径,其各项格式如下:

filename=diskid[,subdir] (Windows 98)

filename=diskid[,[,subdir][,size]]   (Windows 2000)

其中,“filename”指出驱动程序的文件名;“diskid”指出磁盘驱动器的编号;“subdir”指出该文件在磁盘上的路径;“size”指出该文件未经压缩时的大小,以字节为单位。

4.DestinationDirs节

DestinationDirs节指明INF文件和设备驱动程序的目标目录。当INF文件使用CopyFiles、DelFiles、RenFiles指令时,则必须包含该节。其各项的格式如下:

DefaultDestDir=dirid[,subdir]

File-list-section=dirid[,subdir]

其中,“DefaultDestDir”是一个项名称,代表文件复制、删除、重命名操作的缺色很难干目标目录;“file-list-section”指出CopyFiles、DelFiles、RenFiles指令所引用的节;“dirid”指出目标目录值,见下表;“subdir”指出dirid目录下的子目录。

DestinationDirs节中的常用dirid


dirid


目标目录


dirid


目标目录


10


Windows目录:%windir%


17


INF目录


11


系统目录

Windows 98:%windir%/system

Windows 2000:%windir%/system32


18


帮助目录


20


字体目录


12


驱动程序目录

Windows 98:%windir%/system/IoSubsys

Windows 2000:%windir%/system32/drivers


23


颜色目录


24


应用程序目录(Windows2000)


13


命令目录(Windows98)


25


共享目录


14


控制面板目录(Windows98)


50


%windir%/system(Windows2000)


15


打印机目录(Windows98)


54


Ntldr.exe和osloader.exe所在的目录(Windows2000)


16


工作组目录(Windows98)


55


打印处理器目录(Windows2000)

5.Manufacturer节

Manufacturer节指明供应商及其对应Models接的名称,其各项的格式如下:

%strkey%=models-section-name

其中,“strkey”代表设备制造的名字,其字符串值在String节中定义;“models-section-name”指出Models节的名称。

6.Models节

Models节指明Install/DDInstall节的名称、设备的硬件ID和兼容ID等信息,其节名称由Manufacturer节指定。其各项的格式如下:

device-description=install-section-name,hw-id[,compatiable-id…]

其中,“device-description”指出设备的表述信息,他可以是一个字符串,也可以使一个%strkey%;“install-section-name”指出Install/DDInstall节的名称;“hw-id”指出设备的硬件ID;“compatiable-id”指出设备的兼容ID。

7. Install/DDInstall节

Install/DDInstall节指明需复制的文件、想注册表中添加的内容等信息,其节名称由Models节指定。下表列出了其包含的常用项。

Install/DDInstall节中的常用项



说明


DriverVer


指明驱动程序的版本信息,格式为:mm/dd/yyyy[,x.y.z]


CopyFiles


指明需复制的文件,格式为:

[email protected]|file-list-section[,file-list-section]...


AddReg


指明向注册表中添加的其他INF文件按,格式为:

AddReg=add-registry-section[,add-registry-section]…


Include


指明安装时需要的其他INF文件,格式为:

Include=filename.inf[,filename2.inf]…


Needs


指明安装时所需的特定INF文件,格式为:

Needs=inf-section-name[,inf-section-name]…


Delfiles


指明需删除的文件,格式为:

Delfiles=inf-section-name[,inf-section-name]…


RenFiles


指明需重命名的文件,格式为:

Renfiles=inf-section-name[,inf-section-name]…


DelReg


指明需删除的注册表内容,格式为:

DelReg=del-registry-section[,del-registry-section]…

Install/DDInstall节中的常用项的详细介绍。

①     CopyFiles项:它是Install/DDInstall节中的一个基本指令,用于指明需要复制的文件。其“filename”指出目标文件名;“file-list-section”是其创建的文件列表节,该节格式为

[file-list-section]

destination-file-name[,source-file-name][,temporary-file-name][,flag]

其中,“destination-file-name”指出目标文件名;“source-file-name”指出源文件名,如果其和目标文件名相同,则可忽略该参数;“temporary-file-name”指出复制操作过程中所需要的临时文件名,他只适用于Windows 98;“flag”指出该文件的一些处理方法,其取之情况如下表。

CopyFiles项中的flag参数



符号


说明


0x00000400


COPYFLG_REPLACEONLY


仅替换目标目录中的文件


0x00000800


COPYFLG_NODECOMP


复制并不解压缩


0x00000008


COPYFLG_FORCE_FILE_IN_USE


将源文件赋值为临时文件名,以重新命名


0x00000010


COPYFLG_NO_OVERWRITE


不替换原有文件


0x00001000


COPYFLG_REPLACE_BOOT_FILE


强制用户重新引导系统


0x00002000


COPYFLG_NOPRUNE


强制复制文件


0x00000020


COPYFLG_NO_VERSION_DIALOG


不覆盖新版本的文件


0x00000004


COPYFLG_NOVERSIONCHECK


可覆盖任何版本的文件


0x00000040


COPYFLG_OVERWRITE_ORDER_ONLY


仅覆盖旧版本的文件


0x00000001


COPYFLG_WARN_IF_SKIP


当用户跳过文件时发出警告


0x00000002


COPYFLG_NOSKIP


不允许用户跳过文件

②     AddReg项:它是Install/DDInstall节所必须包含的指令,用于指明需项注册表中添加的内容。其“add-registry-section”是它创建的添加注册表节,该节的格式为

[add-registry-section]

reg-root, [subkey], [value-entry-name], [flags], [value]

其中,“reg-root”指出注册表树的根目录,它的取值在下表中;“subkey”指出reg-root下的子目录(或称子键);“value-entry-name”指出要增加的注册表值;“flags”指出其对注册表的一些处理方法,取值在下面的flags表中;“value”指出新增加注册表值的数据。

AddReg项中的reg-root参数



说明


HKCR


HKEY_CLASSES_ROOT


HKCU


HKEY_CURRENT_USER


HKLM


HKEY_LOCAL_MACHINE


HKU


HKEY_USER


HKR


被安装设备的注册表键

AddReg项中的flags参数



符号


说明


0x00000000


FLG_ADDREG_TYPE_SZ


value为REG_SZ类型


0x00000001


FLG_ADDREG_BINVALUETYPE


value为2进制数据


0x00000002


FLG_ADDREG_NOCLOBBER


不替换已有注册表中的value


0x00000004


FLG_ADDREG_DELVAL


从注册表中删除subkey或

value-entry-name


0x00000010


FLG_ADDREG_KEYONLY


仅建立subkey,忽略value-entry-name

和value


0x00000020


FLG_ADDREG_OVERWRITEONLY


仅当value-entry-name时替换value


0x00010000


FLG_ADDREG_TYPE_MULTI_SZ


value为REG_MULTI_SZ类型


0x00000008


FLG_ADDREG_APPEND


添加value至已有注册表值


0x00020000


FLG_ADDREG_TYPE_EXPEND_SZ


value为REG_EXPAND_SZ类型


0x00010001


FLG_ADDREG_TYPE_DWORD


value为REG_DWORD类型


0x00020001


FLG_ADDREG_TYPE_NONE


value为REG_NONE类型(Windows2000)

③     DelFiles项:它是Install/DDInstall节中的可选指令,用于指明需删除的文件。其“file-list-section”是它创建的文件列表节,该节的格式为

[file-list-section]

destination-file-name[,,,flag]

其中,“destination-file-name”指出目标文件名;“flag”指出该文件的一些处理方法,其取值如下表。

DelFiles项中的flag参数



符号


说明


0x0000001


DELFLG_IN_USE


在其安装处理操作完成后再删除该文件


0x0001000


DELFLG_IN_USE1


功能与DELFLG_IN_USE一样,仅适用Windows2000

④RenFiles项:它是Install/DDInstall节中的可选指令,用于指明需重命名的文件。其“file-list-section”是它创建的文件列表节,该节的格式为

[file-list-section]

new-dest-file-name, old-source-file-name

其中,“new-dest-file-name”指出该文件的新文件名;“old-source-file-name”指出其原有文件名。

⑤DelReg项:它是Install/DDInstall节中的可选指令,用于指明需从注册表中删除的内容。其“del-registry-section”是它创建的删除注册表节,该节的格式为

[del-registry-section]

reg-root, subkey [,value-entry-name]

其中,“reg-root”指出该注册表树中的根目录,取值与AddReg的ret-root相同; “subkey”指出reg-root下的子目录(或称子键);“value-entry-name”指出要删除的注册表值。

8.DDInstall.Services节

DDInstall.Services节指明驱动程序安装的详细信息,他只是用于Windows 2000.他的节名称为[install-section-name.Services],其“install-section-name”由Models节指定。下表列出了其包含的常用项。

DDInstall.Services节中的常用项



说明


AddService


控制驱动程序的安装过程,格式为

AddService=ServiceName,[flags],service-install-section

[,event-log-install-section[,[EventLogType][,EventName]]]…


DelService


删除一个或多个已有的驱动程序,格式为

DelService=ServiceName [,[flags][,[EventLogType][,EventName]]]…


Include


指明安装时所需的其他INF文件,格式为

Include =filename.inf [,filename2.inf]…


Needs


之敏感转世所需要的特定INF文件,格式为

Needs = inf-section-name[,inf-section-name]…

主要项进行详细介绍。

①     AddService项:它是DDInstall.Services节所必须包含的指令,用于控制设备驱动程序的安装过程。其“ServiceName”指出驱动程序的名字;“flags”指出一个或多个系统定义的标识,其取值情况如下表;“event-log-install-section”是其创建的事件日志安装,下表中列出了该节所包含的常用项;“service-install-section”是其创建的服务安装节,下表中列出了该节所包含的常用项;“EventLogType”指出事件日志的类型,其取值为System、Security和Application;“EventName”指出事件日志的名字。

AddService项的常用flags参数



符号


说明


0x00000002


SPSVCINST_ASSOCSERVICE


指明其为PnP功能驱动程序


0x00000008


SPSVCINST_NOCLOBBER_DISPLAYNAME


不覆盖指定服务的名字


0x00000100


SPSVCINST_NOCLOBBER_DESCRIPTION


不覆盖指定服务的描述


0x00000010


SPSVCINST_NOCLOBBER_STARTTYPE


不覆盖指定服务的启动类型


0x00000020


SPSVCINST_NOCLOBBER_ERRORCONTROL


不覆盖指定服务的差错控制值

event-log-install-section节中的常用项



说明


AddReg


指明向注册表中添加的内容,格式如下

AddReg=add-registry-section[,add-registry-section]…


DelReg


指明需删除的注册表内容,格式如下

DelReg=del-registry-section[,del-registry-section]…


BitReg


有效但几乎无用,格式如下

BitReg=bit-registry-section[,bit-registry-section]…


DisplayName


驱动程序的名字,为字符串值


Description


驱动程序的描述,为字符串值


ServiceType


驱动程序的类型,为特定16进制数


StartType


驱动程序的启动类型,为特定16进制数


ErrorControl


驱动程序的差错控制级别,为特定16进制数


ServiceBinary


驱动程序的完整路径名:%dirid% /filename

一下是对event-log-install-section节中的常用项的主要项进行详细介绍。

<1>ServiceType项:指明驱动程序的类型,取值情况如下表。

ServiceType项的取值



符号


说明


0x00000001


SERVICE_BOOT_START


内核模式驱动程序


0x00000002


SERVICE_KERNEL_FILE_SYSTEM_DRIVER


上层网络驱动程序或文件系统


0x00000010


SERVICE_WIN32_OWN_PROCESS


Win32应用程序


0x00000020


SERVICE_WIN32_SHARE_PROCESS


Win32应用程序

<2>StartType项:指明驱动程序的启动类型,其取值情况如下表。

StartType项的取值



符号


说明


0x0


SERVICE_BOOT_START


由操作系统加载程序启动


0x1


SERVICE_SYSTEM_START


由操作系统初始化过程中启动


0x2


SERVICE_AUTO_START


由服务控制管理器启动


0x3


SERVICE_DEMAND_START


由PnP管理器或服务控制管理器按需启动


0x4


SERVICE_DISABLE


禁止启动

<3>ErrorControl项:指明驱动程序的差错控制级别,其取值情况如下表。

ErrorControl项的取值



符号


说明


0x0


SERVICE_ERROR_IGNORE


不显示警告信息


0x1


SERVICE_ERROR_NORMAL


显示警告信息


0x2


SERVICE_ERROR_SERVICE


当驱动程序加载失败时,系统将使用其注册的LastKnownGood重试,并忽略其后的错误


0x3


SERVICE_ERROR_CRITICAL


当驱动程序加载失败时,系统将使用其注册的LastKnownGood重试,并对其后的错误进行检验

②     DelService项:它是DDInstall.Service节中的可选指令,用于删除一个或多个已有的设备驱动程序。其“ServiceName”指出驱动程序的名字;“flags”指出一个或多个系统定义的标识,取值见下表;“EventLogType”指出事件日志的类型,其取值为System、Security或Application;“EventName”指出事件日志的名字。

DelService项的flags参数


符号


说明


SPSVCINST_DELETEEVENTLOGENTRY


删除与ServiceName有关的事件日志


SPSVCINST_STOPSERVICE


在删除之前首先停止服务

9String节

String节指明一些列字符串,其所含各项的格式为

strkey=[“]some string[“]

其中,“strkey”指出字符串的名字,它只能包含字母和数字;“some string”为字符串的内容。

附上《windows驱动开发技术详解》的一个例子

;--------- Version Section ---------------------------------------------------

[Version]
Signature="$CHICAGO$";
Provider=Zhangfan_Device
DriverVer=11/1/2007,3.0.0.3

; If device fits one of the standard classes, use the name and GUID here,
; otherwise create your own device class and GUID as this example shows.

Class=ZhangfanDevice
ClassGUID={EF2962F0-0D55-4bff-B8AA-2221EE8A79B0}

;--------- SourceDiskNames and SourceDiskFiles Section -----------------------

; These sections identify source disks and files for installation. They are
; shown here as an example, but commented out.

[SourceDisksNames]
1 = "HelloWDM",Disk1,,

[SourceDisksFiles]
HelloWDM.sys = 1,MyDriver_Check,

;--------- ClassInstall/ClassInstall32 Section -------------------------------

; Not necessary if using a standard class

; 9X Style
[ClassInstall]
Addreg=Class_AddReg

; NT Style
[ClassInstall32]
Addreg=Class_AddReg

[Class_AddReg]
HKR,,,,%DeviceClassName%
HKR,,Icon,,"-5"

;--------- DestinationDirs Section -------------------------------------------

[DestinationDirs]
YouMark_Files_Driver = 10,System32\Drivers

;--------- Manufacturer and Models Sections ----------------------------------

[Manufacturer]
%MfgName%=Mfg0

[Mfg0]

; PCI hardware Ids use the form
; PCI\VEN_aaaa&DEV_bbbb&SUBSYS_cccccccc&REV_dd
;改成你自己的ID
%DeviceDesc%=YouMark_DDI, PCI\VEN_9999&DEV_9999

;---------- DDInstall Sections -----------------------------------------------
; --------- Windows 9X -----------------

; Experimentation has shown that DDInstall root names greater than 19 characters
; cause problems in Windows 98

[YouMark_DDI]
CopyFiles=YouMark_Files_Driver
AddReg=YouMark_9X_AddReg

[YouMark_9X_AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,HelloWDM.sys
HKR, "Parameters", "BreakOnEntry", 0x00010001, 0

; --------- Windows NT -----------------

[YouMark_DDI.NT]
CopyFiles=YouMark_Files_Driver
AddReg=YouMark_NT_AddReg

[YouMark_DDI.NT.Services]
Addservice = HelloWDM, 0x00000002, YouMark_AddService

[YouMark_AddService]
DisplayName = %SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %10%\System32\Drivers\HelloWDM.sys

[YouMark_NT_AddReg]
HKLM, "System\CurrentControlSet\Services\HelloWDM\Parameters","BreakOnEntry", 0x00010001, 0

; --------- Files (common) -------------

[YouMark_Files_Driver]
HelloWDM.sys

;--------- Strings Section ---------------------------------------------------

[Strings]
ProviderName="Zhangfan."
MfgName="Zhangfan Soft"
DeviceDesc="Hello World WDM!"
DeviceClassName="Zhangfan_Device"
SvcDesc="Zhangfan"
时间: 2024-10-15 09:02:49

Windows驱动 INF文件的相关文章

Windows驱动匹配详解

在Windows下,几乎所有的硬件设备都需要安装驱动后才能正常工作,我们重装系统后第一件事就是要为各设备安装好驱动,我们可以下载官方驱动手动安装,也可以让我Windows自动扫描安装,还可以使用驱动精灵.电脑管家之类的工具帮我们安装,为了发挥硬件设备最好的性能,我们还需要及时把驱动升级到最新的版本.那么,这些工具是如何为硬件设备匹配到最佳的驱动的呢?此文就这个问题一探究竟. 驱动匹配相关信息 设备都是通过hardware ID进行标识,一个设备一般有多个hardware ID和compatibl

active cab inf文件编写

最近做了一个网页下载控件.主要就是实现ActiveX控件功能. 由于自己是第一次做,不熟悉其过程.中间走了很多弯路.现在把走过得路程记录部分,希望对其他人可以有点用. 首先制作一个你自己的DLL文件.这里就不累述DLL的制作了.网上DLL的制作多的是.下面介绍下inf文件的写. 在自己弄的过程中在网络上也搜索了很多资料.但都不全面,甚至有错误.下面自己的一点心得和大家分享下: inf文件主要节点(也是我在制作中使用的节点,未使用到的我在此处也就没有发言权啦^_^): [Version] inf的

Windows驱动开发(中间层)

Windows驱动开发 一.前言 依据<Windows内核安全与驱动开发>及MSDN等网络质料进行学习开发. 二.初步环境 1.下载安装WDK7.1.0(WinDDK\7600.16385.1) 地址:https://msdn.microsoft.com/en-us/windows/hardware/hh852365 2.下载InstDrv软件(用于安装.启动.停止.卸载驱动) 界面如下: 注:srvinstw.exe 也可以安装.卸载sys文件,但需要手动开启.关闭,即在cmd命令窗口下执行

Windows 驱动开发 - 8

最后的一点开发工作:跟踪驱动. 一.驱动跟踪 1. 包含TMH头文件 #include "step5.tmh" 2. 初始化跟踪 在DriverEntry中初始化. WPP_INIT_TRACING( DriverObject, RegistryPath ); WDF_OBJECT_ATTRIBUTES_INIT(&attributes); attributes.EvtCleanupCallback = EvtDriverContextCleanup; (1) WPP跟踪初始化

windows驱动完整卸载的流程(解决卸载后,重新扫描或重启后,驱动仍然出现的问题)

彻底卸载的流程 1.删除C:\windows\inf\oem.inf路径下的所有oem文件 2.删除c:\windows\system32\drivers路径下对应的sys文件 3.(重要) 第一步:使用PsExec.exe 获取对注册表的administrator访问权限,PsExec.exe 下载地址  http://technet.microsoft.com/en-us/sysinternals/bb897553 将PsExec.exe放入c:\windows\system32路径下,然后

INF文件

百科:http://baike.baidu.com/view/637107.htm?fr=ala0_1_1 INF简介 INF是Device INFormation File的英文缩写,是Microsoft公司为硬件设备制造商发布其驱动程序推出的一种文件格式,是Windows操作系统下用来描述设备或文件等数据 信息的文件.INF文件是由标准的ASCII码组成,您可以用任何一款文字编辑器查看修改其中的内容.一般我们总是认为INF文件是系统设备的驱动程序, 其实这是错误的认识,Windows之所以在

[windows驱动]基本概念

https://msdn.microsoft.com/zh-cn/library/windows/hardware/ff554721 1.设备节点和设备堆栈 在windows中,设备通过即插即用设备树中的设备节点表示.典型地,当设备接受到一个I/O请求,数个驱动帮忙处理这个请求,这些驱动各自与一个设备对象相关,这些设备对象在堆栈中有序排列.一个设备对象序列以及它们各自相关的驱动称为设备堆栈.每个设备节点拥有一个它们自己的设备堆栈. 1.2.设备对象和设备堆栈 一个设备对象是一个DEVICE_OB

Windows驱动开发(一)

笔者学习驱动编程是从两本书入门的.它们分别是<寒江独钓--内核安全编程>和<Windows驱动开发技术详解>.两本书分别从不同的角度介绍了驱动程序的制作方法. 在我理解,驱动程序可分为两类三种: 第一类:传统型驱动 传统型驱动的特点就是所有的IRP都需要自己去处理,自己实现针对不同IRP的派发函数.其可以分为以下两种: 1. Nt式驱动:此驱动通过注册系统服务来加载,并且不支持即插即用功能(即没有处理IRP_MJ_PNP这个IRP). 2. WDM驱动:此驱动不通过注册系统服务来加

【原创】《windows驱动开发技术详解》第4章实验总结二

1 实验要求(WDM驱动)   2 编写过程 2.1 确立整体架构 2.1.1 入口函数——DriverEntry (1)作用 设置pDriverObject结构体,注册AddDevice和相关PNP函数,包括IRP_MJ_PNP,IRP_MJ_CREATE等 (2)注意 AddDevice在Driver_Object结构体的DriverExtension->AddDevice,原型是NTSTATUS AddDevice (PDRIVER_OBJECT pDriverObject, PDEVIC