这是NTDDK.h中的原型:
typedef struct _DEVOBJ_EXTENSION {
CSHORT Type;
USHORT Size;
//
// Public part of the DeviceObjectExtension structure,
//
PDEVICE_OBJECT DeviceObject; // owning device object
} DEVOBJ_EXTENSION, *PDEVOBJ_EXTENSION;
例如:
typedef struct _DEVICE_EXTENSION { //自定义结构
PDEVICE_OBJECT pDevice;
UNICODE_STRING ustrDeviceName; //设备名称
UNICODE_STRING ustrSymLinkName; //符号链接名
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
PDEVICE_EXTENSION pDevExt; //自定义结构的指针
pDevExt = (PDEVICE_EXTENSION)pDevObj->DeviceExtension;//将设备的扩展结构转为自定义结构类型,将指针赋于pDevExt
pDevExt->pDevice = pDevObj; //修改自定义结构成员
可以看出,扩展结构这样就可以变为自定义结构,可以任由程序员可以定义结构并填充。
但是结构大小呢?总不能任由程序员自定义很长的结构吧。而这一切又是如何控制的呢?
起先,以为是把原型都覆盖掉,那岂不是连大小都覆盖?
后来看到DDK这一句注释:// Public part of the DeviceObjectExtension structure,
似乎有些明白,可能DDK定义只有后面这部分是公开的,而前两个段是私有的,所以并不会覆盖到Size及Type.
而在程序员改变为自己的结构后,DDK会自动填充Size及Type。
这样才能控制程序员的自定义结构,来操控设备.
至于是不是这样,还请经过的大牛们指点。