Сброс устройства в диспетчере устройств

Я ищу программный API для перезапуска любого устройства, которое позволяет включать/отключать в диспетчере устройств,

такие как аудиоустройства и сетевой адаптер


person Plastkort    schedule 01.11.2010    source источник


Ответы (2)


Вам придется использовать SetupApi / API ConfigManager. Но имейте в виду, что под x64 вы app. также должен быть x64 для включения/отключения устройства (поэтому вы не можете сделать это прямо в Delphi прямо сейчас - сначала я подумал, что это проблема с перенаправлением файлов/реестра для x86-приложения под x64, но это не помогло). Перечисление устройств работает нормально. Что-то было об этом в одной статье на MSDN, но я не могу найти ее прямо сейчас. Я сделал приложение FP/Lazarus x64 для включения/отключения устройств под ОС x64.

Вы можете загрузить WDK и найти исходный код DevCon (C:\WinDDK\7600.16385.1\src\setup\devcon). В cmds.cpp есть функция ControlCallback, которая включает/отключает устройство с помощью SetupApi). Но сначала вам нужно перечислить классы устройств (по GUID или ClassName), а затем перечислить экземпляры устройств или открыть устройство по строке DeviceInstanceId. Это на C, но научиться использовать этот API должно быть легко.

Не уверен, что вы делаете, но, может быть, было бы проще использовать этот devcon.exe (не знаю, разрешает ли это лицензия) и включать/отключать устройства с его помощью?

person Krystian Bigaj    schedule 01.11.2010
comment
Переводы заголовков упомянутых SetupApi и ConfigManager доступны в Jedi Apilib. - person Remko; 01.11.2010
comment
Спасибо Ремко, забыл написать об этом. О том, что x86 против x64, если вы попытаетесь сделать это, вы, вероятно, получите ошибку E0000235 (например, techtalkz.com/microsoft-device-drivers/) - person Krystian Bigaj; 01.11.2010

У меня нет опыта работы с этим, но я думаю, что вы можете использовать DeviceIoControl API.

person Remko    schedule 01.11.2010