Как я могу определить тип конкретного диска? - PullRequest
1 голос
/ 17 февраля 2011

Я все еще чувствую себя неловко, когда получаю информацию об аппаратном обеспечении процессора, поэтому я пришёл с таким запросом: жесткий диск, CD / DVD / Bluray-ридер, дискета и, если возможно, USB.Я искал на MSDN GetDriveType , но, похоже, я плохо разбираюсь в поисках или не понимаю.Есть идеи?

Ответы [ 3 ]

2 голосов
/ 10 июня 2011

Если вы хотите определить, что устройство является устройством USB, вы можете открыть его дескриптор и отправить запросы IOCTL с помощью DeviceIoControl (), чтобы определить тип шины, к которой подключено устройство.

EnumUsbDrivesLetters - пост написан на русском языке, но содержит исходный код на C ++, поэтому вопрос может быть легко понят.

Ура, Андрей

2 голосов
/ 17 февраля 2011

Я не уверен, что вы не поняли о документации, на которую вы ссылались ...

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

Например:

GetDriveType(_T("C:\\"))    // returns DRIVE_FIXED if C:\ is my hard drive
GetDriveType(_T("A:\\"))    // returns DRIVE_REMOVABLE if A:\ is my floppy drive
GetDriveType(_T("D:\\"))    // returns DRIVE_CDROM if D:\ is a CD-ROM drive
GetDriveType(_T("N:\\"))    // returns DRIVE_REMOTE if N:\ is a network drive

В нем также говорится, что если вы хотите определить, является ли накопитель USB-накопителем, вам нужно вызвать функцию SetupDiGetDeviceRegistryProperty и указать свойство SPDRP_REMOVAL_POLICY.

1 голос
/ 17 февраля 2011

Единственный API-интерфейс "все в одном", который я знаю для Windows с этой информацией, - WMI , но его использование не так уж и просто.С другой стороны, многие программы взаимодействуют с устройствами напрямую, используя сквозные управляющие коды или управляющие коды ввода / вывода, например SMART_RCV_DRIVE_DATA .

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

...