Форум программистов, компьютерный форум, киберфорум
Программирование драйверов
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
0 / 0 / 0
Регистрация: 04.03.2010
Сообщений: 10

Непонятная ошибка компиляции драйвера

26.06.2010, 23:13. Показов 2912. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
Начал изучать программирование драйверов по книге "Солдатов В.П. Программирование драйверов Windows".
Дошел до главы 3 "Простой драйвер 'в-стиле-NT': Example.sys". и скопировал без изменения весь исходный код как было сказанно.
Запукаю оболочку "Пуск -> Все программы -> Windows Driver Kits -> WDK 7600.16385.1 -> Build Environments -> Windows XP -> x86 Checked Build Environment" и перехожу в каталок с проектом.
Запускаю build.
Вот кусок кода где выдается ошибка
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject,
                      IN PUNICODE_STRING RegistryPath  )
{
    NTSTATUS status = STATUS_SUCCESS;
    PDEVICE_OBJECT  fdo;
    UNICODE_STRING  devName;
    UNICODE_STRING symLinkName;
 
    #if DBG
    DbgPrint("=Example= In DriverEntry.");
    DbgPrint("=Example= RegistryPath = %ws.", RegistryPath->Buffer);
    #endif
 
    DriverObject->DriverUnload = UnloadRoutine;
    DriverObject->MajorFunction[IRP_MJ_CREATE]= Create_File_IRPprocessing;
    DriverObject->MajorFunction[IRP_MJ_CLOSE] = Close_HandleIRPprocessing;
    DriverObject->MajorFunction[IRP_MJ_READ]  = ReadWrite_IRPhandler;
    DriverObject->MajorFunction[IRP_MJ_WRITE] = ReadWrite_IRPhandler;
    DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL]= DeviceControlRoutine;
    
    RtlInitUnicodeString( &devName, L"\\Device\\EXAMPLE" );
 
    status = IoCreateDevice(DriverObject,
                            sizeof(EXAMPLE_DEVICE_EXTENSION),
                            &devName, // может быть и NULL
                            FILE_DEVICE_UNKNOWN,
                            0,
                            FALSE, // без эксклюзивного доступа
                            &fdo);
    if(!NT_SUCCESS(status)) return status;
 
    PEXAMPLE_DEVICE_EXTENSION dx = (PEXAMPLE_DEVICE_EXTENSION)fdo->DeviceExtension;
    dx->fdo = fdo;  // Сохраняем обратный указатель
ошибка на предпоследней строке PEXAMPLE_DEVICE_EXTENSION dx = (PEXAMPLE_DEVICE_EXTENSION)fdo->DeviceExtension; компилятор выдал error c2275 'PEXAMPLE_DEVICE_EXTENSION ' illegal use of this type as an expression.

Проблема решилась простой перестановкой объявления PEXAMPLE_DEVICE_EXTENSION dx в начало метода DriverEntry, и оно стало выглядеть вот так
C
1
2
3
4
5
    NTSTATUS status = STATUS_SUCCESS;
    PDEVICE_OBJECT  fdo;
        PEXAMPLE_DEVICE_EXTENSION dx;
    UNICODE_STRING  devName;
    UNICODE_STRING symLinkName;
Компиляция прошла успешно. О_о
Что же повлияло на такое странное поведение?

Ну это еще ладно. Примерно 2 мес назад, программировал сетевое приложение на си в Linux.
Была примерно такая-же проблема, только не хотела работать функция. компиляция проходила успешно, а вот на этапе тестирования происходило зависание. Решение было такое-же, переставлял методы местами но при этом сохраняя логику построения программы, и она заработала!!!!

Если кто встречался с такими ситуациями или знает из-за чего это все происходит, напишите что делать.

Заранее очень благодарен!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.06.2010, 23:13
Ответы с готовыми решениями:

Как управлять процессом компиляции и сборки драйвера
Здравствуйте. Некоторое время назад, появилось у меня желание заняться декомпиляцией одного драйвера. Зачем мне это нужно? - да из...

Непонятная ошибка компиляции
#include <iostream> #include <string> #include <map> #include <set> using namespace std; class List { public: List() {...

Unity2D, Непонятная ошибка при компиляции
При компиляции возникает такая ошибка: (!IsPowerOfTwo(width) || !IsPowerOfTwo(height)) && !IsNPOTTextureAllowed(mipCount > 1) ...

2
28 / 24 / 0
Регистрация: 03.02.2010
Сообщений: 66
27.06.2010, 06:42
Вы файл назвали drive.c или driver.cpp? В первом случае, компилятор посчитал что в файле Сишный код, а он иногда бывает чувствителен к месту где определена переменная. Я не специалист конечно, но, думаю что он требует что бы локальные переменные определялись где то в начале функции.
0
0 / 0 / 0
Регистрация: 04.03.2010
Сообщений: 10
27.06.2010, 10:47  [ТС]
Вобще то это заголовочный файл driver.h
А в будущем буду объявлять переменные в начале тела метода, а то потратил на поиск ошибки часа 2 наверно.
Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.06.2010, 10:47
Помогаю со студенческими работами здесь

Непонятная ошибка после хорошей компиляции
#include <stdio.h> int main(void) { int k = 100; /*do { printf("Сколько копеек составляет сдача?...

Непонятная ошибка (возможно баг?) при компиляции
Есть некая функция обхода двух векторов одновременно,и в ней присутсвует такой вот цикл (просто эксперимент): for...

Непонятная ошибка при компиляции: Не удается открыть файл включение
Доброго времени суток. Подскажите что не так. Написал программку, но у меня на компе она не компилируется. У друга же все прекрасно...

Ошибка компиляции драйвера
Компилирую файл драйвера утилитой Build, выдается ошибка: environment variable NTMAKEENV must be defined. NTMAKEENV у меня написано в файле...

Непонятная ошибка
Warning: Integer operands are required for colon operator when used as index в строчке:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru