使用WMI Win32_DiskDrive读取硬盘坞挂载硬盘时获芯片组而非硬盘信息
解决硬盘坞下Win32_DiskDrive返回芯片组而非硬盘本身信息的问题
当通过硬盘坞挂载希捷ST8000DM004时,Win32_DiskDrive会返回硬盘坞的芯片组型号(如ASMT ASM235CM),而非硬盘原生信息。以下是几种可行的解决方法:
1. 使用Win32_PhysicalMedia WMI类
Win32_PhysicalMedia专门用于获取物理介质的原始硬件信息,通常能绕过硬盘坞的封装,直接读取硬盘本身的型号和序列号。
示例查询(PowerShell)
# 替换为你的物理磁盘ID,比如\\.\PHYSICALDRIVE1 Get-CimInstance Win32_PhysicalMedia | Where-Object Tag -eq '\\.\PHYSICALDRIVE1' | Select-Object SerialNumber, Description
查询结果中的SerialNumber和Description字段会对应希捷硬盘的原生序列号和型号(如ST8000DM004)。
关联Win32_DiskDrive批量查询
如果需要批量处理多块硬盘,可以通过WMI关联查询,将Win32_DiskDrive和Win32_PhysicalMedia绑定:
Get-CimInstance Win32_DiskDrive | ForEach-Object { $physicalMedia = Get-CimAssociatedInstance -InputObject $_ -ResultClassName Win32_PhysicalMedia [PSCustomObject]@{ DiskDriveModel = $_.Model PhysicalMediaModel = $physicalMedia.Description PhysicalMediaSerial = $physicalMedia.SerialNumber DeviceID = $_.DeviceID } }
2. 直接发送SCSI INQUIRY指令
如果Win32_PhysicalMedia无法获取正确信息,可以直接向物理磁盘发送SCSI INQUIRY命令,这是读取硬盘原生信息的最底层方法。
核心步骤
- 用
CreateFile打开物理磁盘设备(如\\.\PHYSICALDRIVE1),需管理员权限。 - 构造SCSI INQUIRY命令数据结构,命令码设为
0x12(INQUIRY),分配至少36字节的返回缓冲区。 - 通过
DeviceIoControl发送IOCTL_SCSI_PASS_THROUGH_DIRECT控制码执行命令。 - 解析返回数据:
- 第0-7字节:厂商ID(Vendor ID)
- 第8-15字节:产品ID(Product ID,即硬盘型号)
- 第16-19字节:产品修订版本(Revision)
- 部分硬盘的序列号需额外发送
MODE SENSE或READ CAPACITY命令获取。
3. 排查硬盘坞固件兼容性
部分硬盘坞固件会屏蔽硬盘原生信息,优先显示芯片组型号。可以尝试:
- 升级硬盘坞的官方固件,查看是否支持透传硬盘信息。
- 更换支持硬盘信息透传的硬盘坞(如采用ASM2362等芯片的型号)。
内容的提问来源于stack exchange,提问作者Dorian V.
相关产品推荐
相关产品推荐

