|
Намбер ван.
Когда используется Selective Suspend, чтобы выборочно вгонять отдельно взятые девайсы в power down. Я делаю так. Завожу таймер, он вызывает DPC, DPC проверяет, можно ли засуспендить девайс, и если можно - то через IoQueueWorkItem пихает процедуру, которая проделав всякую разную синхронизацию, пихает в pdo запрос IOCTL_INTERNAL_SUBMIT_IDLE_NOTIFICATION. В callback'е от него отправляю в pdo IRP_MN_WAIT_WAKE чтобы разрешить wakeup, и делаю IRP_MN_SET_POWER в требуемое состояние (PowerDeviceD2). В комплишене от IDLE_NOTIFICATION в случае ошибки (или CANCELLED) вывожу девайс в PowerDeviceD0. Для принудительного вывода девайса из power down я отменяю IDLE_NOTIFICATION irp. Получаю процедуру завершения с кодом ошибки, и там включаю девайс в D0. В результате все засыпает отлично, но по отмене не просыпается (на USB шине нет resume). Что я не так делаю? Или что не доделал?
Ну и намбер ту. После выхода из hibernate кто должен сконфигурировать USB-девайс? Я или pdo?
E-mail: info@telesys.ru