IoCreateDevice,该怎么处理

IoCreateDevice
1)创建设备的时候这个 NextDevice 是指向空还是指向哪里....(当他创建的时候是怎么样给它赋值的);
它是怎么知道它的下一个设备的...还是有个链表 创建一个就插入一个...


2)一个驱动可以有多个设备...那么设备扩展是不是也可以创建多个..如果创建了多个有什么需要注意的地方么...


------最佳解决方案--------------------
引用:
在停止设备的时候可能要进行一些处理工作..,可能每一个设备进行的处理不相同..这时候应该分辨这些不同的设备(例如在设备扩展里加一些标识..不同的设备类型..)
我遇到过在一个驱动中创建了2个不同的扩展..在Unload的时候
在这一句蓝了...
next_device_object = DeviceObject->NextDevice;

每个设备扩展可以不同,但程序自己要能够区分,例如扩展结构中先用一个变量表示具体类型。
这句蓝屏应该是DeviceObject指针无效,检查一下这个指针是怎么来的。
------其他解决方案--------------------
友情帮顶一下
------其他解决方案--------------------
2)一个驱动可以有多个设备

这个好像说反了吧,一个设备可以有多个驱动

PAGED_CODE();
KdPrint(("Enter HelloWDMAddDevice\n"));

NTSTATUS status;
PDEVICE_OBJECT fdo;
UNICODE_STRING devName;
RtlInitUnicodeString(&devName,L"\\Device\\MyWDMDevice");
status = IoCreateDevice(
DriverObject,
sizeof(DEVICE_EXTENSION),
&(UNICODE_STRING)devName,
FILE_DEVICE_UNKNOWN,
0,
FALSE,
&fdo);
if( !NT_SUCCESS(status))
return status;



status = IoCreateDevice(
        gFileSpyDriverObject,                 //DriverObject
        sizeof(FILESPY_DEVICE_EXTENSION),     //DeviceExtensionSize
        NULL,                                 //DeviceName
        DeviceObject->DeviceType,             //DeviceType
        0,                                    //DeviceCharacteristics
        FALSE,                                //Exclusive
        &newDeviceObject);                    //DeviceObject
//这里是 这个为这个驱动创建的设备对象

------其他解决方案--------------------
一个驱动可以创建多个类型的设备。 应用层可以打开设备多次 所以也可以存在某种设备多个。
------其他解决方案--------------------
进来学习一下
------其他解决方案--------------------
引用:
这个好像说反了吧,一个设备可以有多个驱动


不是吧....
------其他解决方案--------------------
1、同一驱动创建的多个设备对象通过NextDevice构成一个单向链表,创建设备时指针为空,创建下一个设备时指向新设备。
2、设备扩展是专属于某一个设备对象的,每个设备有自己的设备扩展,互不干扰,驱动程序在设备扩展中记录与该设备有关的信息。
------其他解决方案--------------------
引用:
1、同一驱动创建的多个设备对象通过NextDevice构成一个单向链表,创建设备时指针为空,创建下一个设备时指向新设备。