VirtualAllocEx 函数的作用是在指定进程的虚拟空间保留或提交内存区域,除非指定MEM_RESET参数,否则将该内存区域置0。

LPVOID VirtualAllocEx( 
HANDLE hProcess, // 申请内存所在的进程句柄 
LPVOID lpAddress, // 保留页面的内存地址;一般用NULL自动分配 
SIZE_T dwSize, // 欲分配的内存大小,字节单位;注意实际分 配的内存大小是页内存大小的整数倍 
DWORD flAllocationType, 
DWORD flProtect 
); 

flAllocationType,flProtect太多了,参数数值和意思MSDN上都有,不再赘述了.
问题描述:我要选中其他进程的一个ListView窗口中的一个Item,事实上只要发消息就可以了: 
SendMessage( hWnd, LVM_SETITEMSTATE, (WPARAM)nItemIndex, (LPARAM)pLVItem ); 
可是其中的LPARAM要指向一个LVItem的结构,我们知道消息可以跨进程,但目标窗口收到消息时它需要寻址这个结构,而这个结构实际上存储在发送方的地址空间里;所以我们必须把LVItem的内容写入到窗口过程所在的地址空间内,于是便需要VirtualAllocEx和VirtualFreeEx了。 
代码如下。

ListViewOperator::ListViewOperator( HWND hWnd ) // 初始化函数 

m_hwnd = NULL; //目标窗口 
m_hProcess = NULL; //目标进程 
m_pLVItem = NULL; //写入目标进程的LVITEM结构 
m_pTextBuffer = NULL; //其他用途 

m_hwnd = hWnd; 

DWORD dwProcessId; 
GetWindowThreadProcessId( hWnd, &dwProcessId ); //获取进程ID 

m_hProcess = OpenProcess( PROCESS_ALL_ACCESS, false, dwProcessId ); //打开进程 
THROW_EXCEPTION( (m_hProcess == NULL), "Open process failed" ); 

m_pLVItem = (LVITEMA *)VirtualAllocEx( m_hProcess, NULL, sizeof(LVITEMA), MEM_COMMIT, PAGE_READWRITE ); 在目标进程空间中获得内存,允许读取和写入。 
THROW_EXCEPTION( (m_pLVItem == NULL), "Memory alloc failed" ); 
m_pTextBuffer = (char *)VirtualAllocEx( m_hProcess, NULL, MAX_TEXT_BUFFER_LENGTH, MEM_COMMIT, PAGE_READWRITE ); 
THROW_EXCEPTION( (m_pTextBuffer == NULL), "Memory alloc failed" ); 



void ListViewOperator::SetItemSelected( int nItemIndex ) //选中某一个ITEM 

LVITEMA lvitem; // 静态结构 

lvitem.mask = LVIF_STATE; 
lvitem.iSubItem = 0; 
lvitem.state = LVIS_SELECTED|LVIS_FOCUSED; 
lvitem.stateMask = LVIS_SELECTED|LVIS_FOCUSED; 

int nRet = WriteProcessMemory( m_hProcess, m_pLVItem, &lvitem, sizeof(LVITEM), NULL ); // 将本地进程中的结构写入到目标进程 
THROW_EXCEPTION( (nRet == 0), "Write Process memory failed" ); 

HRESULT hRet = SendMessage( m_hwnd, LVM_SETITEMSTATE, (WPARAM)nItemIndex, (LPARAM)m_pLVItem );//发送消息 
THROW_EXCEPTION( FAILED(hRet), "Send message failed" ); 

return ; 

 

