DDK 最纯净的Hello world

2024-04-29 07:58
文章标签 hello world 纯净 ddk

本文主要是介绍DDK 最纯净的Hello world,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

只包含DriverEntry,IRP_MJ_DEVICE_CONTROL,DriverUnload函数

是DDK的基本结构

没有任何功能,所有DDK都要以这个结构来写

 

  1. #include <ntddk.h>
  2. #define DEVICE_NAME L"//Device//hello"
  3. #define DOS_NAME    L"//??//hello"
  4. void Unload(IN PDRIVER_OBJECT DriverObject);
  5. NTSTATUS MyIoControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
  6. NTSTATUS MydrvDispatch (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
  7. NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject , IN PUNICODE_STRING RegistryPath)
  8. {
  9.     
  10.     UNICODE_STRING  nameString, linkString;
  11.     NTSTATUS  status=STATUS_SUCCESS;
  12.     ULONG     i;
  13.     PDEVICE_OBJECT      deviceObject;
  14.     RtlInitUnicodeString(&nameString,DEVICE_NAME);
  15.     RtlInitUnicodeString(&linkString,DOS_NAME);
  16.     status = IoCreateDevice( DriverObject,0,&nameString,FILE_DEVICE_DISK_FILE_SYSTEM,FILE_DEVICE_SECURE_OPEN,TRUE,&deviceObject);   
  17.     if (!NT_SUCCESS( status ))
  18.         return status;
  19.     
  20.     deviceObject->Flags|=DO_BUFFERED_IO;
  21.     status = IoCreateSymbolicLink (&linkString, &nameString);
  22.     if (!NT_SUCCESS( status ))
  23.     {
  24.         IoDeleteDevice (DriverObject->DeviceObject);
  25.         return status;
  26.     }  
  27.     
  28.     for ( i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++)
  29.     {
  30.         DriverObject->MajorFunction[i] = MydrvDispatch;
  31.     }
  32.     DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = MyIoControl;
  33.     DriverObject->DriverUnload=Unload;
  34.     
  35.     DbgPrint("DriverEntry.../n");
  36.     
  37.          
  38.     return status;
  39.     
  40. }
  41. void Unload(IN PDRIVER_OBJECT DriverObject)
  42. {
  43.     
  44.     PDEVICE_OBJECT deviceObject = DriverObject->DeviceObject;
  45.     UNICODE_STRING uniWin32NameString;
  46.     RtlInitUnicodeString( &uniWin32NameString, DOS_NAME );  
  47.     IoDeleteSymbolicLink( &uniWin32NameString );   
  48.     if ( deviceObject != NULL )
  49.     {
  50.         IoDeleteDevice( deviceObject );
  51.     }
  52.     return;
  53. }
  54. NTSTATUS MydrvDispatch (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
  55. {
  56.     Irp->IoStatus.Status = STATUS_SUCCESS;
  57.     Irp->IoStatus.Information = 0L;
  58.     IoCompleteRequest( Irp, 0 );
  59.     return Irp->IoStatus.Status;
  60. }
  61. NTSTATUS MyIoControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
  62. {
  63.     NTSTATUS  status=STATUS_SUCCESS;
  64.     
  65.     PIO_STACK_LOCATION irpStack; 
  66.     PVOID ioBuffer; 
  67.     ULONG inputBufferLength; 
  68.     ULONG outputBufferLength;       
  69.     ULONG ioControlCode;
  70.     
  71.     irpStack = IoGetCurrentIrpStackLocation(Irp); 
  72.     ioControlCode= irpStack->Parameters.DeviceIoControl.IoControlCode; 
  73.     ioBuffer = Irp->AssociatedIrp.SystemBuffer; 
  74.     inputBufferLength = irpStack->Parameters.DeviceIoControl.InputBufferLength; 
  75.     outputBufferLength = irpStack->Parameters.DeviceIoControl.OutputBufferLength;
  76.     switch (ioControlCode)
  77.     {
  78.         
  79.     
  80.         
  81.         
  82.     }
  83.     Irp->IoStatus.Status = status; 
  84.     Irp->IoStatus.Information = outputBufferLength; 
  85.     IoCompleteRequest(Irp, IO_NO_INCREMENT); 
  86.     return    status;
  87.     
  88. }

这篇关于DDK 最纯净的Hello world的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/945522

相关文章

【Spring boot】编写代码及测试用例入门之 Hello Spring boot _踩坑记

先贴下目录: 这是我从 start.spring.io 里下载的依赖Web的模板 // DemoApplication.javapackage com.abloume.springboot.blog.demo;import org.springframework.boot.SpringApplication;import org.springframework.boot.autocon

【JFinal】IDEA+maven上手JFinal之Hello World!

一、New Project 1、在 IDEA 环境下新建 Project 项目 2、选择创建 Maven 项目,并且不使用模板 3、输入 Maven 的 GroupId 和 ArtifactId 4、输入项目名称 二、将当前 Project 改为 POM 工程 将项目的 jfinal-web-demo 作为项目的 parent 工程,用于定义 maven 依赖包的版本信息、

CVPR 2024最新论文分享┆YOLO-World:一种实时开放词汇目标检测方法

论文分享简介 本推文主要介绍了CVPR 2024上的一篇论文《YOLO-World: Real-Time Open-Vocabulary Object Detection》,论文的第一作者为Tianheng Cheng和Lin Song,该论文提出了一种开放词汇目标检测的新方法,名为YOLO-World。论文通过引入视觉-语言建模和大规模预训练解决了传统YOLO检测器在固定词汇检测中的局限性。论

兔子-系统的纯净版,装机版,深度和GHOST的区别

纯净版就是要自己装软件. 装机版就是别人装好了基本常用软件,当然,那些软件是装机人员按自己的喜好写入的,所以,一般推荐用户选择纯净版,不是很懂电脑的选择装机版较好,方便些。 深度和GHOST,建议维修专业人员选择,普通用户还是算了,容易出故障。挺麻烦的。

hello,大家好。

由于最近工作变动,目前是从河北来到了广东。 顾不上写博客了,请大家谅解。 后续会慢慢的恢复正常的节奏,很感谢大家的关注。

Adobe After Effects的插件--------CC Particle World

CC Particle World是一个粒子效果器,用于在三维空间中生成和模拟各种粒子系统,包括火焰、雨、雪、爆炸、烟雾等等。它会自动随时间变化发射粒子。 本文部分参照 https://www.163.com/dy/article/IEJVDN760536FE6V.html 使用条件 使用该插件的图层需是2D图层。 我们新建一个纯色图层(也可以是其他类型图层),作为【效果控件载体图层】

使用Mybatis Generator插件生成纯净代码,自定义扩展注释和注释,xml映射文件,不用修改源码!!!

先看效果: (基于Mybatis-generator-core-1.4.0) 生成模型(实体): 根据MySQL库中的tb_prod_info表字段及注释自动生成. package com.ezsyn.cloudstudy.product.dao.entity;import io.swagger.annotations.ApiModelProperty;import lombok.Gette

java-在idea中antrl的hello world

java-在idea中antrl的hello world 1. 在idea中安装ANTLR V4的插件2. 下载ANTLR的jar包3. idea中创建普通的java项目4. 创建一个Hello.g4的文件5. 使用idea生产接口文件6. java创建一个类和main方法7. 调试输出8. 参考链接 1. 在idea中安装ANTLR V4的插件 路径如下,安装完成后重启ide

World of Warcraft [CLASSIC][80][Shushia][Molten Core][BOSS-5 Baron Geddon]

80级术士单杀[熔火之心]40人团队副本 [5号BOSS 迦顿男爵] BOSS技能①[点燃法力],每3秒燃烧400点法力值,实际上还附带400点伤害,持续5分钟 BOSS技能②[人体炸弹] :迦顿男爵会随机给一个人施放DEBUFF,被DEBUFF影响的人需要在最短时间内跑到远离人群的角落,等待炸弹爆炸。这个技能会造成3000+的伤害,并且会对周围一定范围内的玩家造成等量伤害,感觉我