Mika0x65 Да, я как обычно невнимателен. Насчёт объявления в любом месте тоже был не прав, снова забыл что в Си выделение переменных происходит сразу после входа в процедуру.
работает) при этом не компилируется драйвер с известного сайта, не зависимо, .с или .с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>
Символы "«" и "»" надо заменить на " и ". Вообще, учиться программировать на С в режиме ядра -- усложнение задачи. Думаю, стоит освоить С в user mode, а потом уже на драйвера переключаться.
Работает) синтаксис, вроде, почти как на vb6, скоро привыкну. создан драйвер, но сейчас он бесполезен, т.к. погуглил, нужен файл .inf для его распознавания виндой) что делать?
BelowZero Windows его и так распознает, если загрузить его с помощью sc, например. Т.е. сначала что-то вроде "sc create DriverName binPath= DriverPath" и т.д. в консоли, а потом "sc start DriverName" опять же в консоли. Драйвер загрузится в ядро. Другое дело, что он ничего делать не будет.
вот что получается... C:\MyDriver\TestDriver>sc create TestDriver binPath= C:\MyDriver\TestDriver [SC] CreateService SUCCESS C:\MyDriver\TestDriver>sc start TestDriver [SC] StartService FAILED 5:
BelowZero "sc create DriverName binPath= DriverPath" -- это я привел для примера. Необходимо указать типа драйвера, режим запуска (ручной, с системой), может еще что-то, не помню. В справке все написано. Кроме того, в 64битной среде неподписанные драйверы не запускаются, чтобы их запустить, надо выбрать опцию "Disable driver signature check" (или как-то так) при загрузке Windows.
А кроме того return STATUS_DEVICE_CONFIGURATION_ERROR. Ребята, так а зачем все-таки обнуление eax во вставке?
Доброго времени суток! Компилирую "пустой" драйвер в WinDDK 7600.16385.1, под x64 Free Build Environment. Файл драйвера выходит 3,5 кб весом, в импортах у него KeBugCheckEx. Можно ли как-нибудь избавиться от этого "довеска", чтобы в драйвер попадал только тот код, который я пишу?
Попробую угадать: задай "Release" вместо "Debug". Ты создаешь отладочную версию драйвера - вот и довесок и большой объем.
Где задать Release? У меня не студия, я собираю через build. Окружение стоит Free, т.е. вроде Release. Пробовал так, как описано здесь: http://www.mofeel.net/31-microsoft-public-development-device-drivers/20998.aspx (добавить LINKER_FORCE_NO_DBG_SECTION=1 в sources), не помогло. Может быть, есть скрипты?
testtest Я точно не помню сейчас, но, по-моему, вызов KeBugCheckEx добавляется если есть buffer security cookie. Можно попробовать убрать генерацию security cookie c помощью ключа компиляции /GS-. Передать ключ комипиляции можно установив переменную cl в среде build. Что-то вроде "set cl=/GS-" , затем "build".
Mika0x65 Да, точно! Нашел в WinDDK\7600.16385.1\bin\amd64mk.inc этот параметр. Добавил в sources две строчки: Код (Text): LINKER_FORCE_NO_DBG_SECTION=1 BUFFER_OVERFLOW_CHECKS=0 и все получилось. Спасибо!