在一个驱动创建多个设备对象 都是用的同一个派遣函数,IRP传递到设备栈,那到派遣函数里时候怎么区分是哪个目标设备请求的呢?,比如我应用程序是操作A设备,但是A的设备栈顶是B设备,在B派遣函数中(A和B实际是同一个派遣函数)怎么知道我是发给A的呢?就是在派遣函数里还要实现 多个设备的判断呢?
4条回答 默认 最新
- 「已注销」 2023-07-17 12:36关注
DEVICE_OBJECT 结构体中有个成员是 DeviceExtension, 这个成员就是给你自定义用的, 你在用 IoCreateDevice 创建设备时指定创建DeviceExtension的大小, 系统会自动给你创建内存,然后你自己初始化,并设置用于区分不同设备的字段, 然后在执行IRP请求时取出用来区分
typedef struct { char name; }MY_DEVICE_EXTENSION ; // 添加时 status = IoCreateDevice(DriverObject, sizeof(MY_DEVICE_EXTENSION), &deviceObjName, device_type, device_characteristics, TRUE, &deviceObject); MY_DEVICE_EXTENSION* pDevExt = deviceObject->DeviceExtension; RtlZeroMemory(pDevExt, sizeof(MY_DEVICE_EXTENSION )); pDevExt->name = 'A'; // 处理时 MY_DEVICE_EXTENSION* pDevExt = deviceObject->DeviceExtension; if( pDevExt->name == 'A' ){ ..... }else if( ... ) ...本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录