Написание драйвера под WinXP
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.249] |
|
|
Правила раздела Visual C++ / MFC / WTL (далее Раздела)
FAQ Раздела
Обновления для FAQ Раздела
Поиск по Разделу
MSDN Library Online
Написание драйвера под WinXP
|
Сообщ.
#1
,
|
|
|
|
Первый раз столкнулся с проблемой написания драйвера - естественно возникли проблемы.
Рекомендуемая среда разработки для написания драйверов Visual C (не C++!). У меня под рукой оказалась только мокрософтофская Visual Studio C++. При компиляции была найдена ошибка в windef.h. Ругается на строку *PCONTEXT <имя переменной>. Ошибка следующая пропущена ";" или неизвестный тип *PCONTEXT. Выше в библиотеке есть сточка typedef *PCONTEXT CONTEXT. Вообщем хня какая-то. Использовал файл из набора DDK for WinXP SP1. Кто-нибудь встречался с подобной ситуацией? (может дело в компиляторе=среда разработки?) Еще выскакивает ошибочка о неправильной целевой архитектуре или типа того. Значит ли это что DDK for WinXP SP1 не подходит для разработки дров под WinXP SP2? |
|
Сообщ.
#2
,
|
|
|
|
Дело вовсе не в компиляторе а в банальном незнании языка.
|
|
Сообщ.
#3
,
|
|
|
|
![]() ![]() Visual C (не C++!). Что то я не понял... stKlaus - а что означает Visual перед С? |
|
Сообщ.
#4
,
|
|
|
|
Я даже не знаю с какого конца начать объяснять в чем дело.
typedef *PCONTEXT CONTEXT; означает что отныне PCONTEXT == CONTEXT* Определения, где тип переменной начинается со звездочки - вообще недопустимы |
|
Сообщ.
#5
,
|
|
|
|
Цитата MaIron @ ![]() ![]() Visual C (не C++!). Что то я не понял... stKlaus - а что означает Visual перед С? Microsoft Visual C, как говорят, это мамонт существовавщий до Microsoft Visual Studio. Сбился с ног никак дистрибутив нарыть не могу. 2 HOMO_PROGRAMMATIS: Т.е. мокрософты выпускают гнилые ДДК? А по поводу незнания... просто никогда не возникало желания править стандартные библиотеки, поэтому и решил спросить: может кто-нибудь уже сталкивался с этой проблемой. |
|
Сообщ.
#6
,
|
|
|
|
Цитата stKlaus @ 2 HOMO_PROGRAMMATIS: Т.е. мокрософты выпускают гнилые ДДК? А по поводу незнания... просто никогда не возникало желания править стандартные библиотеки, поэтому и решил спросить: может кто-нибудь уже сталкивался с этой проблемой. Ну, почему собственно гнилые, не такие уж и плохие ДДК от мелкомягких а чем собственно C++ не угодил, объективные причины плиз, а не слышал что это быстрее работать может будет, а может и нет . Ну а если всеж С чистый то мир не замыкается на компилере от MS есть куча других в том числе и фриварных ... |
|
Сообщ.
#7
,
|
|
|
|
В упор не найду в файле windef.h такого объявления, потому что его там и нет, и не было.
А вот в winnt.h оно есть, только записывается вот так: ![]() ![]() typedef CONTEXT *PCONTEXT; И подключается оно include-ом в файле windef.h Подозреваю что Вы неправильно настрояли среду для коппиляции!!! пытаетесь компилить драйвера в среде для компиляции WIN32 приложений. Проверте порядок подключения Include в настройках компилятора, и собственно вызовы include в Вашем драйвере! |
|
Сообщ.
#8
,
|
|
|
|
Извините. Действительно ошибся))) Писал по памяти (колдую дома), а И-нет только на работе(.
- В настройках среды прописывал пути для подключения библиотек и файлов-заголовков. DDKшные пути расположил в начале списка путей (сверху). Листинг привожу ниже: Цитата #include <ntddk.h> #include "driver.h" #define DEBUG /* Создаем макрос для вывода отладочных сообщений в случае компиляции с директивой DEBUG */ #ifdef DEBUG #define DPRINT DbgPrint #else #define DPRINT #endif VOID DriverUnload(IN PDRIVER_OBJECT DriverObject) { DPRINT("Driver unloaded"); return; } NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) { DPRINT("Driver loaded"); return STATUS_SUCCESS; } //Взято отсюда - Я лично ничего не имею против С++. Но при попытке откомпилить драйвер в Borland C++ Buider (все лабораторные и курсачи до этого делались в нем) мне было вежливо сообщено, что данный компилятор не подходит для разработки драйверов. + в той же статье я увидел: Цитата Начнем с вполне документированного способа: написания драйвера. Для этого нам понадобиться Visual C++ 6.0 (или позже) и комплект DDK (Driver Development Kit). DDK идет под конкретную версию Windows NT, и раньше был доступен для скачивания с сайта Microsoft, но теперь мелкомягкие стали требовать за него денег. Однако, при большом желании, DDK всё же можно найти. Подойдет практически любая версия. После установки DDK можно приступать к созданию шаблона простейшего драйвера. Подытоживая все сказанное: если кто-нибудь писал дрова под винХР - скажите на чем вели разработку. |
|
Сообщ.
#9
,
|
|
|
|
Проблема решена.
Поставил Visual Studio 2005, DDK for WinXP SP1 и откомпилировал драйвер спомощью утилиты build. Спасибо за помощь всем кто откликнулся. Тема закрыта. |