невыгружаемая часть драйвера

Тема в разделе "WASM.NT.KERNEL", создана пользователем katrus, 9 сен 2007.

  1. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    Можно ли сделать часть кода драйвера "невыгружаемой", т.е., после даже после того как весь драйвер сброшен, чтоб эта часть осталась в памяти? Первое что приходит в голову - сделать алокацию памяти и скопировать туда "невыгружаемую" часть, но может есть более правильное/элегантное решение?
     
  2. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Правильно настроить атрибуты секций.
     
  3. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    [​IMG]

    Это какая-то #pragma ?
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    asmfan
    а при чем тут секции?

    либо опция линкеру

    обычно таки делают. ExAllocatePool + перенос кода с коррекцией фиксапов и все.
     
  5. TOR

    TOR New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2004
    Сообщения:
    99
    Адрес:
    Ukraine
    katrus
    MmLockPagableCodeSection ?
    IRQL == PASSIVE_LEVEL

    http://www.osronline.com/ddkx/kmarch/k106_2dde.htm
     
  6. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    Хотелось бы этого избежать - довольно много кода на С.
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    TOR

    И что? Это лишь блокирует в памяти секцию кода, если она выгружаемая. После выгрузки драйвера секция будет освобождена в обычном порядке
     
  8. TOR

    TOR New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2004
    Сообщения:
    99
    Адрес:
    Ukraine
    Так ведь задача какая:
    Т.е. я понял что под сбросом понимается сброс в своп системой или в ручную, а не выгрузка драйвера.
     
  9. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    TOR
    Нет, не верно. Вопрос именно в том как оставить несколько ф-ий драйвера в памяти после того как ВЕСЬ драйвер выгружен (т.е. завершен).
     
  10. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    А можно ли запустить еше один экземпляр драйвера? Т.е. если нет достаточно простого метода оставить часть драйвера в памяти после его завершения, я подумал, что можно оставить старый экземпляр (закрыв в нем deviceobject) и запустить новый
     
  11. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    можно, только придется создавать новый сервис
     
  12. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    Great
    вроде как из ядра - не выйдет такой финт
     
  13. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    z0mailbox
    Такой финт выйдет тупым созданием нового ключа в HKLM\SYSTEM\CurrentControlSet\Services и вызовом кернел апи ZwLoadDriver.
    Создание ключа штатными средствами ntoskrnl выполняется на ура.
    либо можно найти неэкспортируемую MmLoadSystemImage или worker-поток, выполняющий IopLoadUnloadDriver.
     
  14. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    я тоже так думал пока не обломался с вызовом zwloaddriver не помню правда на какой системе, вроде 2к3
    вызов проверял откуда буфер с юникоде-стринг и если ниже mmendusermemory-как-то-там - досвиданья, только если из юзер-мода работал
    так что в серьезном продукте я б на этот финт не рассчитывал
     
  15. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    z0mailbox
    ну аттачнись к чьему-нибудь аддрес спейсу (KeStackAttachProcess, если ты конечно не в контексте валидного юзермодного процесса. если уже в нем, то пропускай этот этап), промапь буфер в юзермод (MmMapLockedPages), и спокойно вызывай, раз говоршь что проверяет.. но, насколько я помню, буфер не проверяется на положение в юзермодном АП. видно это либо твоя ошибка в чемто, либо новые премудрости 2к3.