gpt4 book ai didi

c++ - 如何获取物理存储设备列表?

转载 作者:行者123 更新时间:2023-11-30 03:05:36 24 4
gpt4 key购买 nike

我想获取物理存储设备的列表。
我看过一些代码,但实际上是循环执行类似暴力破解的操作。
我想知道获取物理存储磁盘列表的一般方法是什么。

我找到了 CreateFile() .但我不明白如何正确使用它。我需要一个非 wmi 解决方案。如果它不查询注册表会更好。

最佳答案

我使用了以下代码,它枚举了所有卷,然后查找它们对应的物理驱动器:

#include <windows.h>
#include <commctrl.h>
#include <winioctl.h>

typedef struct _STORAGE_DEVICE_NUMBER {
DEVICE_TYPE DeviceType;
ULONG DeviceNumber;
ULONG PartitionNumber;
} STORAGE_DEVICE_NUMBER, *PSTORAGE_DEVICE_NUMBER;

void PrintVolumes()
{
char volName[MAX_PATH];
HANDLE hFVol;
DWORD bytes;

hFVol = FindFirstVolume(volName, sizeof(volName));
if (!hFVol)
{
printf("error...\n");
return;
}
do
{
size_t len = strlen(volName);
if (volName[len-1] == '\\')
{
volName[len-1] = 0;
--len;
}

/* printf("OpenVol %s\n", volName); */
HANDLE hVol = CreateFile(volName, 0, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (hVol == INVALID_HANDLE_VALUE)
continue;

STORAGE_DEVICE_NUMBER sdn = {0};
if (!DeviceIoControl(hVol, IOCTL_STORAGE_GET_DEVICE_NUMBER, NULL,
0, &sdn, sizeof(sdn), &bytes, NULL))
{
printf("error...\n");
continue;
}
CloseHandle(hVol);

printf("Volume Type:%d, Device:%d, Partition:%d\n", (int)sdn.DeviceType, (int)sdn.DeviceNumber, (int)sdn.PartitionNumber);
/* if (sdn.DeviceType == FILE_DEVICE_DISK)
printf("\tIs a disk\n");
*/
} while (FindNextVolume(hFVol, volName, sizeof(volName)));
FindVolumeClose(hFVol);
}

关于c++ - 如何获取物理存储设备列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7584627/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com