驱动程序对象和设备程序对象

    技术2022-05-20  47

    DRIVER_OBJECT是驱动程序在内核中的数据结构,每个驱动程序有唯一DRIVER_OBJECT,IO管理器使用驱动程序对象代表每个设备驱动程序,驱动程序对象有一个DeviceObject域指向一个设备对象链表,每个设备对象代表一个设备。

    DEVICE_OBJECT是物理设备或逻辑设备在内核中的数据结构,跟这个概念相关的有PDO和FDO;PDO对应于具体的硬件设备,每个硬件设备对应一个PDO,而一个PDO可以对应多个FDO;PDO和FDO都是DEVICE_OBJECT的实体;

    typedef struct _DRIVER_OBJECT

    {

            CSHORT      Type;

            CSHORT      Size;

            //一个链表,记录了该驱动创建的所有设备对象

            PDEVICE_OBJECT  DeiceObject;

            ULONG  Flags;

            PVOID DriverStart;

            ULONG DriverSize;

            PVOID DriverSection;

            PDRIVER_EXTENSION DriverExtension;

            UNICODE_STRING DriverName;

            PUNICODE_STRING HardwareDataBase;

            PFAST_IO_DISPATCH FastIoDispatch;

            PDRIVER_INITIALIZE DriverInit;

            PDRIVER_STARTIO DriverStartIo;

            PDRIVER_UNLOAD DriverUnload;

            PDRIVER_DISPAT

            CH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION];

    }DRIVER_OBJECT;

      struct DEVICE_OBJECT

     

    typedef struct _DEVICE_OBJECT { SHORT Type; WORD Size; LONG ReferenceCount; PDRIVER_OBJECT DriverObject; PDEVICE_OBJECT NextDevice; PDEVICE_OBJECT AttachedDevice; PIRP CurrentIrp; PIO_TIMER Timer; ULONG Flags; ULONG Characteristics; PVPB Vpb; PVOID DeviceExtension; ULONG DeviceType; CHAR StackSize; BYTE Queue[40]; ULONG AlignmentRequirement; KDEVICE_QUEUE DeviceQueue; KDPC Dpc; ULONG ActiveThreadCount; PVOID SecurityDescriptor; KEVENT DeviceLock; WORD SectorSize; WORD Spare1; PDEVOBJ_EXTENSION DeviceObjectExtension; PVOID Reserved; } DEVICE_OBJECT

    同一个设备驱动程序对象下的所有设备通过NextObject域连接成一个链表(即上述驱动程序设备对象的一个域);DriverObject域指向与该设备相关的驱动程序对象


    最新回复(0)