Windows驱动和应用程序通信

本文介绍了Windows驱动如何与应用程序通信,重点讲解了PIO_STACK_LOCATION结构获取输入输出缓冲区大小、IOCTL码以及缓冲模式。在直接映射地址时,使用MmGetSystemAddressForMdlSafe进行映射。在METHOD_NEITHER模式下,输入和输出地址处理方式不同。在用户层,通过CreateFile和DeviceIoControl函数进行设备控制。确保使用ProbeForRead和ProbeForWrite检查缓冲区的读写权限,并正确设置IoStatus信息。
摘要由CSDN通过智能技术生成

驱动层:

PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(pIrp);


//得到输入缓冲区大小
  ULONG cbin = stack->Parameters.DeviceIoControl.InputBufferLength;

//得到输出缓冲区大小
  ULONG cbout = stack->Parameters.DeviceIoControl.OutputBufferLength;
//得到IOCTL码
  ULONG code = stack->Parameters.DeviceIoControl.IoControlCode;

 

 

CTL_CODE(DeviceTypeFunctionMethodAccess)  //ntddk.h
Method:

    METHOD_BUFFERED //buffer mode

    METHOD_IN_DIRECT or METHOD_OUT_DIRECT   //直接映射地址

    METHOD_NEITHER

 

 

如果为 METHOD_IN_DIRECT or METHOD_OUT_DIRECT,输入和BUFFER模式一样,但是输出就不再是输入那个地址,而是  

采用MmGetSystemAddressForMdlSafe   IN PMDL  Mdl,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值