Компиляция драйвера

Тема в разделе "WASM.NT.KERNEL", создана пользователем BelowZero, 24 дек 2011.

  1. BelowZero

    BelowZero New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2011
    Сообщения:
    38
    привет всем, начинаю создавать драйверы. есть опыт в программировании (vb6), потревожу вас ещё не раз). посылаю DDK Windows server2003 checked 64 bit из винды7 64 и ХР команду на создание драйвера. вот история переписки
    C:\WINDDK\3790>cd C:\Drivers\TestDriver
    C:\Drivers\TestDriver>Build
    BUILD: Adding /Y to COPYCMD so xcopy ops won't hang.
    BUILD: Object root set to: ==> objchk_wnet_IA64
    BUILD: Compile and Link for IA64
    BUILD: Loading C:\WINDDK\3790\build.dat...
    BUILD: Computing Include file dependencies:
    BUILD: c:\drivers\testdriver\sources(0): Unknown TARGETPATH value
    BUILD: Examining c:\drivers\testdriver directory for files to compile.
    c:\drivers\testdriver - 1 source files (21 lines)
    BUILD: Saving C:\WINDDK\3790\build.dat...
    BUILD: Compiling c:\drivers\testdriver directory
    BUILD: nmake.exe failed - rc = 2
    BUILD: Linking c:\drivers\testdriver directory
    BUILD: nmake.exe failed - rc = 2
    BUILD: Done
    C:\Drivers\TestDriver>

    не знаю, в чём проблема... выложите пожалуйста драйвер, который вообще ничего не делает, и команду для его компиляции. на примере этого разберусь, почему драйвер не компилируется
     
  2. BelowZero

    BelowZero New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2011
    Сообщения:
    38
    т.е. какие файлы должны быть в папке и какую команду нужно прописать, чтобы создать sys файл?
     
  3. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    IA64 - это Итаниум. 64-бита - это x86_64 или amd64.
     
  4. BelowZero

    BelowZero New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2011
    Сообщения:
    38
    значит, проблема в DDK? подскажете, где найти подходящую?
     
  5. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    С DDK всё в порядке, если только он не очень старый у тебя (сейчас актуально WDK 7.1), надо просто выбирать правильное окружение сборки, для 64-битных драйверов это x64 Build Environment, в меню Пуск в соответствующей группе это всё есть, смотри внимательно. Кстати, действительно, насколько я помню, в каком-то DDK (то ли 2000, то ли XP) было только две платформы для сборки: x86 и IA64, так что здесь можно было перепутать, да, но это неправильно, IA64 это только для процессоров Itanium и Itanium 2.
     
  6. BelowZero

    BelowZero New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2011
    Сообщения:
    38
    у меня есть разделы
    windows server 2003 checked 64 bit build environment
    windows server 2003 checked build environment
    windows server 2003 free 64 bit build environment
    windows server 2003 free build environment
    что-то никак не получается. в наличии винда ХР и 7х64 пробовал разные комбинации... подскажите что нужно сделать...
     
  7. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Во-первых, у тебя DDK ещё от первого Server 2003 без SP.
    Во-вторых, у тебя не просто DDK, а IFS kit для Server 2003.
    В-третьих, он у тебя не полностью установлен: не хватает AMD64.

    Либо переустановить тот DDK, что у тебя уже есть, но без 64-bit, а с AMD64 bit.
    Либо скачать последний WDK 7.1 и установить его, там есть пункт x64 Build Environment.
     
  8. BelowZero

    BelowZero New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2011
    Сообщения:
    38
    скачал WDK7.1.0 с офиц сайта майкрософта теперь разделы
    ia64 checked build environment
    ia64 free build environment
    x64 checked build environment
    x64 free build environment

    теперь команда build не воспринимается нигде вообще
    Системе не удается найти указанный путь.
    C:\Windows\system32>cd C:\WORK\myDriver\TestDriver
    C:\WORK\MyDriver\TestDriver>build
    "build" не является внутренней или внешней
    командой, исполняемой программой или пакетным файлом.
    C:\WORK\MyDriver\TestDriver>
     
  9. BelowZero

    BelowZero New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2011
    Сообщения:
    38
    скачал множество разных версий, перепробовал кучу файлов. выложите плз папку, из которой в итоге получается драйвер(любой, пусть даже пустой). буду очень признателен
     
  10. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Вы Build Environment запускаете вообще?
     
  11. BelowZero

    BelowZero New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2011
    Сообщения:
    38
    скачал с офиц сайта WDK7.1.0 на винде ХР запускаю Windows XP x86 Free build environment. вод логи
    C:\WinDDK\7600.16385.1>cd C:\

    C:\>cd myDriver
    C:\MyDriver>cd TestDriver
    C:\MyDriver\TestDriver>build
    BUILD: Compile and Link for x86
    BUILD: Computing Include file dependencies:
    BUILD: Start time: Sun Dec 25 19:22:21 2011
    BUILD: Examining c:\mydriver\testdriver directory for files to compile.
    BUILD: Saving c:\winddk\7600.16385.1\build.dat...
    BUILD: Compiling and Linking c:\mydriver\testdriver directory
    Configuring OACR for 'root:x86fre' - <OACR on>
    Dec 25 19:22:36 oacr.dll OACR version change (from build '0' to '30122')
    _NT_TARGET_VERSION SET TO WINXP
    Compiling - testdriver.c
    1>errors in directory c:\mydriver\testdriver
    1>c:\mydriver\testdriver\testdriver.c(15) : error C2065: '<Hello' : undeclared i
    dentifier
    1>c:\mydriver\testdriver\testdriver.c(15) : error C2146: syntax error : missing
    ')' before identifier 'world'
    1>c:\mydriver\testdriver\testdriver.c(15) : error C2017: illegal escape sequence
    1>c:\mydriver\testdriver\testdriver.c(15) : error C2059: syntax error : ')'
    1>c:\mydriver\testdriver\testdriver.c(22) : error C2065: '<Goodbye' : undeclared
    identifier
    1>c:\mydriver\testdriver\testdriver.c(22) : error C2143: syntax error : missing
    ')' before '!'
    1>c:\mydriver\testdriver\testdriver.c(22) : error C2017: illegal escape sequence
    1>c:\mydriver\testdriver\testdriver.c(22) : error C2059: syntax error : ')'
    Linking Executable - objfre_wxp_x86\i386\testdriver.sys
    1>link : error LNK1181: cannot open input file 'c:\mydriver\testdriver\objfre_wx
    p_x86\i386\testdriver.obj'
    BUILD: Finish time: Sun Dec 25 19:22:38 2011
    BUILD: Done
    3 files compiled - 4 Warnings - 8 Errors
    1 executable built - 1 Error
    C:\MyDriver\TestDriver>
     
  12. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Простейший драйвер - собираться обязан.
    Код (Text):
    1. #include <ntddk.h>
    2. #include <ntstatus.h>
    3.  
    4. extern "C" NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
    5. {
    6.     _asm
    7.     {
    8.         xor eax, eax
    9.     }
    10.     return STATUS_DEVICE_CONFIGURATION_ERROR;
    11. }
     
  13. BelowZero

    BelowZero New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2011
    Сообщения:
    38
    спс за код драйвера, а каким должен быть код прилагаемых файлов? MAKEFILE и тд. сейчас такие логи
    OACR monitor running already

    C:\WinDDK\7600.16385.1>cd C:\myDriver\TestDriver

    C:\MyDriver\TestDriver>build
    BUILD: Compile and Link for x86
    BUILD: Loading c:\winddk\7600.16385.1\build.dat...
    BUILD: Computing Include file dependencies:
    BUILD: Start time: Sun Dec 25 21:06:44 2011
    BUILD: Examining c:\mydriver\testdriver directory for files to compile.
    BUILD: Saving c:\winddk\7600.16385.1\build.dat...
    BUILD: Compiling and Linking c:\mydriver\testdriver directory
    Configuring OACR for 'root:x86fre' - <OACR on>
    _NT_TARGET_VERSION SET TO WINXP
    Compiling - testdriver.c
    1>errors in directory c:\mydriver\testdriver
    1>c:\mydriver\testdriver\testdriver.c(4) : error C2059: syntax error : 'string'
    Linking Executable - objfre_wxp_x86\i386\testdriver.sys
    1>link : error LNK1181: cannot open input file 'c:\mydriver\testdriver\objfre_wx
    p_x86\i386\testdriver.obj'
    BUILD: Finish time: Sun Dec 25 21:07:01 2011
    BUILD: Done

    3 files compiled - 1 Error - 11 LPS
    1 executable built - 1 Error

    C:\MyDriver\TestDriver>
     
  14. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    А так ?
    Код (Text):
    1. #include <ntddk.h>
    2. #include <ntstatus.h>
    3.  
    4. NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
    5. {
    6.     _asm
    7.     {
    8.         xor eax, eax
    9.     }
    10.     return STATUS_DEVICE_CONFIGURATION_ERROR;
    11. }
     
  15. BelowZero

    BelowZero New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2011
    Сообщения:
    38
    XshStasX,

    да, компиляция прошла успешно) что-то я совсем запутался. в чём причина неудач, в ddk? в самом драйвеере? как компилировать драйверы в будущем?
     
  16. q1nex

    q1nex New Member

    Публикаций:
    0
    Регистрация:
    23 дек 2011
    Сообщения:
    4
    А зачем в асмовой вставке обнулять eax?

    BelowZero
    В логе все написано (в скобочках номер строчки, в которой ошибка):
    Ну объявление DriverEntry ему не нравилось, походу на "C" ругался.

    Из предыдущего лога:
    Тут походу забыли строку в кавычки взять )
     
  17. BelowZero

    BelowZero New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2011
    Сообщения:
    38
    у Booster'а его драйвер тоже не компилировался или только у меня DDK такой придирчивый?)
     
  18. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Пробуйте.
     
  19. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    BelowZero
    Компилятор WDK несколько отличен от С++.
    К примеру нельзя объявить переменную в любом месте кода, а строго после "{".
    Если не ошибаюсь то такой код
    Код (Text):
    1. PWORD i; i++;
    даст инкремент только 1, тогда как в С++ на 2.
    И подобное..
    Возможно это ограничение только на .с файлы, и на .срр файлах такого нету.
     
  20. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    extern "C" не нравится *.с

    Вряд ли.

    Код (Text):
    1. PWORD i; i++;
    Этот код вообще непонятно чего даст.


    Код (Text):
    1. PWORD i=0; i++;
    Этот везде даст 1.