以下代码出现了错误,出现错误,
HWND hDestTop;
hDestTop = ::FindWindow("progman", NULL);
hDestTop = ::FindWindowEx(hDestTop, 0, "shelldll_defview", NULL);
hDestTop = ::FindWindowEx(hDestTop, 0, "syslistview32", NULL);
int count=(int)::SendMessage( hDestTop, LVM_GETITEMCOUNT, 0, 0); LVITEM lvi, *_lvi;
char *_item, item[512];
int *_iImage, iImage ;
unsigned long pid;
HANDLE process;
GetWindowThreadProcessId( hDestTop, &pid);
process=OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE|PROCESS_QUERY_INFORMATION, FALSE, pid);
_lvi = (LVITEM*)VirtualAllocEx(process, NULL, sizeof(LVITEM), MEM_COMMIT, PAGE_READWRITE);
_item = (char*)VirtualAllocEx(process, NULL, 512, MEM_COMMIT, PAGE_READWRITE);
_iImage = (int*)VirtualAllocEx(process, NULL, sizeof(int), MEM_COMMIT, PAGE_READWRITE); lvi.cchTextMax=512; MEMORY_BASIC_INFORMATION *pstructd;
PVOID BaseAddress; PVOID AllocationBase; DWORD AllocationProtect; DWORD RegionSize; DWORD State; DWORD Protect; DWORD Type; DWORD dwLength;
DWORD DD;
VirtualQueryEx(process,_lvi,pstructd,dwLength); //这里
AllocationBase=pstructd->AllocationBase;//这里
VirtualProtectEx(process,AllocationBase,dwLength,PAGE_READWRITE,&DD);
//程序由于并不能写入虚拟内存,所以得不出桌面图标项,所以我想改变读写属性,但出错了,不明为什么?
//BaseAddress=structd.AllocationBase;
for( int i=0; i < count; i++)
{ lvi.iSubItem=0;
lvi.pszText=_item; int a= WriteProcessMemory(process, _lvi, &lvi, sizeof(LVITEM), NULL);
// WriteProcessMemory(process, _lvi, &lvi, sizeof(LVITEM), NULL); int b= ::SendMessage( hDestTop, LVM_GETITEMTEXT, (WPARAM)i, (LPARAM)_lvi);
::SendMessage( hDestTop, LVM_GETIMAGELIST, (WPARAM)i, (LPARAM)_lvi); int c= ReadProcessMemory(process, _item, item, 512, NULL);
ReadProcessMemory(process, _iImage, &iImage, sizeof(iImage), NULL); CString str;
str.Format(" %s ----> %d\n", item, iImage);
AfxMessageBox( str );
}
VirtualFreeEx(process, _lvi, 0, MEM_RELEASE);
VirtualFreeEx(process, _item, 0, MEM_RELEASE); CloseHandle( process );
HWND hDestTop;
hDestTop = ::FindWindow("progman", NULL);
hDestTop = ::FindWindowEx(hDestTop, 0, "shelldll_defview", NULL);
hDestTop = ::FindWindowEx(hDestTop, 0, "syslistview32", NULL);
int count=(int)::SendMessage( hDestTop, LVM_GETITEMCOUNT, 0, 0); LVITEM lvi, *_lvi;
char *_item, item[512];
int *_iImage, iImage ;
unsigned long pid;
HANDLE process;
GetWindowThreadProcessId( hDestTop, &pid);
process=OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE|PROCESS_QUERY_INFORMATION, FALSE, pid);
_lvi = (LVITEM*)VirtualAllocEx(process, NULL, sizeof(LVITEM), MEM_COMMIT, PAGE_READWRITE);
_item = (char*)VirtualAllocEx(process, NULL, 512, MEM_COMMIT, PAGE_READWRITE);
_iImage = (int*)VirtualAllocEx(process, NULL, sizeof(int), MEM_COMMIT, PAGE_READWRITE); lvi.cchTextMax=512; MEMORY_BASIC_INFORMATION *pstructd;
PVOID BaseAddress; PVOID AllocationBase; DWORD AllocationProtect; DWORD RegionSize; DWORD State; DWORD Protect; DWORD Type; DWORD dwLength;
DWORD DD;
VirtualQueryEx(process,_lvi,pstructd,dwLength); //这里
AllocationBase=pstructd->AllocationBase;//这里
VirtualProtectEx(process,AllocationBase,dwLength,PAGE_READWRITE,&DD);
//程序由于并不能写入虚拟内存,所以得不出桌面图标项,所以我想改变读写属性,但出错了,不明为什么?
//BaseAddress=structd.AllocationBase;
for( int i=0; i < count; i++)
{ lvi.iSubItem=0;
lvi.pszText=_item; int a= WriteProcessMemory(process, _lvi, &lvi, sizeof(LVITEM), NULL);
// WriteProcessMemory(process, _lvi, &lvi, sizeof(LVITEM), NULL); int b= ::SendMessage( hDestTop, LVM_GETITEMTEXT, (WPARAM)i, (LPARAM)_lvi);
::SendMessage( hDestTop, LVM_GETIMAGELIST, (WPARAM)i, (LPARAM)_lvi); int c= ReadProcessMemory(process, _item, item, 512, NULL);
ReadProcessMemory(process, _iImage, &iImage, sizeof(iImage), NULL); CString str;
str.Format(" %s ----> %d\n", item, iImage);
AfxMessageBox( str );
}
VirtualFreeEx(process, _lvi, 0, MEM_RELEASE);
VirtualFreeEx(process, _item, 0, MEM_RELEASE); CloseHandle( process );
解决方案 »
- CEGUI与OpenGL、MFC结合出现的问题
- DLL初学者问一个小问题 总是提示函数错误“不允许 dllimport 函数 的定义”
- 为什么select不出数据
- 求能够有效防止DDOS攻击的放火墙,分或Money不成问题,大家帮帮我
- 请问:关于打印完毕停止走纸的问题(我就剩这点分了,谢谢)
- 很笨的问题,如何将CTime的类型转换成CString的类型,用CTime::Format函数吗?
- 我在win32参考大全里没有找到TCN_SELCHANGE消息,哪位能告诉我。。。
- 找不到<stream.h>怎么办?
- 请问有下载vc6.0英文版的地方吗??
- MyICQ真的能免费吗?大家一起来交流交流.
- 我在类的private里设一个成员为char a[12];我要传递时用什么传?
- 高手帮忙!!用direcshow开发摄像头拍照
我记得这个是MS里C++work专栏的文章
错误信息是什么呀?是不是权限不够WriteProcessMemory(process, _lvi, &lvi, sizeof(LVITEM), NULL);
返回0,错误是5