Driver "Hello world"

Тема в разделе "WASM.BEGINNERS", создана пользователем DAIM, 14 авг 2011.

  1. DAIM

    DAIM New Member

    Публикаций:
    0
    Регистрация:
    29 авг 2010
    Сообщения:
    49
    запарился я нафик, серфить в поисках нармального "хеллоу ворлда" для драйверов,..
    не ну че нельзя нормальную пустышку сделать..?обязательно надо запарить мозг своими
    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):
    1. #include <ntddk.h>
    2. //--PROTOTYPES--
    3. NTSTATUS DriverEntry(IN PDRIVER_OBJECT DrvObj,IN PUNICODE_STRING RegistryPath);
    4. NTSTATUS CreateMyDriver(IN PDEVICE_OBJECT DevObj,IN PIRP Irp);
    5. NTSTATUS ReadMyDriver(IN PDEVICE_OBJECT DevObj,IN PIRP Irp);
    6. NTSTATUS WriteMyDriver(IN PDEVICE_OBJECT DevObj,IN PIRP Irp);
    7. NTSTATUS ShutdownMyDriver(IN PDEVICE_OBJECT DevObj,IN PIRP Irp);
    8. NTSTATUS CleanupMyDriver(IN PDEVICE_OBJECT DevObj,IN PIRP Irp);
    9. NTSTATUS IoCtlMyDriver(IN PDEVICE_OBJECT DevObj,IN PIRP Irp);
    10. VOID MyDriverUnload(IN PDRIVER_OBJECT DrvObj);
    11. //==============================================
    12. NTSTATUS DriverEntry(IN PDRIVER_OBJECT DrvObj,IN PUNICODE_STRING RegPath)
    13. {
    14. UNICODE_STRING nameString,linkString;
    15. PDEVICE_OBJECT deviceObj;
    16. NTSTATUS status;
    17. RtlInitUnicodeString(&nameString,L"\\Device\\MyDriver");
    18. status=IoCreateDevice(DrvObj,\
    19.         sizeof(65535),\
    20.         &nameString,\
    21.         0,\
    22.         0,\
    23.         FALSE,\
    24.         &deviceObj);
    25. if(!NT_SUCCESS(status))return status;
    26. deviceObj->Flags|=DO_DIRECT_IO;
    27. deviceObj->Flags&=~DO_DEVICE_INITIALIZING;
    28. RtlInitUnicodeString(&linkString,L"\\DosDevices\\MyDriver");
    29. status=IoCreateSymbolicLink(&linkString,&nameString);
    30. if(!NT_SUCCESS(status))
    31. {
    32. IoDeleteDevice(DrvObj->DeviceObject);
    33. return status;
    34. }
    35. DrvObj->MajorFunction[IRP_MJ_CREATE]=CreateMyDriver;
    36. DrvObj->MajorFunction[IRP_MJ_READ]=ReadMyDriver;
    37. DrvObj->MajorFunction[IRP_MJ_WRITE]=WriteMyDriver;
    38. DrvObj->MajorFunction[IRP_MJ_SHUTDOWN]=ShutdownMyDriver;
    39. DrvObj->MajorFunction[IRP_MJ_DEVICE_CONTROL]=IoCtlMyDriver;
    40. DrvObj->DriverUnload=MyDriverUnload;
    41. return STATUS_SUCCESS;
    42. }
    43. //-------
    44. NTSTATUS CreateMyDriver(IN PDEVICE_OBJECT DevObj,IN PIRP Irp)
    45. {
    46. IoCompleteRequest(Irp,IO_NO_INCREMENT);
    47. return STATUS_SUCCESS;
    48. }
    49. //--------
    50. NTSTATUS ReadMyDriver(IN PDEVICE_OBJECT DevObj,IN PIRP Irp)
    51. {
    52. return STATUS_SUCCESS;
    53. }
    54. //--------
    55. NTSTATUS WriteMyDriver(IN PDEVICE_OBJECT DevObj,IN PIRP Irp)
    56. {
    57. return STATUS_SUCCESS;
    58. }
    59. //--------
    60. NTSTATUS ShutdownMyDriver(IN PDEVICE_OBJECT DevObj,IN PIRP Irp)
    61. {
    62. IoCompleteRequest(Irp,IO_NO_INCREMENT);
    63. return STATUS_SUCCESS;
    64. }
    65. //--------
    66. NTSTATUS IoCtlMyDriver(IN PDEVICE_OBJECT DevObj,IN PIRP Irp)
    67. {
    68. IoCompleteRequest(Irp,IO_NO_INCREMENT);
    69. return STATUS_SUCCESS;
    70. }
    71. //---------
    72. VOID MyDriverUnload(IN PDRIVER_OBJECT DrvObj)
    73. {
    74. UNICODE_STRING linkString;
    75. RtlInitUnicodeString(&linkString,L"\\DosDevices\\MyDriver");
    76. IoDeleteSymbolicLink(&linkString);
    77. IoDeleteDevice(DrvObj->DeviceObject);
    78. }
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Зачем вам это? Нормальные люди собирают с помощью WDK, а не студией. Солдатов вроде такого же мнения.
     
  3. DAIM

    DAIM New Member

    Публикаций:
    0
    Регистрация:
    29 авг 2010
    Сообщения:
    49
    да знаю я что тру программисты с помощью WDK собирают, сам также вполне возможно буду так поступать(ведь моя цель - тру программинг=))просто на первых порах в студии
    проще, подсказки там.. все такое:)

    и где связь между твоей ссылкой и моей цитатой в твоем посте?
    просто мне кажется если у человека желание - научить когото писать драйвера, не надо
    примеры засорять всякими "DbgPrint()" или "GetMessage()", нафик они на первых порах не нужны.
    и вообще я написал что это моя напоминалка таксказать
     
  4. DAIM

    DAIM New Member

    Публикаций:
    0
    Регистрация:
    29 авг 2010
    Сообщения:
    49
    ну просто нафига ты мне эту ссылку привел?
    я по твоему на настройки из первого поста, через поиск с сервера localhost-a вышел?
    ебстественно я их нашел через гугл, и пускай наш общий друг(гугл) о них знает, здесь я для себя хочу собрать простенькие хеллоу ворлды, И ВСЕ!
    ладно.
    не в бровь а в глаз.
    ну тут то, конечно, просто кого-то интересует его статус, а ктото просто довольствуется полученными знаниями, и плевать они хотели, кто там кого и где обсуждает.
     
  5. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    DAIM, закусывать надо.