С Новым годом! Форум программистов, компьютерный форум, киберфорум
Программирование драйверов
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
1 / 1 / 0
Регистрация: 19.10.2017
Сообщений: 60

Не могу скомпилировать простой драйвер

28.10.2019, 23:13. Показов 2635. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. За https://habr.com/ru/post/40466/ попробывал создать но проблема в тому, что получаю купу ошибок (см. скрин).
Пробывал через консоль EWDK компилировать - получал те самые ошибки. Пожалуйста помогите решить проблему. Заранее благодарен.

Код MyDriver:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// MyDriver.c
#include "ntddk.h"
 
 
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath);
VOID UnloadRoutine(IN PDRIVER_OBJECT DriverObject);
 
#pragma alloc_text(INIT, DriverEntry)
#pragma alloc_text(PAGE, UnloadRoutine)
 
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
{
    DriverObject->DriverUnload = UnloadRoutine;
 
    DbgPrint("Hello world!\n");
 
    return STATUS_SUCCESS;
}
 
VOID UnloadRoutine(IN PDRIVER_OBJECT DriverObject)
{
    DbgPrint("Goodbye!\n");
}
Код MAKEFILE:

######################################## ##########
# DO NOT EDIT THIS FILE!!! Edit .\sources. 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.def
######################################## ##########

Код sources:

######################################## ##########
TARGETNAME=MyDriver
TARGETTYPE=DRIVER

SOURCES=MyDriver.c
######################################## ##########
Миниатюры
Не могу скомпилировать простой драйвер  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.10.2019, 23:13
Ответы с готовыми решениями:

Скомпилировать драйвер под x86 и x64
Добрый день! Не получается скомпилировать драйвер на 2015 студии, все пакеты для работы с драйверами поставил. Может моя студия не...

Скомпилировать драйвер cPCI-7841 под ядро 3.5
Такая ситуация. Есть плата CAN интерфейс CompactPCI - cPCI-7841 (Adlink) Под неё производитель предлагает драйвера для ядра 2.6.25 У...

Нужно скомпилировать драйвер для модема на Linux Mint 19.3
Имеется модем на компьютере. После установки ОС модем работал, но, во-первых, не находил сети 5GHz (и модем, и роутер поддерживают, до...

3
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
29.10.2019, 21:50
Вот ты так компилировал ?

Пуск->Программы->Windows Driver Kits->....->Build Environments->WindowsXP->Windows XP x86 Checked Build Environment»). В открывшемся консольном окне переходим в директорию, куда мы положили файл с драйвером (у меня это C:\Drivers\TestDriver) с помощью команды cd (у меня команда выглядит следующим образом: cd C:\Drivers\TestDriver) и набираем команду build.

Просто если сделать так, то не должно быть никаких проблем.

