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

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

  1. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Booster
    С чего вдруг? Размер WORD -- два байта.
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Mika0x65
    Да, я как обычно невнимателен. Насчёт объявления в любом месте тоже был не прав, снова забыл что в Си выделение переменных происходит сразу после входа в процедуру.
     
  3. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Booster
    Не в си, а в студии, которая стандарты си новее 89-го года поддерживать не удосуживается.
     
  4. BelowZero

    BelowZero New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2011
    Сообщения:
    38
    работает) при этом не компилируется драйвер с известного сайта, не зависимо, .с или .сpp . у тысяч людей компилирется, а у меня нет) вот этот код. как скомпилировать этот код?
    // TestDriver.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»);
    }


    логи:
    C:\>cd 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: Mon Dec 26 14:47:11 2011
    BUILD: Examining c:\mydriver\testdriver directory for files to compile.
    c:\mydriver\testdriver Invalidating OACR warning log for 'root:x86fre'
    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(13) : error C2065: '<Hello' : undeclared i
    dentifier
    1>c:\mydriver\testdriver\testdriver.c(13) : error C2146: syntax error : missing
    ')' before identifier 'world'
    1>c:\mydriver\testdriver\testdriver.c(13) : error C2017: illegal escape sequence

    1>c:\mydriver\testdriver\testdriver.c(13) : error C2059: syntax error : ')'
    1>c:\mydriver\testdriver\testdriver.c(20) : error C2065: '<Goodbye' : undeclared
    identifier
    1>c:\mydriver\testdriver\testdriver.c(20) : error C2143: syntax error : missing
    ')' before '!'
    1>c:\mydriver\testdriver\testdriver.c(20) : error C2017: illegal escape sequence

    1>c:\mydriver\testdriver\testdriver.c(20) : 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: Mon Dec 26 14:47:13 2011
    BUILD: Done

    3 files compiled - 4 Warnings - 8 Errors
    1 executable built - 1 Error

    C:\MyDriver\TestDriver>
     
  5. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Символы "«" и "»" надо заменить на " и ". Вообще, учиться программировать на С в режиме ядра -- усложнение задачи. Думаю, стоит освоить С в user mode, а потом уже на драйвера переключаться.
     
  6. BelowZero

    BelowZero New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2011
    Сообщения:
    38
    Работает) синтаксис, вроде, почти как на vb6, скоро привыкну. создан драйвер, но сейчас он бесполезен, т.к. погуглил, нужен файл .inf для его распознавания виндой) что делать?
     
  7. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    BelowZero
    Windows его и так распознает, если загрузить его с помощью sc, например. Т.е. сначала что-то вроде

    "sc create DriverName binPath= DriverPath"

    и т.д. в консоли, а потом "sc start DriverName" опять же в консоли. Драйвер загрузится в ядро. Другое дело, что он ничего делать не будет.
     
  8. BelowZero

    BelowZero New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2011
    Сообщения:
    38
    вот что получается...
    C:\MyDriver\TestDriver>sc create TestDriver binPath= C:\MyDriver\TestDriver
    [SC] CreateService SUCCESS
    C:\MyDriver\TestDriver>sc start TestDriver
    [SC] StartService FAILED 5:
     
  9. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    BelowZero
    "sc create DriverName binPath= DriverPath" -- это я привел для примера. Необходимо указать типа драйвера, режим запуска (ручной, с системой), может еще что-то, не помню. В справке все написано. Кроме того, в 64битной среде неподписанные драйверы не запускаются, чтобы их запустить, надо выбрать опцию "Disable driver signature check" (или как-то так) при загрузке Windows.
     
  10. q1nex

    q1nex New Member

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

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    q1nex
    For fun. ^)
     
  12. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Наверно, чтобы система не загнулась на пустом драйвере...
     
  13. testtest

    testtest New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2010
    Сообщения:
    4
    Доброго времени суток!
    Компилирую "пустой" драйвер в WinDDK 7600.16385.1, под x64 Free Build Environment. Файл драйвера выходит 3,5 кб весом, в импортах у него KeBugCheckEx. Можно ли как-нибудь избавиться от этого "довеска", чтобы в драйвер попадал только тот код, который я пишу?
     
  14. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Попробую угадать: задай "Release" вместо "Debug". Ты создаешь отладочную версию драйвера - вот и довесок и большой объем.
     
  15. testtest

    testtest New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2010
    Сообщения:
    4
    Где задать Release? У меня не студия, я собираю через build. Окружение стоит Free, т.е. вроде Release.
    Пробовал так, как описано здесь: http://www.mofeel.net/31-microsoft-public-development-device-drivers/20998.aspx (добавить LINKER_FORCE_NO_DBG_SECTION=1 в sources), не помогло.
    Может быть, есть скрипты?
     
  16. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    testtest
    Я точно не помню сейчас, но, по-моему, вызов KeBugCheckEx добавляется если есть buffer security cookie. Можно попробовать убрать генерацию security cookie c помощью ключа компиляции /GS-. Передать ключ комипиляции можно установив переменную cl в среде build. Что-то вроде "set cl=/GS-" , затем "build".
     
  17. testtest

    testtest New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2010
    Сообщения:
    4
    Mika0x65
    Да, точно! Нашел в WinDDK\7600.16385.1\bin\amd64mk.inc этот параметр. Добавил в sources две строчки:
    Код (Text):
    1. LINKER_FORCE_NO_DBG_SECTION=1
    2. BUFFER_OVERFLOW_CHECKS=0
    и все получилось. Спасибо!