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

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

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

2 ответа

Решение

Вам придется использовать API SetupApi / ConfigManager. Но имейте в виду, что под x64 вы приложение. также должно быть 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 (не знаю, разрешает ли это лицензия) и включать / отключать устройства с его помощью?

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

Другие вопросы по тегам