应用程序与驱动交互访问(缓冲模式)

数据交换原理

  A、用户层传入数据

  B、驱动层接收数据

  C、驱动层回传数据级用户层

 

 A、用户层传入数据EXE WriteFile,ReadFile

BOOL DeviceIoControl

(
HANDLE
hDevice,              // 设备句柄 调用CreateFile获取

  DWORD dwIoControlCode,       // 操作执行的 控制码,用来区分不同的操作 是一个CTL_CODE宏

  LPVOID lpInBuffer,              // 输入参数 指针
 

  DWORD nInBufferSize,           // 输入参数大小(单位 字节)

扫描二维码关注公众号,回复: 3543928 查看本文章

  LPVOID lpOutBuffer,            // 输出参数 指针
 

  DWORD nOutBufferSize,         // 输出参数大小指针(单位 字节)

  LPDWORD lpBytesReturned,      // 实际输出参数大小指针(单位 字节)

  LPOVERLAPPED lpOverlapped 

 //调用 CreateFile 时 FILE_FLAG_OVERLAPPED 标志打开时才有效,否则会被忽略,所以这里用NULL

);

B、CTL_CODE宏(用户层需要包含 winioctl.h头文件

http://msdn.microsoft.com/en-us/library/ms902086.aspx 这个地址CTL_CODE宏的详解介绍

CTL_CODE(DeviceType,Function,Method,Access);

//DeviceType  SYS中用IOCreateDevice 创建的设备类型

//Function     驱动程序中定义的IOCTL 取值范围 0x800-0xFFF 其它值为系统保留

//Method      访问方式 4 缓冲,直接,其它

//Access       访问权限,这个一般用:FILE_ANY_ACCESS 这个常量 表示有所有权限

示例:

#define add_code CTL_CODE(\

                     FILE_DEVICE_UNKNOWN, \ //DeviceType          

                     0x800, \                    // Function 0x800-0xfff 2048-4095

                     METHOD_BUFFERED, \      //Method

                     FILE_ANY_ACCESS)          //Acess

hDevice=CreatFile

DeviceIoControl使用示例:exe

DWORD add(HANDLE hDevice,int a,int b)

{

    int bufret;

    int port[2];

       port[0]=a;

       port[1]=b;

       DeviceIoControl(hDevice, add_code , &port, 8, &bufret, 4, &dwWrite, NULL);

       return bufret;

}

 

B、驱动层接收数据

 当用户层调用了DeviceIoControl时就会产生一个IRP_MJ_DEVICE_CONTROL 事件传送到相应的驱动设备

//所以在驱动部分 必须先注册一个 IRP_MJ_DEVICE_CONTROL IRP处理函数

pDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = myDriver_DeviceIOControl;

//在这个回调函数里 可以通过 pIrp来获取 用户层EXE 传进来的参数

NTSTATUS myDriver_DeviceIOControl(IN PDEVICE_OBJECT pDevObj, IN PIRP pIrp)

{

NTSTATUS status = STATUS_SUCCESS;

 //pIrp得到输入缓冲区指针

 //pIrp得到输出缓冲区大小

 //得到IOCTL

 //取得传入参数

 //处理相送数据

 //回传数据 SSDT hook

 // C、驱动层回传数据给用户层

 //完成IRP处理

 //结束IRP请求

return status;

}

猜你喜欢

转载自blog.csdn.net/zang141588761/article/details/82749681