VirtualAllocEx 跨进程读写数据 代码注入相关推荐

  1. Windows进程与线程学习笔记(九)—— 线程优先级/进程挂靠/跨进程读写

    Windows进程与线程学习笔记(九)-- 线程优先级/进程挂靠/跨进程读写 要点回顾 线程优先级 调度链表 分析 KiFindReadyThread 分析 KiSwapThread 总结 进程挂靠 ...

  2. 进程线程007 进程挂靠与跨进程读写内存

    文章目录 进程挂靠 进程与线程的关系 线程与进程如何关联 为什么需要ApcState.Process CR3的值可以随便改吗 分析NtReadVirtualMemory函数 总结 跨进程读写内存 跨进 ...

  3. 用FileMapping跨进程共享数据

    FileMapping貌似是Windows唯一提供的跨进程共享数据的方法.如果将客户端的资源文件单独创建一个资源进程,则本机开启的多个客户端都可以使用该资源进程获取资源,这样,很容易使大型3D游戏支持 ...

  4. 用c语言做RFID读卡程序,2.STM32读卡号读写数据代码示例3.0(C语言)

    文件名大小更新时间 2.STM32读卡号读写数据代码示例3.0(C语言)\HFRFID.uvgui.WEIZAI736912016-07-15 2.STM32读卡号读写数据代码示例3.0(C语言)\H ...

  5. 13.跨进程读写内存

    跨进程的本质是"进程挂靠"正常情况下, A进程的线程只能访问A进程的地址空间,如果A进程的线程想访问B进程的地址空间,就要修改当前的Cr3的值为B进程的页目录表基值(KPROCES ...

  6. 【web-攻击用户】(9.4)跨域捕获数据——通过注入HTML捕获数据、注入CSS捕获数据、JavaScript劫持

    目录 跨域捕获数据 1.1.简介: 1.2.通过注入HTML捕获数据 简介: 示例: 1.3.通过注入CSS捕获数据 简述: 1.4.JavaScript劫持 简述: 函数回调 JSON 变量分配 E ...

  7. android跨进程读写内存,Android 跨进程内存泄露

    内存泄露的检测和修复一直是每个APP的重点和难点,也有很多文章讲述了如何检测和修复.本篇文章 结合最近开发的项目遇到的实例,讲述下Android Binder导致的内存泄露的一个案例. 发现问题 参与 ...

  8. php 跨进程读写,php使用多个进程同时控制文件读写示例

    代码如下: /** * 写入数据 * @param  [string] $path [文件路径] * @param  [string] $mode [文件打开模式] * @param  [string ...

  9. 利用管道实现父子进程读写数据

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/wait.h ...

最新文章

  1. PCL:点云中的超体素数据
  2. thread.sleep是让哪个线程休眠_java开发两年,这些线程知识你都不知道,你怎么涨薪?...
  3. 趣说游戏AI开发:曼哈顿街角的A*算法
  4. 一二三系列之状压DP——Max Correct Set(一)Neko Rules the Catniverse (Large Version)(二)Make It Ascending(三)
  5. Linux 下rpm包搭建LAMP环境
  6. 嘉年华回顾丨 杨长老带你解密 Oracle 19c 和 20c 的新特性
  7. 05-03 docker 常用命令
  8. C+++之begin(),end(),rend(),rbegin()
  9. jquery 点击显示更多
  10. 联想笔记本关闭锁定计算机,联想笔记本电脑键盘锁了怎么解开
  11. 三相桥式全控整流电路simulink仿真_交流变直流,二极管整流电路是如何工作的?...
  12. 苹果官方付费升级内存_vivo用户必看!官方推出扩容服务,最高升级到128G!
  13. 我们为什么不画高保真原型图
  14. 解决frp内网穿透vsftpd报227错误
  15. 洛阳九县八取名字_洛阳市地图(洛阳市九县六区地图)
  16. Ocata Neutron代码分析(六)——APIRouter的初始化(1)加载core plugin和service plugin...
  17. 人在江湖,以“核”为贵
  18. YOLOv6: A Single-Stage Object Detection Framework for IndustrialApplications
  19. 正态总体下的假设检验
  20. 软件项目开发中的三个“不应做”事项

热门文章

  1. geetest php,Laravel 集成 Geetest验证码的方法php实例
  2. java map同步访问_同步 - Java synchronized块与Collections.synchronizedMap
  3. 送书 | 数据分析如烹小鲜
  4. 厉害了!顶级学术期刊封面的“中国元素”
  5. 一个老干部对即将从政的儿子的赠言
  6. python物理引擎模拟三体_一个物理引擎能不能模拟少量粒子之间的力?
  7. Linux启动hbase的shell命令出现警告_系统启动优盘制作图文教程(Windows Linux 等)...
  8. linux下卸载 dev sd*下硬盘,Linux 磁盘管理(示例代码)
  9. 在python中要表示一个空的代码块可以使用空语句什么_Python条件判断语句if
  10. Python | Socket01 - 创建一个TCP服务器(阻塞+单线程),将TCP客户端发过来的字符串原路返回