向Windows内核驱动中传递一个函数指针,使其在内核模式下执行
来源:互联网 发布:cms网站系统 编辑:程序博客网 时间:2024/06/04 18:22
向Windows内核驱动中传递一个函数指针,使其在内核级执行。
这个例子是来自于张帆编写的《Windows驱动开发技术详解》第15章15.5节,P397-399页。首先注意这个例子有个错误:
switch (code){// process requestcase IOCTL_KERNEL_FUNCTION:{KdPrint(("IOCTL_KERNEL_FUNCTION\n"));KernelFun* InputBuffer = (KernelFun*)pIrp->AssociatedIrp.SystemBuffer;//将应用程序提供的函数地址提供给驱动程序KernelFun foo = *InputBuffer;//在内核模式下调用应用程序的函数int ret = foo();KdPrint(("ret = %d, out = %d\n", ret, cbout));memcpy(pIrp->AssociatedIrp.SystemBuffer, &ret, 4); info = cbout;break;}default:status = STATUS_INVALID_VARIANT;}
少了个case分支中少了个break语句(上面已经加上了),这样会导致IRPTrace查看“IRP_MJ_DEVICE_CONTROL”返回时失败,注意这个细节的小问题。
应用层的调用方法:
////首先定义要执行的函数//int KernelModeFunction(){//运行在ring0//所以能执行IO操作//Out_8((PUCHAR)0x378,0);return 100+67;}////下面是DeviceIoControl调用//DWORD dwOutput ;int ret;//类似于Out_8((PUCHAR)0x378,0);DWORD Function_Address = (DWORD)KernelModeFunction;DeviceIoControl(hDevice, IOCTL_KERNEL_FUNCTION, &Function_Address, 4, &ret, 4, &dwOutput, NULL);
这个示例很有借鉴意义:通过这个方法,能在应用层执行一些只有内核级才能执行的函数。
可以在这里下载张帆完整的《Windows驱动开发技术详解》光盘源码:http://pan.baidu.com/s/1sjJhjwp
0 0
- 向Windows内核驱动中传递一个函数指针,使其在内核模式下执行
- 向内核中添加驱动
- Windows内核函数(2) - 内核模式下的文件操作
- Windows内核函数(3) - 内核模式下的注册表操作
- 在windows内核模式下隐藏进程
- Windows驱动开发(3) - 内核模式下的字符串操作
- Windows驱动开发(4) - 内核模式下的文件操作
- Windows驱动开发(5) - 内核模式下的注册表操作
- 向内核添加一个新驱动
- 向Windows内核驱动传递用户层定义的事件Event,并响应内核层的通知
- 创建Windows Phone内核模式驱动
- 内核模式下另类装载驱动
- Windows下用户模式与内核模式
- CFE分区向内核传递
- 在编译的时候向内核传递宏定义
- Windows内核驱动中操作文件
- Windows内核驱动中操作文件
- Windows内核驱动中操作文件
- extjs 的正则表达式的引用
- java读取EXCEL文件
- linux下,如何查看mysql的版本
- POJ - 2752 Seek the Name, Seek the Fame (KMP的next[]应用)
- 输出学生信息(在Friend类中定义输出和输入)
- 向Windows内核驱动中传递一个函数指针,使其在内核模式下执行
- 在linux下mount windows硬盘
- 用UCenter Home 的《记账本》插件为UCH制作插件
- 常用颜色值表
- arp&icmp
- 设计模式---单例模式
- mysql编码设置
- 【OpenCV入门教程之一】 安装OpenCV
- 一场暗恋的生长和发育