张志松
记录工作点滴,留下人生轨迹。(zezese@163.com)
posts - 68,  comments - 11,  trackbacks - 0

由于每个WIN32进程拥有独立的地址空间,所以写远程线程函数不像写本地线程函数那样简单。

这里提供一个办法,像写本地线程函数一样写远程线程函数。(下载头文件和LIB文件

/**
*创建远程线程
*/
HANDLE CreateRemoteThreadEx(
   HANDLE hProcess,      //目标进程句柄,拥有PROCESS_ALL_ACCESS访问权限。
   HMODULE hModule,      //线程函数所在的模块,可以是EXE(直接传NULL)也可以是DLL。
   LPTHREAD_START_ROUTINE lpStartAddress, //线程函数地址。
   LPVOID lpParameter      //线程函数参数,可以为NULL。
   );


例子:

#include "stdafx.h"
#include <Windows.h>
#include "RemoteThreadLib.h"

//修改默认基址
#pragma comment(linker, "/BASE:0x13150000")


//远程线程函数

static DWORD WINAPI ThreadFunc(LPVOID pData)
{
 while (TRUE)
 {
  //这里可以调用WINDOWS API以及你自己在这个模块里实现的函数和类等。

  OutputDebugString("ThreadFunc");

  MessageBox(NULL, "My Remote Thread Message!", "RemoteThreadLib", MB_OK);

  Sleep(5 * 1000);
 }

 return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
 EnableDebugPrivilege(TRUE); //提权

 HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, 4000); //从任务管理器找一个进程ID,比如记事本
 
 if (hProcess != NULL)
 {
  HANDLE hThread = CreateRemoteThreadEx(hProcess, GetModuleHandle(NULL), ThreadFunc, NULL);

  if (hThread != NULL)
  {
   //成功
  }

  CloseHandle(hProcess);
 }

 return 0;
}

VS2003+XP下调试通过!

posted on 2011-01-28 11:56 张志松 阅读(517) 评论(0)  编辑 收藏 引用 所属分类: VC/MFC

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2011年1月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
303112345

常用链接

留言簿(2)

随笔分类

随笔档案

文章分类

文章档案

转载

搜索

  •  

最新评论

阅读排行榜

评论排行榜