DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS

Тема в разделе "WASM.NT.KERNEL", создана пользователем Igi, 15 июн 2007.

  1. Igi

    Igi New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2005
    Сообщения:
    35
    Пишу драйвер, ставит хуки в SDT и IDT. Все работало замечательно, но сегодня заметил странное поведение - если выгрузить драйвер при активном сканере DrWeb то падаем в синий экран с ошибкой
    DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS

    Я так понял надо использовать KeWaitForMultipleObjects но как - не знаю, прошу помощи.
     
  2. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    Из WinDDK: The driver failed to cancel lookaside lists, DPCs, worker threads, or other such items before unloading.
    Вывод: надо канселить или ждать завершения для всех Pending IRPs и чистить за собой все системные ресурсы
     
  3. Deyton

    Deyton Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    94
    А ты учел, что один из потоков может прерваться в теле обработчика хука, например, если у него истечет квант времени, а когда ты выгрузишь драйвер он получит управление и выпадет в осадок, если я не ошибаюсь, то кажется именно с таким кодом. Можно завести счетчик, в котором регистрировать сколько потоков вошло в тело твоего драйвера, а потом сколько вышло, и не выгружать драйвер пока все не выйдут. Это уменьшит вероятность, однако не на 100%, поскольку чужой поток может прерваться перед тем как это зарегистрирует счетчик (на первых инструкциях в теле хука). Потому-то большинство драйверов, кот. ставят хуки делают НЕВЫГРУЖАЕМЫМИ.