Я пытаюсь написать приложение на C ++, в котором перечислены сведения, полученные с USB-устройства.Я следую за кодом утилиты USBView ( Github ) для него.
Когда устройство находится в состоянии питания D0
(полностью включено), я могу получить строковые дескрипторы, но когда устройство выходитв состояние низкого энергопотребления (D2)
, а я нет.
IOCTL IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION
возвращается с ошибкой «Устройство, подключенное к системе, не работает».Утилита USBView показывает, что строковые дескрипторы недоступны, когда устройство находится в состоянии низкого энергопотребления.
![enter image description here](https://i.stack.imgur.com/9IDE5.png)
Такое поведение является странным и нигде в спецификации USBя нашел ссылку на это.Я проверил с 2 устройствами, и я получаю такое же поведение.Я могу получить другие дескрипторы, такие как дескриптор устройства, дескриптор BOS и т. Д. Даже в состоянии D2
.
Есть ли способ получить дескрипторы строк, когда устройство USB находится в состоянии низкого энергопотребления?Если нет, есть ли способ на мгновение перевести его в состояние питания D0?Вероятно, ACPI является ответом, но это API очень низкого уровня, который я нахожу подавляющим, чтобы понять.Предоставляет ли Windows какой-либо API высокого уровня для установки состояний питания?