阅读:1690回复:10
修改一个WDM驱动在内存中的数据
请问大家?在一个应用或WDM驱动中,要怎样才能修改另一个WDM驱动在内存中的数据?
|
|
沙发#
发布于:2003-02-28 21:48
在内核模下,是不是内核进程可见另一个内核进程的虚拟空间?如果是的话那我是不是在一个WDM驱动中直接访问另一个WDM驱动在内存中的数据(只要知道了它的虚拟地址),对吗?
|
|
板凳#
发布于:2003-03-01 14:34
我急用啊!
|
|
地板#
发布于:2003-03-03 16:00
在内核模下,是不是内核进程可见另一个内核进程的虚拟空间?如果是的话那我是不是在一个WDM驱动中直接访问另一个WDM驱动在内存中的数据(只要知道了它的虚拟地址),对吗?
内核模式下,内核进程也是不能相互访问私有空间的,要在一个驱动访问另一个驱动的数据,就我用过的方法有以下两种: 1、利用软中断在两个内核驱动间交换数据。 注册软中断,写一个ISR,调用中断 2、当然是利用IRP在要访问数据的驱动中注册被访问数据驱动的回调函数。 怎么注册? 1、在被访问数据驱动中打开另一个驱动对象,向其发送带I/O control的IRP,参数是要注册的回调函数。 2、另一个驱动处理该IRP. 3、利用传过来的回调函数指针,就可以获得数据了。 |
|
地下室#
发布于:2003-03-03 16:15
未公开内核调用KeAttachProcess可以让你访问另外一个进程的虚拟地址空间,详请可以参阅NT File System internals 第5章相关内容.
|
|
|
5楼#
发布于:2003-03-03 18:39
请问大家?在一个应用或WDM驱动中,要怎样才能修改另一个WDM驱动在内存中的数据? 数据在内核空间,知道地址直接访问,只需注意IRQL(想你该是这种情况) 在用户空间,参见上楼Tom_lyd版主答复,但存在诸多不可靠问题。 |
|
6楼#
发布于:2003-03-03 19:05
首先谢谢大家的回答!!
在内核模下,是不是内核进程可见另一个内核进程的虚拟空间?如果是的话那我是不是在一个WDM驱动中直接访问另一个WDM驱动在内存中的数据(只要知道了它的虚拟地址),对吗? 我的问题是要改写的是一个系统内核进程,还不是二个进程都是我自己写的程序,我又能控制呢? 未公开内核调用KeAttachProcess可以让你访问另外一个进程的虚拟地址空间,详请可以参阅NT File System internals 第5章相关内容. 据我所知,好象在W2K和XP中的内核进程的内存页(代码节)都是写保护的,用你的方法也有点行不通啊!
能具体点吗??
还有一些什么问题? |
|
7楼#
发布于:2003-03-03 19:52
pjf的意思是说,
内核空间不管映射到哪个用户空间,地址都是一样的(就一份嘛),所以可以直接访问(包括函数?)。当然,还要考虑irql的问题。 |
|
8楼#
发布于:2003-03-03 20:03
据我所知,好象在W2K和XP中的内核进程的内存页(代码节)都是写保护的
------------------------------------------------------------------- 是,不过你说的是数据,原驱动能访问你就能访问;若你想改代码,修改cr0.WP位先(装了softice就不必改了,呵呵)。 能具体点吗?? ---------------------------------------------------------------- 参见arthurtu回复 还有一些什么问题? ---------------------------------------------------------------- 页是否被映射等等问题,你又说了是系统进程,那没用户空间,不必说什么了。 |
|
9楼#
发布于:2003-03-04 13:25
arthurtu兄说的很对
只要你知道数据的地址,想怎么改,随便好了(IRQL一定要小心,一定要小于缺页中断,搞不好会崩的呦)。
你是说要怎么获取数据地址吧!!!! |
|
10楼#
发布于:2003-03-04 19:11
谢谢了,我想就是这个意思了。只要知道地址,就可以改了。
至于内核进程的内存页(代码节)是写保护的问题,有版主的文章: http://www.driverdevelop.com/lu0/sys/2k0312.html 你是说要怎么获取数据地址吧!!!! 这个我只要知道它加载地址或一个函数的地址就可以计算出某一个单元的地址了(对一个固定的版本来说)。 |
|