创建设备对象,用IoCreatDevice(
IN PDRIVER_OBJECT DriverObject,//系统创建的驱动对象
IN ULONG DeviceExtensionSize,//程序员自己定义的(在头文件中)设备扩展的大小
IN PUNICODE_STRING DeviceName OPTIONAL,//设备名,可以为空,此时,I/O管理器会自动以一个数字作为该设备对象的名称
INDEVICE_TYPE DeviceType,//设备类型
INULONG DeviceCharacteristics,//对设备的进一步描述
INBOOLEAN Exclusize,//是否一次只能进行一次IRP处理
OUTPDEVICE_OBJECT *DeviceObject)//新创建的设备对象
具体代码如下
PDEVICE_OBJECT fdo;
status = IoCreateDevice(
DriverObject,
sizeof(DEVICE_EXTENSION),
NULL,//没有指定设备名
FILE_DEVICE_UNKNOWN,
0,
FALSE,
&fdo);
此时,功能设备对象,创建完毕,接着是将,功能设备对象FDO附加到物理设备对象上PDO。利用函数PDEVICE_OBJECT IoAttachDeviceToDeviceStack(
IN PDEVICE_OBJECT SourceDevice,//新创建的功能设备对象FDO
IN PDEVICE_OBJECT TargetDevice//物理设备对象PDO
);
该函数调用成功的话返回一个设备对象,附加设备对象的设备对象,例如在这里,返回的是PDO,如果,Thereturned device object pointer can differ from TargetDevice if TargetDevice hadadditional drivers layered on top of it.如果该函数运行失败,则返回NULL。