Разработка 64-х битных драйверов под Vista

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

  1. z0mailbox

    z0mailbox z0

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

    DeRekX New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2007
    Сообщения:
    98
    Адрес:
    Russia
    Посоветуйте,
    чем отлаживать драйвера на Vista64

    Проблема в том, что на Vista64 GUI прожка выдаёт ошибку Parameter is not correct (могу чуть путать)
    при вызове функции DeviceIoControl(), параметрами которой являются структуры.
    на 32-х битах всё работает.

    В чём может быть ошибка.

    Драйвер собирается как 64 битный, а програмка идёт 32-х битная и эмулируется в WoW64.
     
  3. Cock

    Cock New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    148
    32 битные приложения не могут слать запросы такие 64 битным драйверам
     
  4. DeRekX

    DeRekX New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2007
    Сообщения:
    98
    Адрес:
    Russia
    Как тогда лучше сделать?

    Используется очень большой проект и его целиком перевести на 64 нет возможности.
    С драйвером взаимодействуют только две dll, если я их "переведу" на 64 , всё будет работать ?
     
  5. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    ничего не понял, у меня есть х86 приложение которое вызывает DeviceIoControl для х64 драйвера драйвер принимает запрос успешно. Насколько я понимаю специально сделано для совместимоси и какраз таких вот случаев как привёл DeRekX
    должно
     
  6. roman_pro

    roman_pro New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    291
  7. Agent666

    Agent666 New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    98
    Не надейтесь, что эта тулза будет долго работать. Имхо в следующих апдейтах висты забанят сертификат которым подписан ее драйвер, и все, приплыли тапочки.
     
  8. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    DeRekX
    А как ты их загрузишь в 32битный процесс? :)
     
  9. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    IceStudent ?
    гхм... переводить нужно ессесно не юзермод а драйвера, а юзермод оставлять
     
  10. DeRekX

    DeRekX New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2007
    Сообщения:
    98
    Адрес:
    Russia
    IceStudent
    ... как бы

    Но честно пока не пробовал запускать х64 драйвер на х64 dll, есть проблемы при сборке новых dll

    rain
    Но Cock говорит
    Необходимо разобраться
     
  11. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Cock
    Могут.

    DeRekX
    Откуда цитата? Или кто "они"?
     
  12. DeRekX

    DeRekX New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2007
    Сообщения:
    98
    Адрес:
    Russia
    IceStudent
    Цитаты из разговора с человеком, которые занимался этим проектом.
    имеется ввиду программа и две dll
     
  13. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Конечно могут слать запросы - возьми для теста KmdManager он ведь 32х битный. Запусти на 64 битной винде и загружай 64 битный драйвер. Все будет работать.
     
  14. DeRekX

    DeRekX New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2007
    Сообщения:
    98
    Адрес:
    Russia
    all спасибо за ответы

    При запуске на Висте драйвера с помощью DriverMonitor возникает ошибка
    ERROR(1058) The driver is marked as disabled (Start=4) in its service database entry.

    В драйвере изменил только тип
    inline void * __cdecl operator new( unsigned int nSize, void *pMem)
    на
    inline void * __cdecl operator new( size_t nSize, void *pMem)

    так потребовала BUILD: error C2821: first formal parameter to 'operator new' must be 'size_t'.
    после этого всё скомпилилось.
    Такие изменения могут повлиять на работоспособность драйвера?

    Как ошибку 1058 можно исправить?
    Заранее благодарен
     
  15. Cock

    Cock New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    148
    Cock ввел в заблуждение, сам же слал devioctl kmdmanager'om 64-битному драйверу запросы
     
  16. Sgt_Riggs

    Sgt_Riggs New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    1
    Никак не могу найти WDK Build 6001.16549 на коннекте. Кто-нибудь знает, где его найти? В Available Connections у меня его нет.
     
  17. DeRekX

    DeRekX New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2007
    Сообщения:
    98
    Адрес:
    Russia
    Sgt_Riggs смотри личку
    all спасибо за ответы
    всё правильно, запросы DeviceIoControl() корректно работают на 64 битах, в моём случае ошибка была в различие размеров структур которые присылает програмка x32 драйверу x64 и которую знает новый драйвер.

    Подробнее
    _http://msdn2.microsoft.com/en-us/library/aa489618.aspx
    _http://msdn2.microsoft.com/en-us/library/Aa489647.aspx
     
  18. DeRekX

    DeRekX New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2007
    Сообщения:
    98
    Адрес:
    Russia
    Хочу компилировать драйвера под 32 и под 64 бита изменяя только пунктик в студии (Platform)

    Проблема при компиляции драйвера в 2005 студии
    Проект настраивал как сказано здесь _http://alter.org.ua/ru/docs/nt_kernel/vc8_proj/
    Использовал WDK (6000 для Висты)

    под 32 бита пример того драйвера собирается без проблем.

    под 64 говорит
    D:\WINDDK\6000\inc\api\ntdef.h(106) : fatal error C1189: #error : "No Target Architecture"

    возможно проблема в предопределенных константах ("Preprocessor definitions")
    WIN32 заменил на _WIN64;_M_X64
    но не помогло, ошибка осталась

    может кто-то уже с этим встречался?
    Заранее благодарен
     
  19. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    _AMD64_
     
  20. DeRekX

    DeRekX New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2007
    Сообщения:
    98
    Адрес:
    Russia
    Спасибо, rain, всё компилится

    Ошибка при сборке драйвера

    error C2220: warning treated as error - no 'object' file generated

    в строчке pReply->SharedMemory = m_dataBuffer.MapToUsermode();

    собираю под x64 с помошью WDK (Vista and Server 2008 x64 Free)
    SharedMemory и значение MapToUsermode() имеют тип PVOID
    в checked всё ok, а в free - такой error

    В чём может быть причина?
    Как её устранить?

    Заранее благодарен