VirtualAllocEx 跨进程读写数据 代码注入
VirtualAllocEx 函数的作用是在指定进程的虚拟空间保留或提交内存区域,除非指定MEM_RESET参数,否则将该内存区域置0。
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了。
代码如下。
{
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 跨进程读写数据 代码注入相关推荐
- Windows进程与线程学习笔记(九)—— 线程优先级/进程挂靠/跨进程读写
Windows进程与线程学习笔记(九)-- 线程优先级/进程挂靠/跨进程读写 要点回顾 线程优先级 调度链表 分析 KiFindReadyThread 分析 KiSwapThread 总结 进程挂靠 ...
- 进程线程007 进程挂靠与跨进程读写内存
文章目录 进程挂靠 进程与线程的关系 线程与进程如何关联 为什么需要ApcState.Process CR3的值可以随便改吗 分析NtReadVirtualMemory函数 总结 跨进程读写内存 跨进 ...
- 用FileMapping跨进程共享数据
FileMapping貌似是Windows唯一提供的跨进程共享数据的方法.如果将客户端的资源文件单独创建一个资源进程,则本机开启的多个客户端都可以使用该资源进程获取资源,这样,很容易使大型3D游戏支持 ...
- 用c语言做RFID读卡程序,2.STM32读卡号读写数据代码示例3.0(C语言)
文件名大小更新时间 2.STM32读卡号读写数据代码示例3.0(C语言)\HFRFID.uvgui.WEIZAI736912016-07-15 2.STM32读卡号读写数据代码示例3.0(C语言)\H ...
- 13.跨进程读写内存
跨进程的本质是"进程挂靠"正常情况下, A进程的线程只能访问A进程的地址空间,如果A进程的线程想访问B进程的地址空间,就要修改当前的Cr3的值为B进程的页目录表基值(KPROCES ...
- 【web-攻击用户】(9.4)跨域捕获数据——通过注入HTML捕获数据、注入CSS捕获数据、JavaScript劫持
目录 跨域捕获数据 1.1.简介: 1.2.通过注入HTML捕获数据 简介: 示例: 1.3.通过注入CSS捕获数据 简述: 1.4.JavaScript劫持 简述: 函数回调 JSON 变量分配 E ...
- android跨进程读写内存,Android 跨进程内存泄露
内存泄露的检测和修复一直是每个APP的重点和难点,也有很多文章讲述了如何检测和修复.本篇文章 结合最近开发的项目遇到的实例,讲述下Android Binder导致的内存泄露的一个案例. 发现问题 参与 ...
- php 跨进程读写,php使用多个进程同时控制文件读写示例
代码如下: /** * 写入数据 * @param [string] $path [文件路径] * @param [string] $mode [文件打开模式] * @param [string ...
- 利用管道实现父子进程读写数据
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/wait.h ...
最新文章
- PCL:点云中的超体素数据
- thread.sleep是让哪个线程休眠_java开发两年,这些线程知识你都不知道,你怎么涨薪?...
- 趣说游戏AI开发:曼哈顿街角的A*算法
- 一二三系列之状压DP——Max Correct Set(一)Neko Rules the Catniverse (Large Version)(二)Make It Ascending(三)
- Linux 下rpm包搭建LAMP环境
- 嘉年华回顾丨 杨长老带你解密 Oracle 19c 和 20c 的新特性
- 05-03 docker 常用命令
- C+++之begin(),end(),rend(),rbegin()
- jquery 点击显示更多
- 联想笔记本关闭锁定计算机,联想笔记本电脑键盘锁了怎么解开
- 三相桥式全控整流电路simulink仿真_交流变直流,二极管整流电路是如何工作的?...
- 苹果官方付费升级内存_vivo用户必看!官方推出扩容服务,最高升级到128G!
- 我们为什么不画高保真原型图
- 解决frp内网穿透vsftpd报227错误
- 洛阳九县八取名字_洛阳市地图(洛阳市九县六区地图)
- Ocata Neutron代码分析(六)——APIRouter的初始化(1)加载core plugin和service plugin...
- 人在江湖,以“核”为贵
- YOLOv6: A Single-Stage Object Detection Framework for IndustrialApplications
- 正态总体下的假设检验
- 软件项目开发中的三个“不应做”事项
热门文章
- geetest php,Laravel 集成 Geetest验证码的方法php实例
- java map同步访问_同步 - Java synchronized块与Collections.synchronizedMap
- 送书 | 数据分析如烹小鲜
- 厉害了!顶级学术期刊封面的“中国元素”
- 一个老干部对即将从政的儿子的赠言
- python物理引擎模拟三体_一个物理引擎能不能模拟少量粒子之间的力?
- Linux启动hbase的shell命令出现警告_系统启动优盘制作图文教程(Windows Linux 等)...
- linux下卸载 dev sd*下硬盘,Linux 磁盘管理(示例代码)
- 在python中要表示一个空的代码块可以使用空语句什么_Python条件判断语句if
- Python | Socket01 - 创建一个TCP服务器(阻塞+单线程),将TCP客户端发过来的字符串原路返回