首页
社区
课程
招聘
[求助]大脑当机了,怎么也看不出哪里循环
发表于: 2009-5-17 21:47 4098

[求助]大脑当机了,怎么也看不出哪里循环

2009-5-17 21:47
4098
各个大哥,提点下小弟,初学SDK,诸多障碍

BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)
{
	DWORD aProcesses[1024], cbNeededa, cProcesses;
	if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeededa ) )
		return TRUE;
	cProcesses = cbNeededa / sizeof(DWORD);
	HMODULE hMods[1024];
	HANDLE hProcess;
	DWORD cbNeeded;
	unsigned int i;
	unsigned int j;


	for(j= 0; j < cProcesses; j++)
	{	
		hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
			PROCESS_VM_READ,
			FALSE, aProcesses[j]);
		if (NULL == hProcess)
			continue;

		if( EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded))
		{
			for ( i = 0; i < (cbNeeded / sizeof(HMODULE)); i++ )
			{
				TCHAR szModName[MAX_PATH];

				if ( GetModuleFileNameEx(hProcess, hMods[i], szModName,
					sizeof(szModName)/sizeof(TCHAR)))
				{
					unsigned int h;
					unsigned int j;
					for (h=0;h<MAX_PATH && szModName[h]!=L'\0';h++);
					for (j=h;j!=0 && szModName[j]!=L'\\';j--);
					unsigned int f=h-j;
					TCHAR *buffer=new TCHAR[f];
					for (unsigned int g=0;g<f;g++,j++)
					{
						buffer[g]=szModName[j+1];
					}


					if (!StrCmpCW(buffer,L"22-ImgWalk.DLL"))
					{
						DWORD lpdwProcessId=NULL;
						GetWindowThreadProcessId(hwnd,&lpdwProcessId);
						HANDLE hInsB=OpenProcess(PROCESS_ALL_ACCESS,FALSE,lpdwProcessId);
						if (hInsB==hProcess)
						{
							if(!SetWindowPos(hwnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE))
							{
								MessageBox(hwnd,L"error",L"error",MB_OK);
							}
							CloseHandle(hInsB);
						}
					}
					delete [] buffer;
				}
			}
		}

		CloseHandle(hProcess);
	}
	return true;
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 118
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
放到OD看。。。。。。。。。
2009-5-17 22:16
0
雪    币: 239
活跃值: (190)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
我考,这么大两个for循环放那里,都没有看见呀
EnumWindowsProc是回调函数,查查MSDN去,
EnumWindowsProc这函数里面有两个循环for(j= 0; j < cProcesses; j++)和for (unsigned int g=0;g<f;g++,j++)
分别为j从0到cProcesses-1和g从0到f-1,循环次数要看程序运行情况了~~
2009-5-17 22:24
0
雪    币: 140
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
楼主不明白什么是回调函数呢,听ls的吧
2009-5-17 22:41
0
雪    币: 197
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
25个进程*30个模块*10个窗口*10=75000,
加上其它代码,算他个150000,应该不会死在那里一动也不动

其它循环过大,我也想过....
2009-5-17 22:43
0
雪    币: 197
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
其实就是想把<windows核心编程>里那个InjLib改成窗口置顶程序,结果就改成这鸟样了。哎~
越改越糟,有没有大哥帮忙写下那个注入到目标程序的DLL?
2009-5-17 22:50
0
雪    币: 367
活跃值: (20)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
7
适当的调整循环,有利于理清思路
用于控制循环的变量应该多检查一下
2009-5-18 10:54
0
游客
登录 | 注册 方可回帖
返回
//