Здравствуйте, Timas, Вы писали:
T>Подскажите пожалуйста, какой ключ реестра использует Windows Device Manager, чтобы понять, что устройство является скрытым.
Device Manager lists the devices that are installed on the machine. By default, certain devices are not shown in the list. These "hidden" devices include devices that have the devnode status bit DN_NO_SHOW_IN_DM set and devices that are part of a setup class that is marked as a NoDisplayClass in the registry (for example, printers and non-PnP drivers).
Итак, немного исследовав вопрос я выяснил следующее:
При загрузке операционная система Windows создаёт дерево устройств (device tree) в узлах которого стоят, так называемые devnode. В этом дереве узлы не являющиеся листьями соответствуют bus устройствам (bus device), к которым присоединяются физические, логические и виртуальные устройства. Таким образом, любому устройству в системе соответствует свой devnode. У devnode есть аттрибут status. Он может быть получен при помощи функции CM_Get_DevNode_Status из Windows DDK. Бит DN_NO_SHOW_IN_DM аттрибута status и отвечает за то, будет считать Device Manager устройство скрытым или нет.
Здесь вроде всё понятно, только вот мне необходимо узнать о скрытости устройства на удалённой машине, в идеале из реестра удалённой машины. Есть ли связь devnode status с каким-нибудь ключом реестра? Другие варианты тоже рассматриваются.
К сожалению, это не то что мне нужно. Там пишут про то, что если Вам необходимо чтобы Device Manger показывал устройства не подсоединённые к компьютеру в настоящий момент необходимо добавить переменную окружения devmgr_show_nonpresent_devices = 1.
Мне же необходимо узнать по какому принципу он вообще понимает, что устройство скрытое. Я уже немного продвинулся в этом вопросе. Прочитайте моё сообщение ниже.
Здравствуйте, Sergeant_BY, Вы писали:
S_B>Device Manager lists the devices that are installed on the machine. By default, certain devices are not shown in the list. These "hidden" devices include devices that have the devnode status bit DN_NO_SHOW_IN_DM set and devices that are part of a setup class that is marked as a NoDisplayClass in the registry (for example, printers and non-PnP drivers). S_B>
Спасибо, я это уже нашёл. Осталось найти в реестре devnode status.
Здравствуйте, Timas, Вы писали:
T>Здесь вроде всё понятно, только вот мне необходимо узнать о скрытости устройства на удалённой машине, в идеале из реестра удалённой машины. Есть ли связь devnode status с каким-нибудь ключом реестра?
А откуда уверенность что этот devnode status обязательно должен быть в реестре?
T>Другие варианты тоже рассматриваются. CM_Get_DevNode_Status_Ex?
При запуске без параметров она выводит на экран список всех сетевых адаптеров на локальной машине. При запуске с любыми параметрами выводит только не скрытые сетевые адаптеры. При переходе от локальной машины к удалённой, возникла проблема.
Функция SetupDiGetClassDevsEx при имени машины отличном от NULL возвращает ошибку. GetLastError даёт какой-то непонятный номер. В чём проблема ума не приложу.
Разобрался. Просто я не правильно имя указал. T> //PCTSTR MachineName = "\\MyComputer";
надо:
PCTSTR MachineName = "\\\\MyComputer";
Теперь другая проблема. CM_Get_DevNode_Status_Ex возвращает ошибку CR_INVALID_DEVINST при обращении к удалённой машине. Для локальной машины всё ок. Хотя вроде всё должно быть ок. В MSDN пишут что:
dnDevInst
Caller-supplied device instance handle, obtained from the SP_DEVINFO_DATA structure that is used with the device installation functions.
я вроде его оттуда и взял, с чего это он вдруг invalid.
Вот полный код: