zoukankan      html  css  js  c++  java
  • 远程线程

    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 }
     
  • 相关阅读:
    【转】XenServer的架构之Xenopsd组件架构与运行机制
    【转】XenServer架构之XAPI的调用流程
    关于JS面向对象、设计模式、以及继承的问题总结
    表格排序的具体案例(包括数字和汉字排序)
    call.apply.冒充对象继承
    ES6的学习之路(基础知识总结)
    ES6的基础知识总结
    JS预解释的总结
    函数执行的作用域问题
    JS中的闭包问题总结
  • 原文地址:https://www.cnblogs.com/hanhandaren/p/11147042.html
Copyright © 2011-2022 走看看