您的位置:首页 > 其它

如何设置IRP中的功能码?

2010-11-19 10:30 211 查看
    I/O栈的结构体定义大概有440几行,定义了很多很多参数,让人应接不暇。我演示我们实际使用中需要使用的几个参数。
DeviceIoControl方式
  传入I/O栈的参数结构体,详见IO_STACK_LOCATION结构体
                         struct {
                              ULONG OutputBufferLength;
                              ULONG POINTER_ALIGNMENT InputBufferLength;
                              ULONG POINTER_ALIGNMENT IoControlCode;   //这个就是DeviceIoControl函数传入的功能码存储的地方。
                              PVOID Type3InputBuffer;
                          } DeviceIoControl;
     ①首先是从应用程序那么发出功能码,
                                  DeviceIoControl(Handle, // 设备句柄
                                                                                             Code, // 32bit的自定义的功能码
                                                                                             InputData, InputLength, // 输入数据缓冲区地址、长度
                                                                                             OutputData, OutputLength, // 输出数据缓冲区地址、长度
                                                                                             &Feedback, // 反馈数据
                                                                                             &Overlapped);
   ②驱动程序中接收功能码:
                 获取当前IO栈:stack = IoGetCurrentIrpStackLocation(irp);
                 得到功能码:  Fun_code = stack->Parameters.DeviceIoControl.IoControlCode;
    ③使用switch函数来分发处理不同的功能码
ReadFile方式
传入I/O栈的参数结构体:



WriteFile方式
传入I/O栈的参数结构体:


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