虚拟总线创建子设备返回无效ID
2023-12-20
60
0
虚拟了一个虚拟总线设备,从设备管理器中看来是正常的,但从功能上来看是不正常的。
在设备管理器中提示如下:
这个设备运转正常。Windows 无法识别与该硬件连接的一个次要设备,原因使该设备没有有效的硬件标识号。
请与硬件制造商联系取得协助。
从上面的提示来看,是因为无一个有效的硬件标识号。
什么是硬件标识号呢?其实就是硬件ID,一般也有写作为设备ID.
在Windows系统中一般会有几个设备ID需要标识,其都是通过IRP_MN_QUERY_ID来获取的,其主要几个子分,分别为:
- BusQueryDeviceID
- BusQueryInstanceID
- BusQueryHardwareIDs
- BusQueryCompatibleIDs
这里明确提示硬件IDs,只是自己这里的代码写的有误。虽然通过Irp->IoStatus.Information 返回了硬件的ID的有效指针,但因STATUS没有置STATUS_SUCCCESS,而是代码默认的STATUS_NOT_SUPPORTED。故才会有一问题。
我们修改代码后再加载驱动,可以看到,子节点因正确返回了有效的ID,出现并显示:
使用WINDBG查看设备信息:
0: kd> dt _DEVICE_OBJECT 0XFFFF890DAA06C2D0
nt!_DEVICE_OBJECT
+0x000 Type : 0n3
+0x002 Size : 0x190
+0x004 ReferenceCount : 0n0
+0x008 DriverObject : 0xffff890d`b1690e10 _DRIVER_OBJECT
+0x010 NextDevice : 0xffff890d`aad126a0 _DEVICE_OBJECT
+0x018 AttachedDevice : (null)
+0x020 CurrentIrp : (null)
+0x028 Timer : (null)
+0x030 Flags : 0x3044
+0x034 Characteristics : 0x180
+0x038 Vpb : (null)
+0x040 DeviceExtension : 0xffff890d`aa06c420 Void
+0x048 DeviceType : 0x2a
+0x04c StackSize : 1 ''
+0x050 Queue : <unnamed-tag>
+0x098 AlignmentRequirement : 0
+0x0a0 DeviceQueue : _KDEVICE_QUEUE
+0x0c8 Dpc : _KDPC
+0x108 ActiveThreadCount : 0
+0x110 SecurityDescriptor : 0xffffce88`56bfc1a0 Void
+0x118 DeviceLock : _KEVENT
+0x130 SectorSize : 0
+0x132 Spare1 : 0
+0x138 DeviceObjectExtension : 0xffff890d`aa06c460 _DEVOBJ_EXTENSION
+0x140 Reserved : (null)
0: kd> DT _DEVOBJ_EXTENSION 0xffff890d`aa06c460
nt!_DEVOBJ_EXTENSION
+0x000 Type : 0n13
+0x002 Size : 0
+0x008 DeviceObject : 0xffff890d`aa06c2d0 _DEVICE_OBJECT
+0x010 PowerFlags : 0
+0x018 Dope : (null)
+0x020 ExtensionFlags : 0x10
+0x028 DeviceNode : 0xffff890d`ac0c6c00 Void
+0x030 AttachedTo : (null)
+0x038 StartIoCount : 0n0
+0x03c StartIoKey : 0n0
+0x040 StartIoFlags : 0
+0x048 Vpb : (null)
+0x050 DependencyNode : (null)
+0x058 InterruptContext : (null)
+0x060 VerifierContext : (null)
0: kd> dt _DEVICE_NODE 0xffff890d`ac0c6c00
nt!_DEVICE_NODE
+0x000 Sibling : (null)
+0x008 Child : (null)
+0x010 Parent : 0xffff890d`ab399660 _DEVICE_NODE
+0x018 LastChild : (null)
+0x020 PhysicalDeviceObject : 0xffff890d`aa06c2d0 _DEVICE_OBJECT
+0x028 InstancePath : _UNICODE_STRING "VUSB\PHCI\1&79f5d87&8&0"
+0x038 ServiceName : _UNICODE_STRING ""
+0x048 PendingIrp : (null)
+0x050 FxDevice : (null)
+0x058 FxDeviceLock : 0n0
+0x060 FxRemoveEvent : _KEVENT
+0x078 FxActivationCount : 0n0
+0x07c FxSleepCount : 0n0
+0x080 Plugin : (null)
+0x088 Level : 2
+0x08c CurrentPowerState : _POWER_STATE
+0x090 Notify : _PO_DEVICE_NOTIFY
+0x0f8 PoIrpManager : _PO_IRP_MANAGER
+0x118 UniqueId : _UNICODE_STRING ""
+0x128 PowerFlags : 0
+0x12c State : 302 ( DeviceNodeInitialized )
+0x130 PreviousState : 301 ( DeviceNodeUninitialized )
+0x134 StateHistory : [20] 301 ( DeviceNodeUninitialized )
+0x184 StateHistoryEntry : 1
+0x188 CompletionStatus : 0n0
+0x18c Flags : 0x2230
+0x190 UserFlags : 0
+0x194 Problem : 0x1c
+0x198 ProblemStatus : 0n-1073740656
+0x1a0 ResourceList : (null)
+0x1a8 ResourceListTranslated : (null)
+0x1b0 DuplicatePDO : (null)
+0x1b8 ResourceRequirements : 0xffffce88`5a2afe10 _IO_RESOURCE_REQUIREMENTS_LIST
+0x1c0 InterfaceType : 0xffffffff (No matching name)
+0x1c4 BusNumber : 0xffffffff
+0x1c8 ChildInterfaceType : f ( PNPBus )
+0x1cc ChildBusNumber : 0xa
+0x1d0 ChildBusTypeIndex : 5
+0x1d2 RemovalPolicy : 0x1 ''
+0x1d3 HardwareRemovalPolicy : 0x1 ''
+0x1d8 TargetDeviceNotify : _LIST_ENTRY [ 0xffff890d`ac0c6dd8 - 0xffff890d`ac0c6dd8 ]
+0x1e8 DeviceArbiterList : _LIST_ENTRY [ 0xffff890d`ac0c6de8 - 0xffff890d`ac0c6de8 ]
+0x1f8 DeviceTranslatorList : _LIST_ENTRY [ 0xffff890d`ac0c6df8 - 0xffff890d`ac0c6df8 ]
+0x208 NoTranslatorMask : 0
+0x20a QueryTranslatorMask : 0
+0x20c NoArbiterMask : 0
+0x20e QueryArbiterMask : 0
+0x210 OverUsed1 : <unnamed-tag>
+0x218 OverUsed2 : <unnamed-tag>
+0x220 BootResources : (null)
+0x228 BootResourcesTranslated : (null)
+0x230 CapabilityFlags : 0
+0x238 DockInfo : <unnamed-tag>
+0x258 DisableableDepends : 0
+0x260 PendedSetInterfaceState : _LIST_ENTRY [ 0xffff890d`ac0c6e60 - 0xffff890d`ac0c6e60 ]
+0x270 LegacyBusListEntry : _LIST_ENTRY [ 0xffff890d`ac0c6e70 - 0xffff890d`ac0c6e70 ]
+0x280 DriverUnloadRetryCount : 0
+0x288 PreviousParent : (null)
+0x290 DeletedChildren : 0n0
+0x294 NumaNodeIndex : 0xffffffff
+0x298 ContainerID : _GUID {00000000-0000-0000-ffff-ffffffffffff}
+0x2a8 OverrideFlags : 0x1 ''
+0x2ac DeviceIdsHash : 0x4dad0bec
+0x2b0 RequiresUnloadedDriver : 0 ''
+0x2b8 PendingEjectRelations : (null)
+0x2c0 StateFlags : 0
+0x2c8 RebalanceContext : (null)
+0x2d0 IommuExtension : (null)
+0x2d8 DirectedDripsState : _PO_DIRECTED_DRIPS_STATE