对于DEVOBJ

    技术2022-05-19  27

    这是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。

    这样才能控制程序员的自定义结构,来操控设备.

    至于是不是这样,还请经过的大牛们指点。


    最新回复(0)