阅读:3690回复:4
求助,驱动中能自己发送IRP_MN_QUERY_ID查询BusQueryInstanceID不?
我使用Diskperf实现一个磁盘上层过滤驱动程序,在AddDevice例程中使用IrpBuileSynchronFsdRequest创建一个同步的IRP_MN_PNP请求
然后IoGetNextStackLocation() 将MinorFunction设置为IRP_MN_QUERY_ID,参数设置为BusQueryInstanceId IoCallDriver返回Status_success 但是Irp->ioStatus.Information为0,不知哪位大侠能帮忙讨论一下 |
|
沙发#
发布于:2007-04-13 23:25
我的查询InstanceID的代码是这样的
//得到设备的Instance ID; KeInitializeEvent( &event, NotificationEvent, FALSE ); irp = IoBuildSynchronousFsdRequest( IRP_MJ_PNP, PhysicalDeviceObject, NULL, 0, NULL, &event, &ioStatusBlock ); if (irp == NULL) { status = STATUS_INSUFFICIENT_RESOURCES; return status; } irpStack = IoGetNextIrpStackLocation( irp ); irpStack->MinorFunction = IRP_MN_QUERY_ID; //查询设备的INSTANCE ID irpStack->Parameters.QueryId.IdType=BusQueryInstanceID; //初始化设备的响应 irp->IoStatus.Status = STATUS_NOT_SUPPORTED ; status = IoCallDriver( PhysicalDeviceObject, irp ); if (status == STATUS_PENDING) { KeWaitForSingleObject( &event, Executive, KernelMode, FALSE, NULL ); status = ioStatusBlock.Status; } if(NT_SUCCESS(irp->IoStatus.Status)) { RtlStringCbCopyW(pInstanceID,nIDLen,(PWCHAR)ioStatusBlock.Information); } 程序运行到这里的时候irp->IoStatus.Status=0; 有的时候能正确获取U盘的InstanceID,此时ioStatusBlock.Information是一个WCHAR类型的值 但有的时候ioStatusBlock.Status=0x00; ioStausBlock.Information=0x00000190 有的时候ioStatusBlock.Information为0x00000000; 而Windows设备管理器中却有InstanceID, 请问各位大虾,这是怎么回事? |
|
板凳#
发布于:2007-04-14 18:31
在START DEVICE后试试
|
|
地板#
发布于:2007-04-15 09:22
在START_DEVICE后面试了,也不行
|
|
地下室#
发布于:2007-04-30 17:32
有同样问题,关心中...
|
|
|