驱动开发3WDM 驱动程序的基本.pdf
《驱动开发3WDM 驱动程序的基本.pdf》由会员分享,可在线阅读,更多相关《驱动开发3WDM 驱动程序的基本.pdf(65页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、WDMWDM驱动程序的基本驱动程序的基本驱动程序的基本驱动程序的基本结构结构结构结构内容内容内容内容?两个基本的数据结构两个基本的数据结构?两个例程两个例程两个基本的数据结构:两个基本的数据结构:两个基本的数据结构:两个基本的数据结构:?WDMWDM驱动程序里面的两个基本的数据结驱动程序里面的两个基本的数据结构:驱动程序对象和设备对象构:驱动程序对象和设备对象?C+C+中的方法,成员中的方法,成员?LinuxLinux中中两个基本的数据结构:两个基本的数据结构:两个基本的数据结构:两个基本的数据结构:?驱动程序对象代表着这个驱动程序,它包驱动程序对象代表着这个驱动程序,它包含指向驱动程序各个分
2、发例程的指针,以含指向驱动程序各个分发例程的指针,以供操作系统在合适的时候调用供操作系统在合适的时候调用?设备对象是一个硬件设备的具体实例,保设备对象是一个硬件设备的具体实例,保存有关这个设备的数据。存有关这个设备的数据。?一个驱动程序可以产生多个设备对象,每一个驱动程序可以产生多个设备对象,每个设备对象都有自己特定的数据,但是这个设备对象都有自己特定的数据,但是这些设备使用的都是驱动程序对象里面包含些设备使用的都是驱动程序对象里面包含的同一组例程。的同一组例程。驱动程序对象驱动程序对象驱动程序对象驱动程序对象?I/OI/O管理器用一个驱动程序对象来代表每一个设备管理器用一个驱动程序对象来代表
3、每一个设备驱动程序驱动程序?驱动程序对象对我们来说就是一个大的数据结构驱动程序对象对我们来说就是一个大的数据结构?并不是每一个数据成员我们都能访问,有一些数并不是每一个数据成员我们都能访问,有一些数据成员是系统使用的,我们不能进行操作据成员是系统使用的,我们不能进行操作?驱动程序设计的时候,会遇到更多的像这样的,驱动程序设计的时候,会遇到更多的像这样的,我们不能直接操作其所有的数据成员的对象,比我们不能直接操作其所有的数据成员的对象,比如设备对象和如设备对象和IRPIRP对象等等。对象等等。驱动程序对象驱动程序对象驱动程序对象驱动程序对象?DDKDDK中驱动程序对象的定义是这样的:中驱动程序对
4、象的定义是这样的:?typedeftypedef structstruct _DRIVER_OBJECT_DRIVER_OBJECT?CSHORTCSHORT Type;Type;?CSHORTCSHORT Size;Size;?DRIVER_OBJECT,DRIVER_OBJECT,*PDRIVER_OBJECT;*PDRIVER_OBJECT;?具体的各个成员如下图所示,里面的灰色成员表具体的各个成员如下图所示,里面的灰色成员表示我们不能直接访问,就像示我们不能直接访问,就像C+C+中的私有成员一中的私有成员一样。样。驱动程序对象各个成员介绍驱动程序对象各个成员介绍驱动程序对象各个成员介绍
5、驱动程序对象各个成员介绍?DeviceObjectDeviceObject(PDEVICE_OBJECT)(PDEVICE_OBJECT)成员是一成员是一个这个驱动程序产生所有设备个这个驱动程序产生所有设备对象的连接,通过这个指针,对象的连接,通过这个指针,驱动程序维护所有它产生的所驱动程序维护所有它产生的所有设备对象。有设备对象。?DriverExtensionDriverExtension(PDRIVER_EXTENSION)(PDRIVER_EXTENSION)成员成员所指向的数据结构只有一个成所指向的数据结构只有一个成员我们可以访问。就是员我们可以访问。就是AddDeviceAddDe
6、vice,它指向我们驱动程,它指向我们驱动程序的一个非常重要的序的一个非常重要的AddDeviceAddDevice例程,后面会介绍。例程,后面会介绍。DriverExtensionDriverExtension成员成员成员成员驱动程序对象驱动程序对象驱动程序对象驱动程序对象?HardwareDatabaseHardwareDatabase(PUNICODE_STRING)(PUNICODE_STRING)是一个是一个表示注册表中路径的字符串,表示注册表中路径的字符串,类似类似 RegistryRegistry MachineMachine HardwareHardware DeDescrip
7、tionscription SystemSystem。在这个路径。在这个路径下,存放系统给设备分配的资下,存放系统给设备分配的资源,在源,在WDMWDM驱动程序中,驱动程序中,PnPPnP管理器会把资源传递给驱动程管理器会把资源传递给驱动程序,所以,驱动程序中没必要序,所以,驱动程序中没必要直接访问这个成员。注意这个直接访问这个成员。注意这个字符串是字符串是UNICODE_STRING,UNICODE_STRING,其实内核中所有的字符都是用其实内核中所有的字符都是用UnicodeUnicode表示,后面会介绍表示,后面会介绍UNICODE_STRINGUNICODE_STRING和相关的函和
8、相关的函数数驱动程序对象驱动程序对象驱动程序对象驱动程序对象?FastIoDispatchFastIoDispatch(PFAST_IO_DISPATCH)(PFAST_IO_DISPATCH)是是一个指向一个函数指针表一个指向一个函数指针表的指针,这通常是在文件的指针,这通常是在文件系统和网络驱动中使用。系统和网络驱动中使用。?DriverStartIoDriverStartIo(PDRIVER_STARTIO)(PDRIVER_STARTIO)是一是一个指向驱动程序中的一个个指向驱动程序中的一个函数的指针,这个函数是函数的指针,这个函数是为了串行化对硬件的访为了串行化对硬件的访问,后面会介
9、绍。问,后面会介绍。驱动程序对象驱动程序对象驱动程序对象驱动程序对象?DriverUnloadDriverUnload(PDRIVER_UNLOAD)(PDRIVER_UNLOAD)是是一个指向驱动程序的卸载一个指向驱动程序的卸载例程的指针。在例程的指针。在WDMWDM驱动驱动程序中,可以不提供这个程序中,可以不提供这个例程。例程。?MajorFunctionMajorFunction(PDRIVER_DISPATCH(PDRIVER_DISPATCH数数组组)指向驱动程序中的主要指向驱动程序中的主要的处理用户请求的例程,的处理用户请求的例程,我们的主要工作就是写这我们的主要工作就是写这个指针
10、数组里面各个指针个指针数组里面各个指针指向的函数。指向的函数。设备对象设备对象设备对象设备对象?作为一个作为一个WDMWDM驱动程序的编写者,可能要驱动程序的编写者,可能要在驱动程序里面调用在驱动程序里面调用IoCreateDeviceIoCreateDevice创建一创建一个或者多个设备对象个或者多个设备对象?每一个设备对象对应一个具体设备每一个设备对象对应一个具体设备?下页的图描述了设备对象,同样,里面的下页的图描述了设备对象,同样,里面的灰色字段表示驱动程序不能直接访问的成灰色字段表示驱动程序不能直接访问的成员员设备对象设备对象设备对象设备对象?DriverObjectDriverObj
11、ect(PDRIVER_OBJECT)(PDRIVER_OBJECT)指向代表创建这个设指向代表创建这个设备的那个驱动程序的备的那个驱动程序的驱动程序对象。驱动程序对象。?NextDeviceNextDevice(PDEVICE_OBJECT)(PDEVICE_OBJECT)指向同一个驱动程序指向同一个驱动程序创建的下一个设备对创建的下一个设备对象。象。设备对象设备对象设备对象设备对象?CurrentIrpCurrentIrp(PIRP)(PIRP)通常通常被被IRPIRP排队例程排队例程StartPacketStartPacket 和和StartNextPacketStartNextPack
12、et使用,使用,它表示最近发送到驱它表示最近发送到驱动程序的动程序的StartIoStartIo例程的例程的那个那个IRPIRP?Flags(ULONG)Flags(ULONG)包含一包含一组的标志位。下页的组的标志位。下页的表列出了驱动程序能表列出了驱动程序能够访问的标志够访问的标志FlagDescriptionDO_BUFFERED_IO Reads and writes use the buffered method(system copy buffer)for accessing user-mode data.DO_EXCLUSIVE Only one thread at a time
13、 is allowed to open a-handle.DO_DIRECT_IO Reads and writes use the direct method(memory descriptor list)for accessing user-mode data.DO_DEVICE_INITIALIZING Device object isnt initialized yet.DO_POWER_PAGABLE IRP_MJ_PNP must be handled at PASSIVE_LEVEL.DO_POWER_INRUSH Device requires large inrush of
14、current during power-on.设备对象设备对象设备对象设备对象?Characteristics(ULONG)Characteristics(ULONG)是另外一组可选的标是另外一组可选的标志位,它由志位,它由I/OI/O管理器管理器根据驱动程序调用根据驱动程序调用IoCreateDeviceIoCreateDevice时的一时的一个参数来初始化。个参数来初始化。?下页的表列出了这些下页的表列出了这些标志的意义标志的意义FlagDescriptionFILE_REMOVABLE_MEDIA Media can be removed from device.FILE_READ_O
15、NLY_DEVICE Media can only be read,not written.FILE_FLOPPY_DISKETTE Device is a floppy disk drive.FILE_WRITE_ONCE_MEDIA Media can be written once.FILE_REMOTE_DEVICE Device accessible through network-connection.FILE_DEVICE_IS_MOUNTED Physical media is present in device.FILE_VIRTUAL_VOLUME This is a vi
16、rtual volume.FILE_AUTOGENERATED_DEVICE_NAME I/O Manager should automatically-generate a name for this device.FILE_DEVICE_SECURE_OPEN Force security check during open.设备对象设备对象设备对象设备对象?DeviceExtensionDeviceExtension(PVOID)(PVOID)指向驱动程序编写者自定指向驱动程序编写者自定义的一个结构,这个结构义的一个结构,这个结构保存每个设备的特定信保存每个设备的特定信息。这个结构可能是
17、在驱息。这个结构可能是在驱动程序中使用最多的结动程序中使用最多的结构。构。?DeviceTypeDeviceType(DEVICE_TYPE)(DEVICE_TYPE)表示设备表示设备类型,它由类型,它由I/OI/O管理器根管理器根据驱动程序调用据驱动程序调用IoCreateDeviceIoCreateDevice时的一个参时的一个参数来初始化。数来初始化。设备对象设备对象设备对象设备对象?StackSizeStackSize(CCHAR)(CCHAR)表示表示驱动程序设备栈中的驱动程序设备栈中的设备个数,包括功能设备个数,包括功能设备对象,过滤器设设备对象,过滤器设备对象,物理设备对备对象,
18、物理设备对象等。主要是为了通象等。主要是为了通知知IRPIRP的创建者需要为的创建者需要为IRPIRP分配多少个堆栈位分配多少个堆栈位置。置。设备对象设备对象设备对象设备对象?AlignmentRequirementAlignmentRequirement(ULONG)(ULONG)指明读写设备时指明读写设备时数据如何对齐,如数据如何对齐,如FILE_BYTE_ALIGNMENFILE_BYTE_ALIGNMENT T,FILE_512_BYTE_ALIGNFILE_512_BYTE_ALIGNMENTMENT。它的数值时。它的数值时2 2的的x x幂减幂减1 1,例如,例如0 x3F 0 x
19、3F 表示表示FILE_64_BYTE_ALIGNMFILE_64_BYTE_ALIGNMENTENT。驱动程序中的数据类型驱动程序中的数据类型驱动程序中的数据类型驱动程序中的数据类型?PVOID,PVOID64PVOID,PVOID64Generic pointers(default precision and 64Generic pointers(default precision and 64-bit bit-precision)precision)?NTAPI Used with service function declarations NTAPI Used with service
20、 function declarations to force use of _to force use of _stdcallstdcall calling convention on calling convention on i86 architecturesi86 architectures?VOID Equivalent to VOID Equivalent to“voidvoid”驱动程序中的数据类型驱动程序中的数据类型驱动程序中的数据类型驱动程序中的数据类型?CHAR,PCHARCHAR,PCHAR8 8-bit character,pointer to same(signed
21、or not bit character,pointer to same(signed or not-according to compiler default)according to compiler default)?UCHAR,PUCHARUCHAR,PUCHARUnsigned 8Unsigned 8-bit character,pointer to samebit character,pointer to same?SCHAR,PSCHARSCHAR,PSCHARSigned 8Signed 8-bit character,pointer to samebit character,
22、pointer to same驱动程序中的数据类型驱动程序中的数据类型驱动程序中的数据类型驱动程序中的数据类型?SHORT,PSHORT Signed 16SHORT,PSHORT Signed 16-bit integer,bit integer,pointer to samepointer to same?CSHORT Signed short integer,used as a CSHORT Signed short integer,used as a cardinal numbercardinal number?USHORT,PUSHORT Unsigned 16USHORT,PUSH
23、ORT Unsigned 16-bit integer,bit integer,pointer to samepointer to same驱动程序中的数据类型驱动程序中的数据类型驱动程序中的数据类型驱动程序中的数据类型?LONG,PLONG Signed 32LONG,PLONG Signed 32-bit integer,pointer bit integer,pointer to sameto same?ULONG,PULONG Unsigned 32ULONG,PULONG Unsigned 32-bit integer,bit integer,pointer to samepoint
24、er to same?WCHAR,PWSTR,PWCHAR Wide(Unicode)WCHAR,PWSTR,PWCHAR Wide(Unicode)character or string character or string?PCWSTR Pointer to constant Unicode PCWSTR Pointer to constant Unicode stringNTSTATUSstringNTSTATUS驱动程序中的数据类型驱动程序中的数据类型驱动程序中的数据类型驱动程序中的数据类型?NTSTATUS Status code(typed as signed long NTST
25、ATUS Status code(typed as signed long integer)integer)?LARGE_INTEGER Signed 64LARGE_INTEGER Signed 64-bit integer bit integer?ULARGE_INTEGER Unsigned 64ULARGE_INTEGER Unsigned 64-bit integerbit integer?PSZ,PCSZ Pointer to ASCIIZ(singlePSZ,PCSZ Pointer to ASCIIZ(single-byte)byte)string or constant st
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 驱动开发3WDM 驱动程序的基本 驱动 开发 WDM 驱动程序 基本
限制150内