我有一个用C++编写的Windows程序。为了获取计算机驱动器的序列号,我在程序中使用_popen()运行“wmic path win32_physicalmedia get SerialNumber”命令。
但是运行该程序的计算机可能有许多驱动器,而且USB驱动器也会出现在列表中。
有什么方法可以知道哪个驱动器包含正在运行的程序吗?谢谢!
我有一个用C++编写的Windows程序。为了获取计算机驱动器的序列号,我在程序中使用_popen()运行“wmic path win32_physicalmedia get SerialNumber”命令。
但是运行该程序的计算机可能有许多驱动器,而且USB驱动器也会出现在列表中。
有什么方法可以知道哪个驱动器包含正在运行的程序吗?谢谢!
Win32_DiskDrive
)由分区(Win32_DiskPartition
)组成。
- 每个分区(Win32_DiskPartition
)是一个逻辑磁盘(Win32_LogicalDisk
)。
- 它们之间的映射是通过Win32_DiskDriveToDiskPartition
和Win32_LogicalDiskToPartition
完成的。Win32_LogicalDisk
获取与您正在运行的驱动器匹配的DeviceID
属性的逻辑磁盘:DeviceID=C:
Win32_LogicalDiskToPartition
,选择Antecedent
,找到它的Dependent
具有之前找到的ID。\\REPETTI\root\cimv2:Win32_DiskPartition.DeviceID="Disk #1, Partition #1" \\REPETTI\root\cimv2:Win32_LogicalDisk.DeviceID="C:"
Win32_DiskPartition
中的分区,以找到其中DeviceID
为Disk #1,Partition #1
的分区。但是,Win32_DiskDriveToDiskPartition
也使用DeviceID
进行映射,因此您可以直接查询Win32_DiskDriveToDiskPartition
来匹配给定的ID:\\REPETTI\root\cimv2:Win32_DiskDrive.DeviceID="\\.\PHYSICALDRIVE1" \\REPETTI\root\cimv2:Win32_DiskPartition.DeviceID="Disk #1, Partition #1"
Win32_DiskDrive
,并搜索设备ID为\\.\PHYSICALDRIVE1
:WDC WDxxx ATA Device \\.\PHYSICALDRIVE1 WDC WDxxx ATA Device
您可以获取它的序列号(在这种情况下,Win32_PhysicalMedia
和Win32_DiskDrive
都有相同的属性可用,否则您应该通过其Caption
进行搜索)。
没有WMI
如果您必须在没有WMI的情况下执行操作,则会变得有点棘手。