Сообщить PnP-менеджеру, что устройство пропало

В настоящее время я разрабатываю минидрайвер KMDF HID для Nintendo Wii Remote. Мой минидрайвер HID заменяет минидрайвер HidBth для драйвера HIDClass (я использую образец минидрайвера KMDF HID, где он фактически является драйвером фильтра и использует этот «kmdfhidminidriver» для пересылки всех запросов).

Итак, моя проблема заключается в том, что когда я выключаю пульт Wii Remote (нажимаю кнопку питания или извлекаю батарейки), PnP-Manager не распознает, что устройство исчезло. Windows по-прежнему показывает устройство в диспетчере устройств и думает, что все в порядке и работает. Единственный намек на то, что устройство исчезло, заключается в том, что канал L2CAP закрыт, и я получаю обратный вызов L2CAP, вызываемый с кодом индикатора "RemoteDisconnect".

Мой вопрос: как я могу сигнализировать PnP-Manager об отключении устройства? Я попытался использовать "WdfDeviceSetDeviceState" с параметром Removed", установленным на true. Но тогда Диспетчер устройств показывает ошибку драйвера (Код 24). Я хотел бы иметь решение, при котором устройство удаляется из диспетчера устройств без каких-либо ошибок, например, при отключении USB-устройства.

Дополнительная информация: я использую WDK 8 и WDF 1.11; Целевыми системами драйверов являются Win 7 и 8.


person jloehr    schedule 20.06.2014    source источник


Ответы (1)


Хорошо, я должен использовать «HidNotifyPresence». Он создан в "hidport.h", но, к сожалению, еще не задокументирован.

Он принимает два аргумента. Первый — это объект устройства, который может быть FDO. Второй - BOOLEAN. Если true, устройство будет перенумеровано, иначе устройство будет удалено неожиданно.

Поскольку мой драйвер является драйвером фильтра, мне нужно предоставить свой собственный драйвер мини-порта PassThrough (shim), который будет передавать адреса FDO и «HidNotifyPresence» драйверу фильтра.

person jloehr    schedule 23.06.2014