CreateRemoteThread是一个Windows API函数,它能够创建一个在其它进程地址空间中运行的线程(也称:创建远程线程).。
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
);
参数说明
hProcess [in]
线程所属进程的进程句柄.
该句柄必须具有 PROCESS_CREATE_THREAD, PROCESS_QUERY_INFORMATION, PROCESS_VM_OPERATION, PROCESS_VM_WRITE,和PROCESS_VM_READ 访问权限.
lpThreadAttributes [in]
一个指向 SECURITY_ATTRIBUTES 结构的指针, 该结构指定了线程的安全属性.
dwStackSize [in]
线程栈初始大小,以字节为单位,如果该值设为0,那么使用系统默认大小.
lpStartAddress [in]
在远程进程的地址空间中,该线程的线程函数的起始地址.
lpParameter [in]
传给线程函数的参数.
dwCreationFlags [in]
线程的创建标志.
值
|
含义
|
0
|
线程创建后立即运行
|
CREATE_SUSPENDED
0x00000004
|
线程创建后先将线程挂起,直到 ResumeThread 被调用.
|
STACK_SIZE_PARAM_IS_A_RESERVATION
0x00010000
|
dwStackSize 参数指定为线程栈预订大小,如果STACK_SIZE_PARAM_IS_A_RESERVATION没有被指定,dwStackSize 参数指定为线程栈分配大小.
|
lpThreadId [out]
指向所创建线程ID的指针,如果创建失败,该参数为NULL.
1 // 远程线程.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include <windows.h> 6 BOOL MyCreateRemoteThread(DWORD dwProcessID, DWORD dwProcAddr) 7 { 8 HANDLE hProcess; 9 HANDLE hThread; 10 DWORD dwThread; 11 12 dwThread = 0; 13 hProcess = 0; 14 //1.获取进程的句柄 15 hProcess=OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessID); 16 if (hProcess==NULL) 17 { 18 OutputDebugString("OpenProcessError! "); 19 return FALSE; 20 } 21 //2.创建远程线程 22 CreateRemoteThread(hProcess, NULL,0, (LPTHREAD_START_ROUTINE)dwProcAddr,NULL, 0,&dwThread); 23 if (hThread == NULL) 24 { 25 OutputDebugString("CreateRemoteThreadError! "); 26 CloseHandle(hProcess); 27 return FALSE; 28 } 29 //3.关闭资源 30 CloseHandle(hProcess); 31 CloseHandle(hThread); 32 33 return TRUE; 34 35 } 36 37 int main() 38 { 39 MyCreateRemoteThread(752, 0x401090);//在原线程里创建新的线程,然后再调用它自己的函数 40 return 0; 41 }