|
|
|
|
|
|
|
|
现在让我们来看一看将会发生什么情况: 1) 进程B中的一个线程准备将一条消息发送到一个窗口。 2) 系统查看该线程上是否已经安装了W H _ G E T M E S S A G E挂钩。 3) 系统查看包含G e t M s g P r o c函数的D L L是否被映射到进程B的地址空间中。 4) 如果该D L L尚未被映射,系统将强制该D L L映射到进程B的地址空间,并且将进程B中的D L L映像的自动跟踪计数递增1。 5) 当D L L的h i n s t D l l用于进程B时,系统查看该函数,并检查该D L L的h i n s t D l l是否与它用于进程A时所处的位置相同。 如果两个h i n s t D l l是在相同的位置上,那么G e t M s g P r o c函数的内存地址在两个进程的地址空间中的位置也是相同的。在这种情况下,系统只需要调用进程A的地址空间中的G e t M s g P r o c函数即可。 如果h i n s t D l l的位置不同,那么系统必须确定进程B的地址空间中G e t M s g P r o c函数的虚拟内存地址。这个地址可以使用下面的公式来确定: 将GetMsgProc A的地址减去hinstDll A的地址,就可以得到G e t M s g P r o c函数的地址位移(以字节为计量单位)。将这个位移与hinstDll B的地址相加,就得出G e t M s g P r o c函数在用于进程B的地址空间中该D L L的映像时它的位置。 6) 系统将进程B中的D L L映像的自动跟踪计数递增1。 7)页码:[1] [2] [3] [4] [5] [6] [7] 第6页、共7页 |
|
|
|
|
设为首页 | 加入收藏 | 广告服务 | 友情链接 | 版权申明
Copyriht 2007 - 2008 © 科普之友 All right reserved |