当前位置:首页 » 编程博文
开发技术指南» 文章正文
    引言: 可以使用挂钩将D L L插入进程的地址空间。
 

 

    摘要:点击查看全文 ......
    摘要:设计模式之iterator——点名篇 上了这么多年学,我发现一个问题,好象老师都很喜欢点名,甚至点名都成了某些老师的嗜好,一日不点名,就饭吃不香,觉睡不好似的,我就觉得很奇怪,你的课要是讲的好,同学又怎么会不来听课呢,殊不知:“误人子弟,乃是犯罪!”啊。 好了,那么我们现在来看老师这个点名过程是如何实现吧: 1、老规矩,我们......


通过挂钩插入DLL(转载)
可以使用挂钩将d l l插入进程的地址空间.为了使挂钩能够像它们在1 6位wi n d o w s中那样工作,m i c r o s o f t不得不设计了一种方法,使得d l l能够插入另一个进程的地址空间中.

  第一个参数w h _ g e t m e s s a g e用于指明要安装的挂钩的类型.第二个参数g e t m s g p r o c用于指明窗口准备处理一个消息时系统应该调用的函数的地址(在你的刂房占渲校5三个参数h i n s t d l l用于指明包含g e t m s g p r o c函数的d l l.在wi n d o w s中,d l l的h i n s t d l l的值用于标识dll被映射到的进程的地址空间中的虚拟内存地址.最后一个参数0用于指明要挂接的线程. 【程序编程相关:雕塑系统和辅助项目管理系统

  下面让我们来看一个例子.进程a(类似microsoft spy++的一个实用程序)安装了一个挂钩w n _ g e t m e s s a g e,以便查看系统中的各个窗口处理的消息.该挂钩是通过调用下面的s e t wi n d o w s h o o k e x函数来安装的: 【推荐阅读:如何有效的使用对话框之二

  现在让我们来看一看将会发生什么情况: 【扩展信息:J2ME国外站点

  对于一个线程来说,它可以调用s e t wi n d o w s h o o k e x函数,传递系统中的另一个线程的i d.通过为这个参数传递0,就告诉系统说,我们想要挂接系统中的所有g u i线程.

  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函数即可.


...   下一页
 ·oracle performance sql tuning    »显示摘要«
    摘要: 建议使用者,亲自测试后再使用,不要盲目使用下面的方法和建议! 17. 使用表的别名(alias) 当在sql语句中连接多个表时, 请使用表的别名并把别名前缀于每个column上.这样一来,就可以减少解析的时间并减少那些由column歧义引起的语法错误. (译者注: column歧义指的是由于sql中不同的表具有相同的column名,当sql语句中出现这个column时,sql解析器无......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE