1.对于WDM驱动程序来说,一般都是基于分层。也就是说,完成一个设备操作,至少要由两个驱动设备共同完成一个是物理设备对象(Physical Device Object)PDO,另一个是功能设备对象(Function Device Object)FDO。关系是附加与被附加的关系。当PC插入某个设备的时,PDO会自动创建。确切的说,是由总线驱动创建的。PDO不能单独操作设备,需要配合FDO一起使用。系统会提示检查到新设备,需要安装配合FDO一起使用。系统会提示检测到新设备,要求安装驱动程序。需要安装的驱动程序指的就是WDM程序,此驱动程序创建FDO,并附加到PDO之上。
以下是WDM代码框架
#include <wdm.h>
NTSTATUS MyWDMAddDevice(PDRIVER_OBJECT pDriverObj,
PDEVICE_OBJECT pPhysicalDevObj);
void MyUnLoad(PDRIVER_OBJECT pDriverObj);
typedef struct _DEVICE_EXTENSION
{
PDEVICE_OBJECT fdo;
PDEVICE_OBJECT pNextDo;
UNICODE_STRING ustrDevName;//name of DO
UNICODE_STRING ustrLinkName;//name of linkSymbol
}DEVICE_EXTENSION,*PDEVICE_EXTENSION;
/*
1.增加了AddDevice函数的设置,这是WDM和NT的不同点
2.因为NT是主动加载设备的,也就是驱动一旦加载就创建设备
而WDM驱动是被动加载驱动