ntddk.h и winnt.h в драйвере

Тема в разделе "WASM.BEGINNERS", создана пользователем IceFire, 21 сен 2009.

  1. IceFire

    IceFire New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2006
    Сообщения:
    244
    Пытаюсь использовать winnt.h в драйвере. Понадобились оттуда структуры (ну не описывать же заново весь PE-формат). При попытке подключения его получаю кучу ошибок:

    Гуглил, нашел решения вида: убрать хидеры в свое пространство имен, сделал так:

    Код (Text):
    1. namespace NT
    2. {
    3.     extern "C"
    4.     {
    5.         #pragma warning(disable:4005)
    6.         #pragma warning(disable:4200)
    7.     #include <windows.h>
    8.     #include <winnt.h>
    9.         #pragma warning(default:4005)
    10.         #pragma warning(default:4200)
    11.     }
    12. }
    , но появились новые ошибки:

    Подскажите, пожалуйста.
     
  2. Forever

    Forever Виталий

    Публикаций:
    0
    Регистрация:
    12 апр 2008
    Сообщения:
    244
    Если тебе нужны структуры PE файла подключай ntimage.h вместо winnt.h.
     
  3. IceFire

    IceFire New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2006
    Сообщения:
    244
    Forever

    Спасибо, так и сделал.

    Но хотелось бы услышать ответ про winnt.h. Как одновременно с ntddk.h его заставить работать? Просто интересно.
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Ну либо шаманить с неймспейсами (в конце концов заработает,проверял), но гораздо проще описать нужные структуры/функции вручную.
    МС как назло сделали ддк и сдк несовместимыми (и вообще у них для использования _всего_ нужно подключить один заголовочный файл - это плохая идеология. как надо было сделать - см. STL)
     
  5. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    ddk и sdk еще хрен с ним а вот когда ntddk.h несовместим блин с ntifs.h а в дрове юзаются оба - вот тут уже маму билли вспоминаю очень громко
     
  6. IceFire

    IceFire New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2006
    Сообщения:
    244
    Great

    Подскажи, как описать ф-цию DeviceIoControl в драйвере, если подключен ntifs.h, у меня не получается.
     
  7. o14189

    o14189 New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2009
    Сообщения:
    320
    а зачем в драйвере DeviceIoControl?
     
  8. IceFire

    IceFire New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2006
    Сообщения:
    244
    o14189

    Мне надо отправить FSCTL_GET_NTFS_VOLUME_DATA физическому диску. Есть другие способы?
     
  9. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    DeviceIoControl - это WinAPI.
     
  10. IceFire

    IceFire New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2006
    Сообщения:
    244
    n0name

    Это понятно. Вопрос в том, как подключить windows.h совместно с ntifs.h. Они, видимо, несовместимы.
     
  11. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    IceFire
    вызывать из драйвера WinAPI - плохая идея. Хотя смотря какой ожидается результат.
     
  12. o14189

    o14189 New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2009
    Сообщения:
    320
    IceFire
    FSCTL_GET_NTFS_VOLUME_DATA в ntifs.h есть
    ZwDeviceIoControlFile и всякие функции для работы с irp тоже есть
    чего еще нужно неясно
     
  13. IceFire

    IceFire New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2006
    Сообщения:
    244
    o14189

    Спасибо. Попробую с ZwDeviceIoControlFile.
     
  14. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    обычно используют IoCallDriver()