创建远程线程 - CreateRemoteThread
函数简介
在指定的窗口所在进程中创建一个线程,常用于进程注入、代码注入等高级系统编程场景。
接口名称
CreateRemoteThread
DLL调用
long CreateRemoteThread(long instance, long hwnd, long lpStartAddress, long lpParameter, int dwCreationFlags, long* lpThreadId);
参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
| instance | 长整数型 | OLAPlug对象的指针,由 CreateCOLAPlugInterFace 接口生成。 |
| hwnd | 长整数型 | 窗口句柄或者进程ID |
| lpStartAddress | 长整数型 | 线程入口地址 |
| lpParameter | 长整数型 | 线程参数 |
| dwCreationFlags | 整数型 | 创建标志,控制线程的创建方式 |
| lpThreadId | 长整数型指针 | 返回线程ID的指针 |
示例
// 在目标进程中创建远程线程
long target_hwnd = FindWindow(ola, "Notepad", "");
if (target_hwnd != 0) {
long thread_id = 0;
long start_address = 0x10000000;
long parameter = 123;
long thread_handle = CreateRemoteThread(ola, target_hwnd, start_address, parameter, 0, &thread_id);
if (thread_handle != 0) {
printf("远程线程创建成功,线程ID: %ld\n", thread_id);
CloseHandle(ola, thread_handle);
}
}
返回值
长整数型:成功返回线程句柄,失败返回0。
注意事项
- 创建远程线程需要相应的进程权限
- 线程入口地址必须在目标进程的地址空间内有效
- 建议在不再需要线程句柄时调用 CloseHandle 关闭
- 创建挂起状态的线程可以使用 CREATE_SUSPENDED 标志
- 使用不当可能导致目标进程崩溃或系统不稳定