Eсли ты хочешь компилировать чем-то другим, то тебе надо сделать кучу #define разных параметров целевой компиляции.
Например первая ошибка у тебя из-за того, что не определено ни одного из
#if !(defined(_X86_) || defined(_AMD64_) || defined(_IA64_))
#error "No target architecture defined"
#endif
т.е. ты не определил для какой архитектуры компилируешь и условная трансляция в ntddk.h не идет ни по одной из возможных веток.
0
1 / 1 / 0
Регистрация: 19.10.2017
Сообщений: 60
30.10.2019, 22:25  [ТС]
Здравствуйте.
"Пуск->Программы->Windows Driver Kits->....->Build Environments->WindowsXP->Windows XP x86 Checked Build Environment»). В открывшемся консольном окне переходим в директорию, куда мы положили файл с драйвером (у меня это C:\Drivers\TestDriver) с помощью команды cd (у меня команда выглядит следующим образом: cd C:\Drivers\TestDriver) и набираем команду build." к сожалению так скомпилировать не смог, так как стаття за 2008 и теперь WDK, как я понимаю, выглядит иначе.
"т.е. ты не определил для какой архитектуры компилируешь и условная трансляция в ntddk.h не идет ни по одной из возможных веток." подскажите, а как нужно определить?
0
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
01.11.2019, 07:46
Cудя по вопросу ты не справишься. Вот смотри. Чтобы, к примеру, откомпилировать драйвер для Win7 x32 используя утилиту build из DDK , но не исполняя предварительно
"Пуск->Программы->Windows Driver Kits->....->Build Environments->Windows 7->Windows 7 x86 Free Build
нужно исполнить такой bat-файл :
Windows Batch file
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
set 386=1
set ATL_INC_PATH=C:\WinDDK\inc
set ATL_INC_ROOT=C:\WinDDK\inc
set ATL_LIB_PATH=C:\WinDDK\lib\atl\*
set BASEDIR=C:\WinDDK
set BUFFER_OVERFLOW_CHECKS=1
set BUILD_ALT_DIR=fre_win7_x86
set BUILD_DEFAULT=-ei -nmake -i -nosqm
set BUILD_DEFAULT_TARGETS=-386
set BUILD_MAKE_PROGRAM=nmake.exe
set BUILD_MULTIPROCESSOR=1
set COFFBASE_TXT_FILE=C:\WinDDK\bin\coffbase.txt
set CPU=AMD64
set CRT_INC_PATH=C:\WinDDK\inc\crt
set CRT_LIB_PATH=C:\WinDDK\lib\crt\*
set DDKBUILDENV=fre
set DDK_INC_PATH=C:\WinDDK\inc\ddk
set DDK_LIB_DEST=C:\WinDDK\lib\win7
set DDK_LIB_PATH=C:\WinDDK\lib\win7\*
set DDK_TARGET_OS=Win7
set DRIVER_INC_PATH=C:\WinDDK\inc\ddk
set HALKIT_INC_PATH=C:\WinDDK\inc\ddk
set HALKIT_LIB_PATH=C:\WinDDK\lib\win7\*
set IFSKIT_INC_PATH=C:\WinDDK\inc\ddk
set IFSKIT_LIB_DEST=C:\WinDDK\lib\win7
set IFSKIT_LIB_PATH=C:\WinDDK\lib\win7\*
set Include=C:\WinDDK\inc\api
set KMDF_INC_PATH=C:\WinDDK\inc\wdf\kmdf
set KMDF_LIB_PATH=C:\WinDDK\lib\wdf\kmdf\*
set LANGUAGE_NEUTRAL=0
set Lib=C:\WinDDK\lib
set LINK_LIB_IGNORE=4198
set MFC_INC_PATH=C:\WinDDK\inc\mfc42
set MFC_LIB_PATH=C:\WinDDK\lib\mfc\*
set NEW_CRTS=1
set NO_BINPLACE=TRUE
set NO_BROWSER_FILE=TRUE
set NTDBGFILES=1
set NTDEBUG=ntsdnodbg
set NTDEBUGTYPE=windbg
set NTMAKEENV=C:\WinDDK\bin
set OAK_INC_PATH=C:\WinDDK\inc\api
Path=C:\WinDDK\bin\amd64;C:\WinDDK\tools\sdv\bin;C:\WinDDK\tools\pfd\bin\bin\x86;C:\WinDDK\tools\tracing\i386;C:\WinDDK\bin\x86;C:\WinDDK\bin\x86\x86;C:\WinDDK\bin\SelfSign
set PROJECT_ROOT=C:\WinDDK\src
set PUBLIC_ROOT=C:\WinDDK
set PUBLISH_CMD=@echo Publish not available...
set RAZZLETOOLPATH=C:\WinDDK\Bin
set RCNOFONTMAP=1
set SDK_INC_PATH=C:\WinDDK\inc\api
set SDK_LIB_DEST=C:\WinDDK\lib\win7
set SDK_LIB_PATH=C:\WinDDK\lib\win7\*
set SDV=C:\WinDDK\tools\sdv
set separate_object_root=FALSE
set UMDF_INC_PATH=C:\WinDDK\inc\wdf\umdf
set USE_OBJECT_ROOT=1
set WDM_INC_PATH=C:\WinDDK\inc\ddk
set WPP_CONFIG_PATH=C:\WinDDK\bin\wppconfig
set _AMD64bit=false
set _BUILDARCH=x86
set _BuildType=fre
set _IA32bit=true
set _NTDRIVE=C:
set _NTROOT=\WinDDK
set _NT_TARGET_VERSION=0x601
set _RunOacr=False
 
cd Win7
build
Видишь сколько тут параментов задается переменными окружения. А эти переменные потом превращаются в параметры командной строки для компилятора -I -L и самое главное -D , что задают и эквивалентны директивам
#define
внутри сишного исходника. И со всем этим надо аккуратно разобраться. Со всем что надо за#defineить и как за#defineить.

В твоем случае у тебя первая ошибка из-за того, что в исходнике не хватает определения
#define _X86_
или
#define _AMD64_
в зависимости от того для какой целевой платформы ты компилишь. Или параметров командной строки -D_X86_ или -D_AMD64_ компилятору

З.Ы. А похоже у тебя вряд ли что не получится. Посмотрел последующие ошибки, а они из-за того что в include-ах твоего компилятора нет того, что есть только в include-ах DDK. А делать мешанину h файлов от двух разных компиляторов чревато ошибками которые фиг потом отловишь, даже если синтаксическую сторону дела победишь. Используй штатные средства и не мучайся.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.11.2019, 07:46
Помогаю со студенческими работами здесь

Скомпилировать драйвер для 2.8" TFT + Touch Shield Board v2.1 (ILI9341) - Raspberry Pi B+
Исходник драйвера Второй день бьюсь, не могу скомпилировать драйвер, может кто скомпилировать? Пробовал по этой инструкции:...

Не могу скомпилировать.
Создал проект. Сохранил. Когда открываю проект открывается, но его нельзя скомпилировать. Вот скрин:

Не могу скомпилировать
Как решить?

Не могу скомпилировать?
Не могу скомпилировать программу. Каждый раз такая беда(((

Не могу скомпилировать?
Здравствуйте, помогите пожалуйста, не могу скомпилировать. Выскакивают ошибки в стандартном заголовочном файле. #include...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru