Форум программистов, компьютерный форум CyberForum.ru

Ошибка компиляции драйвера - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
fredwriter
7 / 7 / 1
Регистрация: 17.10.2009
Сообщений: 269
25.10.2011, 14:41     Ошибка компиляции драйвера #1
Компилирую файл драйвера утилитой Build, выдается ошибка: environment variable NTMAKEENV must be defined. NTMAKEENV у меня написано в файле MakeFile.mak, ниже текст этого файла:

# DO NOT EDIT THIS FILE!!! Edit.\sourses. if you want to add a new source
# file to this component/ This file merely indirects to the real make file
# that is shared by all the driver components of the Windows NT DDK
#
! INCLUDE $(NTMAKEENV) \ makefile.mak
#
Подскажите пожалуйста.

Добавлено через 26 минут
Ау, люди. Я не вовремя?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.10.2011, 14:41     Ошибка компиляции драйвера
Посмотрите здесь:

C++ Ошибка компиляции
C++ Ошибка компиляции
ошибка компиляции C++
Ошибка компиляции C++
C++ Ошибка компиляции
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
amatorIP
 Аватар для amatorIP
3 / 3 / 0
Регистрация: 22.07.2010
Сообщений: 141
25.10.2011, 15:01     Ошибка компиляции драйвера #2
После запуска компилятора проверь environment, обьявлена ли там эта переменная. Скорей всего нет.
fredwriter
7 / 7 / 1
Регистрация: 17.10.2009
Сообщений: 269
25.10.2011, 17:06  [ТС]     Ошибка компиляции драйвера #3
Извиняюсь за несообразительность, что значит проверь environment?

Добавлено через 1 час 24 минуты
Разобрался вроде, нужно было создать переменную среды, я создал, опять запустил Build, всё вроде сработало, но я не понял, а что вообще делает утилита? Никаких новых файлов не появилось.

Добавлено через 36 минут
Кто-нибудь вообще работал с этой утилитой Build?
amatorIP
 Аватар для amatorIP
3 / 3 / 0
Регистрация: 22.07.2010
Сообщений: 141
25.10.2011, 22:59     Ошибка компиляции драйвера #4
environment - это так сказать рабочее окружение со всеми переменными. Его можно посмотреть с помощью команды env.

С build не работал. Даже слабо представляю что это. Makefile еще пока не отменили)
fredwriter
7 / 7 / 1
Регистрация: 17.10.2009
Сообщений: 269
26.10.2011, 06:26  [ТС]     Ошибка компиляции драйвера #5
Дело в том, amatorIP, что я учусь писать драйвера по книге, и там говориться: сначала на си создаёте файл с описанием всех функций драйвера, затем создаёте файл MyDriverEntry.mc, затем компилируете этот файл утилитой mc, и в результате получаете два файла MyDriverEntry.h и MyDriverEntry.rc, затем создаёте два файла Makefile, и source, с указанным в книге содержанием.Текст MakeFile я указал в первом посте. Затем помещаете все эти файлы (MyDriver.c, MyDriverEntry.h, MyDriverEntry.rc, Makefile, Source) в один каталог и утилитой Build.exe, которая, как я понимаю должна находиться в каталоге со всеми перечисленными файлами так как она консольная. С командной строки запускаю эту утилиту находясь в каталоге с моими файлами, и она вроде отрабатывает, даже в конце слово Done пишет, и перед ним вроде не ругается, но чё она там такое делает непонятно.

Добавлено через 12 минут
Эти все утилиты из пакета DDK
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
26.10.2011, 07:06     Ошибка компиляции драйвера #6
How to Use the Build Utility
fredwriter
7 / 7 / 1
Регистрация: 17.10.2009
Сообщений: 269
26.10.2011, 07:38  [ТС]     Ошибка компиляции драйвера #7
извините, alkagolik, я по английски ни гу гу.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
26.10.2011, 07:45     Ошибка компиляции драйвера #8
fredwriter, меняйте профессию. простите за резкость.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2011, 16:42     Ошибка компиляции драйвера
Еще ссылки по теме:

Ошибка компиляции C++
С++ Ошибка компиляции C++
C++ Ошибка компиляции

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

Или воспользуйтесь поиском по форуму:
fredwriter
7 / 7 / 1
Регистрация: 17.10.2009
Сообщений: 269
26.10.2011, 16:42  [ТС]     Ошибка компиляции драйвера #9
alkagolik, можете хотя бы прокомментировать мои действия описанные в 5 посте. Какие ошибки?

Добавлено через 22 минуты
почитал вашу, alkagolik, How to Use the Build Utility, переведенную гуглом, и после небольшого прочтения что-то натолкнуло меня на мысль обозначить переменную среды NTMAKEENV=C:\WINDDK\2600\bin\x86, и после этого еще раз использовал Build и в папке с моими файлами появился файл buildfre.log. Объясните пожалуйста бедному студенту.

Добавлено через 2 часа 15 минут
Разобрался как использовать эту утилиту Build, если DDK установлен корректно, то нужно сделать так: Пуск -> Все программы -> Development Kits -> Windows DDK 2600 -> Build Environments -> или WinXP Free Build Environment или WinXP Checked Build Environment. Если есть MakeFile, то нужно перейти в рабочую директорию командой cd и написать заветное слово Build, запустится утилита Build.exe c установленными переменными окружения и произойдет КОМПИЛЯЦИЯ(сборка) файла драйвера. Вот такие пироги. Вопрос у меня следующий: (первый раз пользуюсь этой утилитой и не было еще опыта успешного её использования) что должно произойти после использования этой утилиты? У меня только появился файл buildfre.log с одной строчкой: BUILD: Computing Include file dependencies:. Я думал, что должен был появится какие-то файлы Sys или еще что нибудь.

Добавлено через 37 минут
ау люди, кто нибудь мне подскажет? Это ж форум программистов.

Добавлено через 19 минут
Если подробнее, то у меня есть следующие файлы:
MyDriver.c, ниже его текст:
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#include <ntddk.h>
#include <MyDriverMessages.h>
 
NTSTATUS DriverEntry(IN DRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath);
 
NTSTATUS CreateMyDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
 
NTSTATUS ReadMyDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
 
NTSTATUS WriteMyDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
 
NTSTATUS ShutdownMyDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
 
NTSTATUS CleanupMyDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
 
NTSTATUS IoCtlMyDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
 
VOID MyDriverUnload (IN PDRIVER_OBJECT DeviceObject);
 
BOOLEAN GetMessage(IN NTSTATUS ErrorCode, IN PVOID IoObject, IN PIRP Irp);
 
#ifdef ALLOC_PRAGMA 
#pragma alloc_text(PAGE, GetMessage)
#endif
 
