Как определить, какие перечислители использовать для перечисления дисковых устройств Windows через SetupDiGetClassDevs - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь написать код C ++ / Win32, который может определить, относится ли данный путь к файлу к фиксированному диску. (Я абсолютно не могу использовать WMI для этой задачи.)

Моя лучшая ставка - не менее из этой темы - представляется функциями SetupDiXXXX. Вот что я пытаюсь.

Я уже успешно перечисляю дисковые устройства, используя SetupDiGetClassDevs, и проверяю, исправлены ли они.

// Get all devices classes of type "DISKDRIVE"

const auto hDevInfo = SetupDiGetClassDevs(
    &GUID_DEVCLASS_DISKDRIVE, 
    nullptr, 
    nullptr, 
    DIGCF_PRESENT);

Но чтобы связать устройство с заданным путем к диску, я бы выглядел ( из того потока, который я упомянул ), что мне также нужно перечислить устройства интерфейсы . Согласно документации , это значит, что я должен предоставить флаг DIGCF_DEVICEINTERFACE для SetupDiGetClassDevs. Это означает, что я должен также предоставить аргумент «перечислитель» для той же функции. И это подводит меня к моему вопросу.

Где находится список допустимых перечислителей, которые я могу использовать для SetupDiGetClassDevs и GUID_DEVCLASS_DISKDRIVE? Есть ли список?

Я уже знаю об одном: "SCSI". Но этот код должен работать на чьей-либо машине. Так что еще я должен проверить? Где-нибудь есть заголовочный файл, в котором перечислены все? Могу ли я вызвать функцию, чтобы перечислить их?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...