识别Windows上程序的驱动器
Identify the drive of a program on Windows
我有一个用c++编写的Windows程序。为了获得计算机驱动器的驱动器序列号,我在程序中使用_popen()运行"wmic path win32_physicalmedia get SerialNumber"。
但是,运行程序的计算机可能有许多驱动器,USB驱动器也出现在列表中。
我怎样才能知道哪个驱动器有我正在运行的程序?谢谢!
假设您仍然希望使用WMI:首先,您需要一些代码来读取c++中的WMI属性。这里不需要重复,你可以在从c#到c++的CPU ID代码中找到它。
当你有了这些代码,你就可以开始使用磁盘了。首先你需要记住Windows是如何组织磁盘的:
- 每个物理磁盘(
Win32_DiskDrive
)由分区(Win32_DiskPartition
)组成。 - 每个分区(
Win32_DiskPartition
)为一个逻辑盘(Win32_LogicalDisk
)。 - 彼此之间的映射由
Win32_DiskDriveToDiskPartition
和Win32_LogicalDiskToPartition
完成。
你已经知道你在哪里运行,然后你可以做这个映射:
从Win32_LogicalDisk
中获取DeviceID
属性匹配的驱动器:
DeviceID=C:
查询Win32_LogicalDiskToPartition
,选择Dependent
有ID的Antecedent
:
\REPETTIrootcimv2:Win32_DiskPartition.DeviceID="Disk #1, Partition #1" \REPETTIrootcimv2:Win32_LogicalDisk.DeviceID="C:"
现在你应该查询Win32_DiskPartition
中的分区,找到DeviceID
是Disk #1, Partition #1
的分区,但是Win32_DiskDriveToDiskPartition
也使用DeviceID
进行映射,然后你可以直接查询Win32_DiskDriveToDiskPartition
来匹配给定的ID:
\REPETTIrootcimv2:Win32_DiskDrive.DeviceID="\.PHYSICALDRIVE1" \REPETTIrootcimv2: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的情况下做,那么就有点更棘手了。
- 首先你需要弄清楚哪个物理驱动器包含你的逻辑驱动器_你可以遵循如何列出物理磁盘?
- 当您有物理驱动器名称时,最简单的方法是
CreateFile()
打开驱动器并获得DeviceIoControl()
发送S.M.A.R.T.命令的信息。不要认为它总是那么容易:对于许多驱动器,它会失败,并且您需要管理权限。不幸的是,没有一个完美的解决方案,所以你需要尝试不同的方法。我想最好和最详尽的代码来处理这个是由Lynn McGuire为它的DiskId32实用程序编写的。
- Mongodb c++驱动程序:如何查询元素的数组
- C++,系统无法执行指定的程序
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 重载操作程序时出错>>用于类中的字符串 memebr
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 试图在visual studio上用C++创建一个桌面应用程序
- 模板元程序查找相似的连续类型名称
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- C 程序悬挂在矢量驱动器中
- 返回驱动器号列表的程序
- 应用程序无法访问映射的驱动器
- 如何在C++程序中查看我的硬盘驱动器目录
- 如何限制 MFC 应用程序仅从已知的 USB 闪存驱动器运行
- 识别Windows上程序的驱动器
- 如何在Qt应用程序中获取MAC OS中驱动器的文件格式
- 我的程序无法在窗口驱动器上写入
- 如何在我的C++程序中的特定日期/驱动器已满后删除linux系统中的文件
- c++ -确保硬盘(驱动器)在程序执行期间不空闲