几个驱动重要的结构

原创 2008年10月03日 15:25:00
DEVICE_OBJECT:
  1. typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) _DEVICE_OBJECT {
  2.     CSHORT Type;
  3.     USHORT Size;
  4.     LONG ReferenceCount;
  5.     struct _DRIVER_OBJECT *DriverObject;
  6.     struct _DEVICE_OBJECT *NextDevice;
  7.     struct _DEVICE_OBJECT *AttachedDevice;
  8.     struct _IRP *CurrentIrp;
  9.     PIO_TIMER Timer;
  10.     ULONG Flags;                                // See above:  DO_...
  11.     ULONG Characteristics;                      // See ntioapi:  FILE_...
  12.     __volatile PVPB Vpb;
  13.     PVOID DeviceExtension;
  14.     DEVICE_TYPE DeviceType;
  15.     CCHAR StackSize;
  16.     union {
  17.         LIST_ENTRY ListEntry;
  18.         WAIT_CONTEXT_BLOCK Wcb;
  19.     } Queue;
  20.     ULONG AlignmentRequirement;
  21.     KDEVICE_QUEUE DeviceQueue;
  22.     KDPC Dpc;
  23.     //
  24.     //  The following field is for exclusive use by the filesystem to keep
  25.     //  track of the number of Fsp threads currently using the device
  26.     //
  27.     ULONG ActiveThreadCount;
  28.     PSECURITY_DESCRIPTOR SecurityDescriptor;
  29.     KEVENT DeviceLock;
  30.     USHORT SectorSize;
  31.     USHORT Spare1;
  32.     struct _DEVOBJ_EXTENSION  *DeviceObjectExtension;
  33.     PVOID  Reserved;
  34. } DEVICE_OBJECT;
  35. typedef struct _DEVICE_OBJECT *PDEVICE_OBJECT;
DRIVER_OBJECT:
  1. typedef struct _DRIVER_OBJECT {
  2.     CSHORT Type;
  3.     CSHORT Size;
  4.     //
  5.     // The following links all of the devices created by a single driver
  6.     // together on a list, and the Flags word provides an extensible flag
  7.     // location for driver objects.
  8.     //
  9.     PDEVICE_OBJECT DeviceObject;
  10.     ULONG Flags;
  11.     //
  12.     // The following section describes where the driver is loaded.  The count
  13.     // field is used to count the number of times the driver has had its
  14.     // registered reinitialization routine invoked.
  15.     //
  16.     PVOID DriverStart;
  17.     ULONG DriverSize;
  18.     PVOID DriverSection;
  19.     PDRIVER_EXTENSION DriverExtension;
  20.     //
  21.     // The driver name field is used by the error log thread
  22.     // determine the name of the driver that an I/O request is/was bound.
  23.     //
  24.     UNICODE_STRING DriverName;
  25.     //
  26.     // The following section is for registry support.  Thise is a pointer
  27.     // to the path to the hardware information in the registry
  28.     //
  29.     PUNICODE_STRING HardwareDatabase;
  30.     //
  31.     // The following section contains the optional pointer to an array of
  32.     // alternate entry points to a driver for "fast I/O" support.  Fast I/O
  33.     // is performed by invoking the driver routine directly with separate
  34.     // parameters, rather than using the standard IRP call mechanism.  Note
  35.     // that these functions may only be used for synchronous I/O, and when
  36.     // the file is cached.
  37.     //
  38.     PFAST_IO_DISPATCH FastIoDispatch;
  39.     //
  40.     // The following section describes the entry points to this particular
  41.     // driver.  Note that the major function dispatch table must be the last
  42.     // field in the object so that it remains extensible.
  43.     //
  44.     PDRIVER_INITIALIZE DriverInit;
  45.     PDRIVER_STARTIO DriverStartIo;
  46.     PDRIVER_UNLOAD DriverUnload;
  47.     PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1];
  48. } DRIVER_OBJECT;
  49. typedef struct _DRIVER_OBJECT *PDRIVER_OBJECT; 
UNICODE_STRING:
  1. typedef struct _UNICODE_STRING {
  2.     USHORT Length;
  3.     USHORT MaximumLength;
  4. #ifdef MIDL_PASS
  5.     [size_is(MaximumLength / 2), length_is((Length) / 2) ] USHORT * Buffer;
  6. #else // MIDL_PASS
  7.     __field_bcount_part(MaximumLength, Length) PWCH   Buffer;
  8. #endif // MIDL_PASS
  9. } UNICODE_STRING;
  10. typedef UNICODE_STRING *PUNICODE_STRING;
  11. typedef const UNICODE_STRING *PCUNICODE_STRING;
  12. #define UNICODE_NULL ((WCHAR)0) // winnt

几个比较重要的设计模式的总结与应用

1. 设计模式分为创建型,结构型,行为型。   2. 创建型 2.1 工厂方法。生产同一接口的不同产品。 如:Spring Aop中AopProxyFactory(具体实现类为Defaul...
  • sum_rain
  • sum_rain
  • 2015年05月04日 22:24
  • 1517

几个重要结构

typedef struct _KPCR {   KPCR_TIB   Tib;          /* 00 */   struct _KPCR   *Self;       /* 1C */  s...
  • iiprogram
  • iiprogram
  • 2008年03月22日 10:08
  • 564

struts 中常用的几个类

ActionMapping类将特定请求映射到特定Action的相关信息存储在 ActionMapping中,ActionServelt将ActionMapping传送到Action类的execute(...
  • gaojie0802
  • gaojie0802
  • 2007年07月13日 08:52
  • 499

C++中几个重要的概念(一)

我们先来读一小段代码吧,从而引出几个概念: template class PFArray { public: PFArray(); PFArray(int capacityValue ); P...
  • cyongxue
  • cyongxue
  • 2013年11月26日 11:08
  • 1302

几个重要等价无穷小的证明

其他等价无穷小的证明会陆续发表在该博文中。。。。。
  • kuaisuzhuceh
  • kuaisuzhuceh
  • 2013年02月03日 12:15
  • 2168

关于操作系统的几个重要概念(四)

Windows内存管理方式:段式存储,页式存储,段页式存储
  • orekinana
  • orekinana
  • 2017年03月10日 10:22
  • 226

Spring面试题整理

2、 Spring的Bean有多种作用域,包括: singleton、prototype、request、session、global session、application、自定义...
  • u011934553
  • u011934553
  • 2014年10月04日 10:51
  • 727

MyBatis一些基本的概念

前言这篇文章参考了《MyBatis3开发文档》记录了初学时碰到的一些问题
  • sgls652709
  • sgls652709
  • 2015年10月19日 22:50
  • 709

几个重要windows驱动函数分析

1.  AFX_MANAGE_STATE(AfxGetStaticModuleState())    动态链接到MFC的规则DLL应用程序里头的输出函数可以被任意Win32程序使用,包括使用MFC的...
  • mish84
  • mish84
  • 2015年11月17日 15:21
  • 437

JDBC总结03-几个重要接口

三、几个重要接口:  (1) Statement —— SQL 语句执行接口      Statement 接口代表了一个数据库的状态,在向数据库发送相应的 SQL 语句时,都需要  创建 St...
  • hjf19790118
  • hjf19790118
  • 2011年12月04日 22:04
  • 256
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:几个驱动重要的结构
举报原因:
原因补充:

(最多只允许输入30个字)