Удаление pDeviceObject->NextDevice

Тема в разделе "WASM.NT.KERNEL", создана пользователем Nicky, 6 янв 2010.

  1. Nicky

    Nicky New Member

    Публикаций:
    0
    Регистрация:
    28 дек 2009
    Сообщения:
    16
    Добрый день
    По какой схеме IO Manager создает список DriverObjects, которые создаются IoCreateDevice?
    Правильно ли я понимаю, что вызовы
    Код (Text):
    1. IoCreateDevice(...pDevice1...);
    2. IoCreateDevice(...pDevice2...);
    3. IoCreateDevice(...pDevice3...);
    в DriverUnload нужно освобождать как
    Код (Text):
    1. for(PDRIVER_OBJECT pDO=pDriverObject->DeviceObject; pDO!=NULL; pDO=pDO->NextDevice) {
    2.     IoDeleteDevice(pDO)
    3. }
    ?

    Если так, то, удалив объект pDO IOManager не очищает структуру (а помечает ее, как удаленную, затем уничтожает ее, когда заканчивается DriverUnload), ведь я обращаюсь к полям несуществующей структуры?

    И собственно вопрос - когда прохожу по списку, в каком порядке следуют объекты устройств? В прямом (pDriver -> pDevice1 -> pDevice2 -> pDevice3), обратном или произвольном? Не нашел в документации ничего на эту тему. С отладчиком ядра не знаком на ты, к сожалению..
    Спасибо
     
  2. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Нет, см. ниже.

    Девайсы уничтожаются тогда и только тогда, когда на них не остаётся больше ссылок и когда они помечены на удаление. Девайс, для которого была вызвана IoDeleteDevice(), будет удалён не после выхода из DriverUnload(), а когда ссылки кончатся. При этом есть вероятность, что объект девайса может быть уничтожен сразу же после выхода из IoDeleteDevice(), поэтому приведённый код некорректен (необходимо сохранять следующий девайс в локальной переменной). С объектом драйвера аналогично, - пока есть ссылки, он будет жив, но при этом он будет полудохлый такой, ибо уже помечен на удаление.

    В обратном порядке. Новый девайс вставляется в начало списка. Закладываться на это поведение не стоит однозначно, теоретически могут изменить в более новых версиях системы ибо нигде не регламентировано.
     
  3. Nicky

    Nicky New Member

    Публикаций:
    0
    Регистрация:
    28 дек 2009
    Сообщения:
    16
    Большое спасибо за ответ