如何设置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栈的参数结构体:
Ⅰ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栈的参数结构体:
相关文章推荐
- eclipse代码自动提示设置、如何配置eclipse的代码自动提示功能
- 举例说明如何在android中实现设置黑名单的功能--AudioManager、PhoneStateListener的使用
- Code::Blocks 如何设置自动提示功能?
- 【交换机】MAC-VLAN的功能作用是什么,如何设置
- 【Android】如何实现启动APP时引导页、欢迎页功能设置之(二)设置只在第一次启动APP时跳入引导界面
- 在eclipse中如何设置自动联想功能 --- 一图胜千言
- Win10隐私功能如何设置以保护好个人隐私
- Win10系统如何关闭Aero Shake功能 win10系统禁用Aero Shake的设置方法
- 如何设置Win8操作中心功能及时安全提醒
- 如何在Centos下设置Vim的永久显示行号功能?
- 图形的绘制,如何使用自定义画笔(颜色,线宽,线形)。如何为程序中添加选项菜单和选项设置对话框,如何使用标准颜色对话框,如何使用字体对话框,在选项对话框中实现预览功能。实现选项对话框和窗口类中的数据交换。如何改变对话框和控件的背景色,如何改变控件的文本颜色,
- 如何设置Windows Media Center中免费观看高清视频功能
- Windows 7系统如何设置允许程序或功能通过防火墙?
- clipse代码自动提示设置、如何配置eclipse的代码自动提示功能?
- DISCUZ 3.0如何设置开启FLASH多媒体发帖功能
- Swift如何为设置中心添加常用功能
- 如何设置outlook实现自动秘密抄送邮件的功能?
- 如何在Centos下设置Vim的永久显示行号功能?
- 如何设置操作系统处于最佳性能?此方法可以取消系统自带的界面渲染及其它多余的辅助功能.
- 如何在Domino服务器设置ESMTP功能?