"статическая" компиляция драйвера

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

  1. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    Драйвер компилируется с usbd.lib. В файле Sources:
    Код (Text):
    1. TARGETLIBS = $(DDK_LIB_PATH)\usbd.lib
    При загрузке драйвера, если usbd.sys отсутствует в системе (например, виртуальная машина) - драйвер даже не запускается. Если положить usbd.sys в ту же дирректорию - все в порядке. Как я понимаю существует некий аналог delayed loading для драйвера. А можно ли скомпилировать драйвер "статически", чтоб убрать зависимость от usbd.sys?
     
  2. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Статически нельзя, если у тебя нет соответствующего .lib-файла, содержащего не только символы, но и сам код. Для usbd.sys у тебя его, понятное дело, нет. Решением проблемы здесь было бы прописывание собственного драйвера в группу запуска, которая имеет более низкий приоритет, короче говоря, тебе нужно добиться того, чтобы твой драйвер грузился позже.
     
  3. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    x64
    Проблема в том, что иногда usbd.sys банальным образом отсустствует в системе.
     
  4. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Грузи его динамически, в чём проблема-то? ZwLoadDriver() тебе в помощь, если вернёт ошибку - значит драйвера такого нет, если всё нормально, значит драйвер загрузился и можешь делать своё чёрное дело.
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    x64
    Кстати у меня ,когда я последний раз пробовал так делать, ZwLoadDriver в контексте System (короче из под другого драйвера в момент загрузки того) возвращала STATUS_INVALID_PARAMETER или что-то в этом роде, хотя аналогичный вызов из ринг3 аппликухи срабатывал нормально. Мне тогда было лень разбираться. Но все-таки интересно.
    Тогда проблему решил тем, что у меня был готовый PE лоадер, который просто одним движением руки направился в этот драйвер и с легкостью подгружал к нему другие драйвера)
     
  6. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    А есть ли "ядерный" аналог GetProcAddress ?
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    katrus
    Помню два аналога, одна функция экспортируется, другая нет.
    PspLookupSystemDllEntryPoint() вызывает функцию, которая определяет в модуле адрес функции, но она в секции .init
    MmGetSystemRoutineAddress(), юзоет также не экспортируемую MiFindExportedRoutineByName().
     
  8. bugaga

    bugaga New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2007
    Сообщения:
    361
    А что
    [qoute]link -lib[/qoute]
    отменили? Вытащить *.obj-ектник который тянет зваисимость, отдизасмить, закоментить, пересобрать и опять добавить в либу, делов-то.
     
  9. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    ыы)
    даже если и получится собрать, работать будет наврядли. Наверняка функции обращаются к каким-нибудь глобальным переменным. И в новой статической копии usbd глобальные перменные будут неинициализированы или содержать не те значения
     
  10. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    bugaga
    Ну это уже "партизаншина" начинается. Проще добавить usbd.sys в каталог программы.

    Всем большое спасибо!
     
  11. JivotnoE

    JivotnoE New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2009
    Сообщения:
    10
    Great
    Ничего из вышесказанного нет.
    Декомпилим usbd.sys - Vista, XP все работает.