需求背景:
在 windows 平台的其他非管理员权限启动的程序(win32),或者一些可执行脚本(vbs,ahk) 不能通过 ReadProcessMemory 读取其他进程的内存,因此要做一层代理,启动一个以管理员权限运行的程序,帮助其他程序正确完成一些特权操作
实现方式: 查了一下 win32 共享进程数据的一些方式,最简单的是剪贴板,尤其适合 ahk 这种工具(提供了读取和写入剪贴板的 api )
因此,简单定义一套语法,形如
READSTRING, HWND, ADDRESS, LENGTH
例如,
READSTRING, 123123, 0x234234, 10
当外部程序把这个字符串写入剪贴板的时候,内存读取器读到这个写入,将剪贴板修改为:
READSTRING, 123123, 0x234234, 10, HelloWorld
外部程序拿到修改之后的剪贴板就可以实现自己的后续逻辑了,而不用关注是如何读取内存的 (当然涉及到读取器读到自己修改之后的剪贴板,这个做一些协议上的控制,不再赘述)
为什么其他进程不直接读取呢?
1 ahk 脚本在开发的时候不方便用管理员运行
2 通过 clickonce 分发的程序不支持管理员运行 见我之前的一个讨论( https://www.v2ex.com/t/661848)
因此想出了这个折中的方式~
比起 rpc 调用: 在脚本语言使用更简单(只需要读写剪贴板&简单的字符串解析即可)
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.