Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Разработка драйверов под x64 (Windows 7, Windows Server 2008)  (Прочитано 9773 раз)
0 Пользователей и 1 Гость смотрят эту тему.
SergeiS
Участник

ru
Offline Offline

« : 11-01-2013 11:50 » 

Здравствуйте!
Рад снова оказаться на форуме. В прошлый раз (довольно  давно) очень помогли, особенно Ochkarik за что огромное спасибо!) Тогда я воевал с устройством на PCI, режимом DMA, Continuous Kernel Buffers и Scatter/Gather Lists причем на ассемблере)
Все хорошо получилось под x32 и WinXP. Но вот встала задача перехода на платформы x64. Какой бы я ни был фанат ассемблера но понимаю что теперь лучше использовать Visual C++ (у меня есть бесплатная версия VC Express 2010) и, видимо, каким то пакетом разработки KDF или WDF? Прошу прощения если напутал с названиями. Вопрос главный вот в чем, насколько принципиально сильные отличия в разработке драйверов для x32 и для x64 ? И какую литературу лучше всего почитать чтобы побыстрее осуществить этот переход? А так же какую среду разработки предпочтительнее устанавливать (DDK, WDK, KDF, WDF)?
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 11-01-2013 12:51 » 

различия в платформах - все указатели стали 64-битными.
все структуры в которых были использованы указатели - попыли и изменили размер)
выравнивание.... ну оно там 8 байт минимум и было по-моему.
дополнительно при работе с приложениями - можно поддерживать два варианта приложений 32 и 64 (по крайней мере я поддержал оба, чтобы можно было старые 32 разрядные приложения запускать в 64 винде)- тип приложения от которого пришел запрос можно определить при помощи IoIs32bitProcess(Irp) в обработчике IOCTL.
то есть, если отдаете адреса буферов в приложение 32 бита их надо сконвертить из 64 бит макросом типа PtrToUlong(lpTemp64);

насчет express не уверен - будет ли она дрова компилить не пробовал. но какие то ограничения там были.
WDF - надстройка над WDM по типу классов. KDF и UMDF - ее части (кернел и юзер мод для дров режима ядра и пользователя)
в теме со списком литературы кажется кидал ссылку на коротенький обзор как с WDM перебраться на WDF. плюс книга Пенни Орвик.
литература по 32/64... где то на майкрофофте была статейка...
Programming Issues for 64-Bit Drivers (Windows Drivers)
64-bit Driver Guidelines

PS и поищите по форуму, похожие темы уже были.

PPS макрос для компилятора
Код: (C++)
#ifdef _AMD64_
        if (IoIs32bitProcess(Irp))
        {
         }
#endif
« Последнее редактирование: 11-01-2013 13:03 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
SergeiS
Участник

ru
Offline Offline

« Ответ #2 : 11-01-2013 13:27 » 

Огромное спасибо! Буду читать, разбираться. Пенни Орвик есть у Вас в списке литературы на сайте ?
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 11-01-2013 14:59 » 

канешно!)
хотя я честно говоря не осилил) до сих пор пишу для WDM и переходить не спешу)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
sabbatazh
Помогающий

ua
Offline Offline

« Ответ #4 : 11-02-2013 21:35 » 

SergeiS, подобный вопрос подымался https://forum.shelek.ru/index.php/topic,28678.0.html и я победил эту проблему...

Добавлено через 18 секунд:
Спасибо Ochkarik!
« Последнее редактирование: 11-02-2013 21:35 от sabbatazh » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines