• 关于DIPS的DLL注入(第22章)


    对应于《window核心编程》第五版的576页。

    这个例子主要通过SetWindowsHookEx函数来将一个指定的DLL加载进目标进程,进而到达一些特殊的处理目的。DIPS这个例子实现的功能是保存桌面上所有图标的位置,使桌面的分辨率发生改变后仍然能够保持原来的布局不变。我们没有办法直接获取到这些图标的位置,因为我们的程序进程和桌面进程不是同一个,必须要将我们的dll放置在桌面的进程空间中才能访问桌面上的内容。

    其思路如下:整个solution分为两个项目,第一个是一个exe的程序,用来将dll注入,并且通过给dll中的窗口发消息来和dll通信,控制dll的行为。第二个是一个dll程序,用来被注入到桌面进程中,实现桌面图标的保存。

    主程序exe的思路如下:

    通过findwindow来找到桌面的窗口句柄,然后再使用GetWindowThreadProcessId获取到窗口所属的线程,在这个线程上用SetWindowsHookEx来给这个线程挂接一个消息的hook,从而将我们的dll注入,通过给dll中的窗口发送WM_APP消息来控制dll的行为。

    dll的思路如下:

    在dll被注入后,创建一个对话框,不进行显示,用来维持消息循环。当接收到WM_app消息后,按照消息参数,读取或者保存桌面图标的位置。

    注意:

    两个进程之间的设置了共享的存储去用来存储 exe的线程Id和hook的句柄。

    其实现在看起来不难,但是我调试这个程序还是花了点时间,所以总结一下。。。。。。

    https://files.cnblogs.com/kwliu/22-DIPS.rar

  • 相关阅读:
    javase程序设计上机作业2
    操作系统课堂笔记——01,操作系统介绍
    javase程序设计上机作业1
    Matlab学习笔记1—MATLAB基础知识
    Matlab学习笔记0—课程导入
    【转】WEB技术发展简史
    leetcode-79-单词搜索(用dfs解决)
    leetcode-78-子集(用bfs解决)
    leetcode-74-搜索二维矩阵
    leetcode-46-全排列
  • 原文地址:https://www.cnblogs.com/kwliu/p/2129884.html
Copyright © 2020-2023  润新知