解决方案

解决方案

我有一个物理设备对象名称,例如“\Device\0000007c”。

在 Windows 7 中,如何找到与该 ID 相对应的设备,而无需在设备管理器中逐个浏览系统中的每个设备,打开属性对话框并查看物理设备对象名称条目?

我发现根据物理设备对象 (PDO) 标识符在 Windows 中查找设备但事实证明这是一个 XY 问题,并没有回答这个问题。

我尝试在注册表(键/值/数据)中搜索字符串“0000007c”、“0000007C”和 dword 0x0000007C,但找不到任何与设备相关的内容。

在旧版 Windows 中,您可以从设备管理器打印完整报告(然后我可以搜索),但在 Windows 7 中,设备管理器不再有此选项。

答案1

解决方案

来自官方文档:

当总线驱动程序检测到子设备已插入或拔出时,它会通知即插即用 (PnP) 管理器。作为响应,PnP 管理器要求总线驱动程序为连接到父设备(即总线)的每个子设备创建一个物理设备对象 (PDO)。

来源:WDF 驱动程序的 WDM 概念

要获取所需信息,请打开命令提示符并运行以下命令:

wmic path Win32_PnPSignedDriver where "pdo like '%0000007c'" get devicename,pdo

进一步阅读

答案2

如果这是物理磁盘,您可以使用以下 Powershell Core 脚本行来找出被模糊识别的实际磁盘PDO名称

# Starting with a PDO name, likely copy-pasta'd from some obscure warning/error message
$pdo_name='\Device\0000005b'

# Step 1
$system_element_dev_id = Get-CimInstance Win32_PnPSignedDriver |
                           ? {$_.PDO -eq $pdo_name} |
                           Select-Object -ExpandProperty DeviceID

# Step 2: Use the proceeds from the above transaction to identify the "Disk Number"
$phys_disk_num = Get-CimInstance Win32_PNPDevice |
                   ? {[string]$_.SystemElement.DeviceID -eq $system_element_dev_id} |
                   Select-Object @{
                     n='disk_number';
                     e={[int]$_.SameElement.DeviceID.replace('\\.\PHYSICALDRIVE','')}
                   } |
                   Select-Object -expand disk_number

# Step 3: Profit! Get the info you were after
Get-PhysicalDisk | ? {$_.DeviceId -eq $phys_disk_num}

示例输出,序列号被隐藏,一些列/值被缩写以避免可怕的水平滚动条

Num FriendlyName  SerialNumber MediaType CanPool OpStatus HealthStat Usage        Size
--- ------------  ------------ --------- ------- -------- ---------- -----        ----
5   ST16000NM001G ZL123XYZ     HDD       False   OK       Healthy    Auto-Sel 14.55 TB

针对非以下设备类型破解上述脚本物理磁盘将留给读者作为练习。

相关内容