• 钩子学习笔记


    1.参考、学习《Micrsoft 的Hook专题》
    2.重点内容:
    (1)钩子实际上一个处理消息程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递

    (a)钩子是程序段(处理消息的程序段);
    (b)钩子由操作系统挂入操作系统中;
    (c)钩子在消息传送以目标前被钩子程序段拦截;
    (d)钩子用途:改变消息、知晓但不处理、中止。

    (2)每一个Hook都有一个与之相关联的指针列表,称之为钩子链表,由系统来维护。这个列表的指针指向指定的,应用程序定义的,被Hook子程调用的回调函 数,也就是该钩子的各个处理子程。当与指定的Hook类型关联的消息发生时,系统就把这个消息传递到Hook子程。一些Hook子程可以只监视消息,或者 修改消息,或者停止消息的前进,避免这些消息传递到下一个Hook子程或者目的窗口。最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加 入的先获得控制权。
    Windows 并不要求钩子子程的卸载顺序一定得和安装顺序相反。每当有一个钩子被卸载,Windows 便释放其占用的内存,并更新整个Hook链表如果程序安装了钩子,但是在尚未卸载钩子之前就结束了,那么系统会自动为它做卸载钩子的操作。
    钩子子程是一个应用程序定义的回调函数(CALLBACK Function),不能定义成某个类的成员函数,只能定义为普通的C函数。用以监视系统或某一特定类型的事件,这些事件可以是与某一特定线程关联的,也可以是系统中所有线程的事件。

    (a)每一种Hook,而不是每一个(钩子的类型,即它处理的消息类型 ),都有一个指针列表,即钩子链表;系统来维护的。
    (b)列表指针指向Hook回调函数.
    (c)回调函数,不能是类的成员函数,但不知道能不能支持class function/procedure 或 static.
    (d)钩子卸载,便释放内存,更新整个Hook链表。
    (e)被安装钩子的程序结束,则系统会自已卸载钩子。
    (f)分系统钩子和线程钩子。

    (3)略

     
  • 相关阅读:
    .Net Core部署到CentOS
    Docker容器中开始.Net Core之路
    自我总结和学习表单提交的几种方式 (二)
    自我总结和学习表单提交的几种方式 (一)
    Asp.Net MVC下自定义错误页和展示错误页的几种方式
    .Net下发送邮件遇到问题及解决方案
    Asp.Net MVC CodeFirst模式数据库迁移步骤
    利用微软认知服务实现语音识别功能
    Asp.Net MVC路由生成URL过程
    针对于多线程概念的理解
  • 原文地址:https://www.cnblogs.com/ZhouXiHong/p/646019.html
Copyright © 2020-2023  润新知