Вывод списка всех физических дисков (Windows)

Как я могу получить все пути к физическим дискам (\\. \ PhysicalDriveX) на компьютере с Windows, с C / C ++?

Ответы в этот вопрос предлагает получить букву логического диска, а затем получить физический диск, соответствующий этому подключенному диску. Проблема в том, что я хочу получить все
физические диски, подключенные к компьютеру, включая диски, которые не смонтированы.

Другие ответы предлагают увеличить значение от 0 до 15 и проверить, существует ли там диск (\\. \ PhysicalDrive0, \\. \ PhysicalDrive1, …) или вызвать WMIC для получения списка всех дисков. [

Похоже, что они будут работать, они кажутся не лучшим подходом. Разве нет такой простой функции, как GetPhysicalDrives который просто возвращает вектор std::stringСодержит пути всех физических дисков?

6

Решение

Ты можешь использовать QueryDosDevice, Основываясь на описании, вы ожидаете, что это перечислит такие вещи, как C: а также D:, но он также перечисляет такие вещи, как PhysicalDrive0, PhysicalDrive1 и так далее.

Основным недостатком является то, что в нем также будут перечислены многие другие имена устройств, которые вам, вероятно, не нужны, поэтому (например) на моей машине я получаю список из почти 600 имен устройств, из которых только довольно небольшой процент составляет связано с тем, что вы заботитесь.

На всякий случай, какой-то (старый) пример кода:

#define WIN32_LEAN_AND_MEAN
#include <windows.h>

#include <iostream>

int main(int argc, char **argv) {

char physical[65536];
char logical[65536];

if ( argc > 1) {
for (int i=1; i<argc; i++) {
QueryDosDevice(argv[i],logical, sizeof(logical));
std::cout << argv[i] << " : \t" << logical << std::endl << std::endl;
}
return 0;
}

QueryDosDevice(NULL, physical, sizeof(physical));

std::cout << "devices: " << std::endl;

for (char *pos = physical; *pos; pos+=strlen(pos)+1) {
QueryDosDevice(pos, logical, sizeof(logical));
std::cout << pos << " : \t" << logical << std::endl << std::endl;
}

return 0;
}

Однако, если я запустлю это как `devlist | grep «^ Physical», это список физических дисков.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]