远程线程

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 }
 
原文地址:https://www.cnblogs.com/hanhandaren/p/11147042.html