关于ThreadProc Callback Function的一点误会及自我更正

MSDN原文:

1:CreateRemoteThread

HANDLE WINAPI CreateRemoteThread(
  __in          HANDLE hProcess,
  __in          LPSECURITY_ATTRIBUTES lpThreadAttributes,
  __in          SIZE_T dwStackSize,
  __in          LPTHREAD_START_ROUTINE lpStartAddress,
  __in          LPVOID lpParameter,
  __in          DWORD dwCreationFlags,
  __out         LPDWORD lpThreadId
);

lpParameter

A pointer to a variable to be passed to the thread function.(不知道是我E文太烂还是什么)

 

这个lpParameter 的确不咋地,它让我误解了,我的错误理解:

这个lpParameter是指向你所要传给ThreadProc的参数的指针了!!

 

2:ThreadProc
An application-defined function that serves as the starting address for a thread.

Specify this address when calling the CreateThread or CreateRemoteThread function

The LPTHREAD_START_ROUTINE type defines a pointer to this callback function. ThreadProc is a placeholder for the application-defined function name.


 DWORD WINAPI ThreadProc(
  [in]                 LPVOID lpParameter   );

lpParameter

The thread data passed to the function using the lpParameter parameter of the CreateThread or CreateRemoteThread function.(这句解释道出了真谛,)

这两个API中的 LPVOID lpParameter  其实只是个LPVOID大小的一个参数而已,(
所以我觉得如下声明更好一些:


 [in]                 DWORD dwParam 

 

也就说我在调用CreateRemoteThread时传给它的参数就是ThreadProc收到的参数

 

当然你自己可以把它解析成一个指针!!这在需要传递更大、更多的参数时是必须的!

 

 

我的误解导致了我几个小时没有调通我的程序:

BOOL WINAPI FreeLibrary(
  __in          HMODULE hModule
);
我需要在远程进程的中新建线程调用FreeLibrary卸掉一个DLL

我通过LoadLibrary、GetModuleHandle成功得到该DLL的句柄之后,

我一直在尝试用VirtualAllocEx、WriteProcessMemory把这个值写到远程地址空间。。。。

其实大可不必,正确的方法:

::CreateRemoteThread( m_hProcess, 0, 0, (LPTHREAD_START_ROUTINE)..(FreeLibrary的地址), hModule, 0, 0);

就万事大吉了!!!!

而我饶了好大一圈不说,还绕错了!!!

汗死了!!!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值