запарился я нафик, серфить в поисках нармального "хеллоу ворлда" для драйверов,.. не ну че нельзя нормальную пустышку сделать..?обязательно надо запарить мозг своими GetMessage, или виртуальным FAT- диском, а от "простого драйвера" у тов.Солдатова я фигею, ну просто проще некуда. отныне это будет моя напоминалка(еси никто не против конечно) Visual 2008 для DDK: C\C++ - General - Debug Information Format = Program Database (/Zi) C\C++ - Preprocessor - Preprocessor Definitions = _X86_ [add also DBG for Debug config] C\C++ - Code Generation - Enable C++ Exceptions = No C\C++ - Code Generation - Basic Runtime Checks = Default C\C++ - Code Generation - Buffer Security Check = No (/GS-) C\C++ - Advanced - Calling Convention = __stdcall (/Gz) C\C++ - Advanced - Compile As = Compile as C Code (/TC) [if you are going to use plain C] Linker - General - Output File = $(OutDir)\$(ProjectName).sys Linker - General - Enable Incremental Linking = Default Linker - Input - Additional Dependencies = ntoskrnl.lib hal.lib $(NOINHERIT) [add needed libs here e.g. ntoskrnl.lib hal.lib] Linker - Input - Ignore All Default Libraries = Yes (/NODEFAULTLIB) Linker - Manifest File - Generate Manifest = No Linker - System - SubSystem = Native (/SUBSYSTEM:NATIVE) Linker - System - Driver = Driver (/DRIVER) Linker - Advanced - Entry Point = DriverEntry Linker - Advanced - Base Address = 0x10000 Linker - Advanced - Randomized Base Address = Disable (/DYNAMICBASE:NO) вот эту Linker - Advanced - Data Execution Prevention (DEP) = Disable (/NXCOMPAT:NO) и эту настройки, чтото не нашел, хотя студия 2008 и на сайте производителя этих настроек написано что для 2008, странно.. XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Код (Text): #include <ntddk.h> //--PROTOTYPES-- NTSTATUS DriverEntry(IN PDRIVER_OBJECT DrvObj,IN PUNICODE_STRING RegistryPath); NTSTATUS CreateMyDriver(IN PDEVICE_OBJECT DevObj,IN PIRP Irp); NTSTATUS ReadMyDriver(IN PDEVICE_OBJECT DevObj,IN PIRP Irp); NTSTATUS WriteMyDriver(IN PDEVICE_OBJECT DevObj,IN PIRP Irp); NTSTATUS ShutdownMyDriver(IN PDEVICE_OBJECT DevObj,IN PIRP Irp); NTSTATUS CleanupMyDriver(IN PDEVICE_OBJECT DevObj,IN PIRP Irp); NTSTATUS IoCtlMyDriver(IN PDEVICE_OBJECT DevObj,IN PIRP Irp); VOID MyDriverUnload(IN PDRIVER_OBJECT DrvObj); //============================================== NTSTATUS DriverEntry(IN PDRIVER_OBJECT DrvObj,IN PUNICODE_STRING RegPath) { UNICODE_STRING nameString,linkString; PDEVICE_OBJECT deviceObj; NTSTATUS status; RtlInitUnicodeString(&nameString,L"\\Device\\MyDriver"); status=IoCreateDevice(DrvObj,\ sizeof(65535),\ &nameString,\ 0,\ 0,\ FALSE,\ &deviceObj); if(!NT_SUCCESS(status))return status; deviceObj->Flags|=DO_DIRECT_IO; deviceObj->Flags&=~DO_DEVICE_INITIALIZING; RtlInitUnicodeString(&linkString,L"\\DosDevices\\MyDriver"); status=IoCreateSymbolicLink(&linkString,&nameString); if(!NT_SUCCESS(status)) { IoDeleteDevice(DrvObj->DeviceObject); return status; } DrvObj->MajorFunction[IRP_MJ_CREATE]=CreateMyDriver; DrvObj->MajorFunction[IRP_MJ_READ]=ReadMyDriver; DrvObj->MajorFunction[IRP_MJ_WRITE]=WriteMyDriver; DrvObj->MajorFunction[IRP_MJ_SHUTDOWN]=ShutdownMyDriver; DrvObj->MajorFunction[IRP_MJ_DEVICE_CONTROL]=IoCtlMyDriver; DrvObj->DriverUnload=MyDriverUnload; return STATUS_SUCCESS; } //------- NTSTATUS CreateMyDriver(IN PDEVICE_OBJECT DevObj,IN PIRP Irp) { IoCompleteRequest(Irp,IO_NO_INCREMENT); return STATUS_SUCCESS; } //-------- NTSTATUS ReadMyDriver(IN PDEVICE_OBJECT DevObj,IN PIRP Irp) { return STATUS_SUCCESS; } //-------- NTSTATUS WriteMyDriver(IN PDEVICE_OBJECT DevObj,IN PIRP Irp) { return STATUS_SUCCESS; } //-------- NTSTATUS ShutdownMyDriver(IN PDEVICE_OBJECT DevObj,IN PIRP Irp) { IoCompleteRequest(Irp,IO_NO_INCREMENT); return STATUS_SUCCESS; } //-------- NTSTATUS IoCtlMyDriver(IN PDEVICE_OBJECT DevObj,IN PIRP Irp) { IoCompleteRequest(Irp,IO_NO_INCREMENT); return STATUS_SUCCESS; } //--------- VOID MyDriverUnload(IN PDRIVER_OBJECT DrvObj) { UNICODE_STRING linkString; RtlInitUnicodeString(&linkString,L"\\DosDevices\\MyDriver"); IoDeleteSymbolicLink(&linkString); IoDeleteDevice(DrvObj->DeviceObject); }
Зачем вам это? Нормальные люди собирают с помощью WDK, а не студией. Солдатов вроде такого же мнения.
да знаю я что тру программисты с помощью WDK собирают, сам также вполне возможно буду так поступать(ведь моя цель - тру программинг=))просто на первых порах в студии проще, подсказки там.. все такое и где связь между твоей ссылкой и моей цитатой в твоем посте? просто мне кажется если у человека желание - научить когото писать драйвера, не надо примеры засорять всякими "DbgPrint()" или "GetMessage()", нафик они на первых порах не нужны. и вообще я написал что это моя напоминалка таксказать
ну просто нафига ты мне эту ссылку привел? я по твоему на настройки из первого поста, через поиск с сервера localhost-a вышел? ебстественно я их нашел через гугл, и пускай наш общий друг(гугл) о них знает, здесь я для себя хочу собрать простенькие хеллоу ворлды, И ВСЕ! ладно. не в бровь а в глаз. ну тут то, конечно, просто кого-то интересует его статус, а ктото просто довольствуется полученными знаниями, и плевать они хотели, кто там кого и где обсуждает.