NTSTATUS DriverEntry(IN DRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
 
{
         UNICODE_STRING nameString, linkString;
         
         PDEVICE_OBJECT deviceObject;
         
         NTSTATUS status;
         
         GetMessage(MSG_DRIVER_ENTRY, DriverObject, NULL);
         
         RtlInitUnicodeString(&nameString, L"\\Device\\MyDriver");
         
         status = IoCreateDevice(DriverObject, sizeof(65533), &nameString,
                                 0, 0, FALSE, &deviceObject);
         if (!NT_SUCCESS(status))
           return status;
         deviceObject->Flags |= DO_DIRECT_IO;
         deviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
         RtlInitUnicodeString(&linkString, L"\\DosDevices\\MyDriver");
         status = IoCreateSymbolicLink(&linkString, &nameString);
         if (!NT_SUCCESS(status))
         {
           IoDeleteDevice(DriverObject->DeviceObject);
           return status;
         }
         DriverObject->MajorFunction[IRP_MJ_CREATE] = CreateMyDriver;
         DriverObject->MajorFunction[IRP_MJ_READ] = ReadMyDriver;
         DriverObject->MajorFunction[IRP_MJ_WRITE] = WriteMyDriver;
         DriverObject->MajorFunction[IRP_MJ_SHUTDOWN] = ShutdownMyDriver;
         DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = IoCtlMyDriver;
         DriverObject->DriverUnload = MyDriverUnload;
         return STATUS_SUCCESS;
}
 
 
NTSTATUS CreateMyDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);         
{
         GetMessage(MSG_CREATE, (PVOID)DeviceObject, NULL);
         IoCompleteRequest(Irp, IO NO INCREMENT);
         
         Return STATUS_SUCCESS;
}
 
 
NTSTATUS ReadMyDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
{
         GetMessage(MSG_READ, DeviceObject, NULL);
         
         return STATUS_SUCCESS;
}
         
         
NTSTATUS WriteMyDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
{
         GetMessage(MSG_WRITE, DeviceObject, NULL);
         
         return STATUS_SUCCESS;    
};    
 
 
NTSTATUS ShutdownMyDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
{
         GetMessage(MSG_SHUTDOWN, DeviceObject, NULL);
         IoCompleteReguest(Irp, IO_NO_INCREMENT);
         return STATUS_SUCCESS;
}
                  
     
NTSTATUS IoCtlMyDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
{  
         GetMessage(MSG_IOCTL, DeviceObject, NULL);
         IoCompleteRequest(Irp, IO_NO_INCREMENT);
         return STATUS_SUCCESS;
}      
         
         
VOID MyDriverUnload (IN PDRIVER_OBJECT DeviceObject);
{
     UNICODE_STRING linkString;
     GetMessage(MSG_DRIVERUNLLOAD, DriverObject, NULL);
     RtlInitUnicodeString(&linkString, L"\\DosDDevices\\MyDriver");
     IoDeleteSymbolicLink(&linkString);
     IoDeleteDevice(DriverObject->DeviceObject);
}
 
 
BOOLEAN GetMessage(IN NTSTATUS ErrorCode, IN PVOID IoObject, IN PIRP Irp);
{ 
        PIO_ERROR_LOG_PACKET Log_Packet;
        PIO_STACK_LOCATION IrpStackLocation;
        PWCHAR pInsertString; 
        STRING AnsiInsertString;
        UNICODE_STRING UniInsertString;
        UCHAR Size_of_Packet;
        Size_of_Packet = sizeof(IO_ERROR_LOG_PACKET);
        Log_Packet = IoAllocateErrorLogEntry(IoObject, Size_of_Packet);
        If (Log_Packet == NULL)
          return FALSE;
        Log_Packet->ErrorCode = ErrorCode;
        Log_Packet->UniqueErrorValue = 0;
        Log_Packet->RetryCount = 0;
        Log_Packet->SequenceNumber = 0;
        Log_Packet->IoControlCode = 0;
        Log_Packet->Dump_Data_Size = 0;
        if (Irp != NULL)
        {
                IrpStack = IoGetCurrentIrpStackLocation(Irp);
                Log_Packet->MajorFunctionCode = IrpStack->MajorFunction;
                Log_Packet->FinalStatus = Irp->IoStatus.Status;
        }
        else
        {
            Log_Packet->MajorFunctionCode = 0;
            Log_Packet->FinalStatus = 0;
        } 
        IoWriteErrorLogEntry(Log_Packet);
        return TRUE;
}
Файл MyDriverMessager.mc ниже его текст:
MessageID = 1
Severity = Informational
SymbolicName = MSG_DRIVER_ENTRY
Language = English
Driver Entry
.
MessageID = 2
Severity = Informational
SymbolicName = MSG_CREATE
Language = English
Create
.
MessageID = 3
Severity = Informational
SymbolicName = MSG_READ
Language = English
Read
.
MessageID = 4
Severity = Informational
SymbolicName = MSG_WRITE
Language = English
Write
.
MessageID = 5
Severity = Informational
SymbolicName = MSG_SHUTDOWN
Language = English
Shutdown
.
MessageID = 6
Severity = Informational
SymbolicName = MSG_IOCTL
Language = English
IoCtl
.
MessageID = 7
Severity = Informational
SymbolicName = MSG_DRIVERUNLOAD
Language = English
Unload
.

Файлы MyDriverMessages.rc, MyDriverMessages.h Созданные утилитой MC,

Makefile - MakeFile.mak
его текст я уже приводил,

и файл Source.src ниже его текст:
TARGETNAME = MYDRIVER
TARGETTYPE = DRIVER
#DRIVERTYPE = WDM
TARGETPATH = obj
SOURCES = MyDriver.c MyDriverMessages.rc
C_DEFINES = -DUNICODE -DSTRICT

из этих файлов то и должна, как написано в книге, утилита Build собрать файл драйвера.

Добавлено через 2 часа 8 минут
Кто хочет поговорить о компиляции драйвера?
Yandex
Объявления
26.10.2011, 16:42     Ошибка компиляции драйвера
Ответ Создать тему
Опции темы

Текущее время: 21:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru