CreateRemoteThread函数

CreateRemoteThread函数

创建在另一个进程的虚拟地址空间中运行的线程。

使用CreateRemoteThreadEx函数创建在另一个进程的虚拟地址空间中运行的线程,并可选择指定扩展属性。

语法

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

参数

  • hProcess

要创建线程的进程的句柄。句柄必须具有PROCESS_CREATE_THREAD,PROCESS_QUERY_INFORMATION,PROCESS_VM_OPERATION,PROCESS_VM_WRITE和PROCESS_VM_READ访问权限,并且在某些平台上没有这些权限时可能会失败。有关更多信息,请参阅 进程安全性和访问权限。

  • lpThreadAttributes

指向SECURITY_ATTRIBUTES结构的指针,该 结构指定新线程的安全描述符,并确定子进程是否可以继承返回的句柄。如果lpThreadAttributes为NULL,则线程获取默认安全描述符,并且不能继承句柄。线程的默认安全描述符中的访问控制列表(ACL)来自创建者的主令牌。

Windows XP: 线程的默认安全描述符中的ACL来自创建者的主要或模拟令牌。Windows XP SP2和Windows Server 2003更改了此行为。

  • dwStackSize

堆栈的初始大小,以字节为单位。系统将此值四舍五入到最近的页面。如果此参数为0(零),则新线程将使用可执行文件的默认大小。有关更多信息,请参阅 线程堆栈大小。

  • lpStartAddress

指向由线程执行的LPTHREAD_START_ROUTINE类型的应用程序定义函数的指针,表示远程进程中线程的起始地址。该功能必须存在于远程进程中。有关更多信息,请参阅 ThreadProc。

  • lpParameter

指向要传递给线程函数的变量的指针。

  • dwCreationFlags

控制线程创建的标志。

含义
0该线程在创建后立即运行。
CREATE_SUSPENDED 0x00000004线程是在挂起状态下创建的,并且在调用ResumeThread函数之前不会运行 。
STACK_SIZE_PARAM_IS_A_RESERVATION 0x00010000所述dwStackSize参数指定堆栈的初始保留大小。如果未指定此标志,则dwStackSize指定提交大小。

- lpThreadId
指向接收线程标识符的变量的指针。

如果此参数为NULL,则不返回线程标识符。

返回值

如果函数成功,则返回值是新线程的句柄。

如果函数失败,则返回值为NULL。要获取扩展错误信息,请调用 GetLastError。

请注意,即使lpStartAddress指向数据,代码或无法访问, CreateRemoteThread也可能成功。如果线程运行时起始地址无效,则发生异常,并且线程终止。由于无效的起始地址导致的线程终止被视为线程进程的错误退出。此行为类似于CreateProcess的异步特性, 即使创建进程无效或缺少动态链接库(DLL),也会创建该进程。

备注

远程线程函数会导致一个新的执行线程指定进程的地址空间开始。该线程可以访问进程打开的所有对象。

终端服务按设计隔离每个终端会话。因此,如果目标进程与调用进程位于不同的会话中,则 CreateRemoteThread将失败。

创建新的线程句柄,可以完全访问新线程。如果未提供安全描述符,则句柄可用于需要线程对象句柄的任何函数中。当提供安全描述符时,在授予访问权限之前,对句柄的所有后续使用执行访问检查。如果访问检查拒绝访问,则请求进程无法使用句柄来获取对线程的访问权限。

如果线程是在可运行状态下创建的(即,如果未使用CREATE_SUSPENDED标志),则线程可以在CreateThread返回之前开始运行,特别是在调用者接收到创建的线程的句柄和标识符之前。

创建的线程的线程优先级为THREAD_PRIORITY_NORMAL。使用 GetThreadPriority和 SetThreadPriority函数来获取和设置线程的优先级值。

当线程终止时,线程对象获得信号状态,该状态满足等待对象的线程。

线程对象保留在系统中,直到线程终止并且通过调用CloseHandle关闭它的所有 句柄。

ExitProcess, ExitThread, CreateThread, CreateRemoteThread的功能,以及正在启动一个过程(作为结果 的CreateProcess呼叫)的过程中彼此之间串行化。这些事件中只有一个一次发生在地址空间中。这意味着以下限制:

  • 在进程启动和DLL初始化例程期间,可以创建新线程,但是在为进程执行DLL初始化之前它们不会开始执行。
  • 进程中只有一个线程可以一次处于DLL初始化或分离例程中。
  • 所有线程完成DLL初始化或分离例程后,ExitProcess返回。

此函数的一个常见用途是将线程注入正在调试的进程中以发出中断。但是,建议不要使用此方法,因为额外的线程会使调试应用程序的人感到困惑,并且使用此技术会产生一些副作用:

  • 它将单线程应用程序转换为多线程应用程序。
  • 它改变了进程的时序和内存布局。
  • 它导致调用进程中每个DLL的入口点。

此函数的另一个常见用途是将一个线程注入进程以查询堆或其他进程信息。这可能会导致前一段中提到的相同副作用。此外,如果线程尝试获取另一个线程正在使用的锁的所有权,则应用程序可能会死锁。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/448189.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

防火墙问题 Linux系统 /etc/sysconfig/路径下无iptables文件

虚拟机新装了一个CentOs7,然后做防火墙配置的时候找不到iptables文件,解决方法如下: 因为默认使用的是firewall作为防火墙,把他停掉装个iptable systemctl stop firewalld systemctl mask firewalld yum install -y iptables yum …

如果风 知道 ... 如果云 知道 ...

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 //《心灵之音》----- Bandari 来自酷狗。 一直很喜欢听歌: 喜欢默默的听、一个人安安静静的听、长长久久的听、听得忘乎所…

切记!这样洗头最伤身

各种的忙碌已经成为了现代人生活中的一个标志,每天的加班,玩乐到深夜,游戏等,都让不少的人的洗澡时间都只能在临睡前,而女人洗头也只能在晚上临睡之前洗。如果可以有足够的时间,等待头发完全干透了之后&…

可以供MFC调用的,QT实现的DLL(qtwinmigrate实现)

MFC和QT的消息循环机制不同&#xff0c;所以&#xff0c;要让QT写的DLL可以供MFC调用&#xff0c;要做一点特殊的处理 #include <qmfcapp.h> #include <qwinwidget.h> #include <QtGui>#include <QtGui/QMessageBox> #include <windows.h> #incl…

离合器的操作技巧

学车其实不难&#xff0c;学车最基本的几个操作&#xff0c;打方向盘、踩离合、踩刹车、换档位都是学员需要必学的基本操作&#xff0c;在网络驾校上有学员反应&#xff0c;对离合器的操作比较难&#xff0c;经常错误操作造成熄火等现象&#xff0c;现在泸州驾校论坛小编整理了…

Linux 上 安装 nginx、 阿里云服务器上安装 nginx

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Docker 方式安装见另一文&#xff1a;Docker 方式安装 Nginx 、阿里云服务器上装 Ngnix 1. gcc 安装 安装 nginx 需要先将官网下载的源…

CSDN-markdown编辑器使用说明

欢迎使用Markdown编辑器 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章&#xff0c;了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持&#x…

本地Android源代码库下载源码

1. 安装repo 新建放置repo的bin目录 $ mkdir ~/bin $ echo "export PATH~/bin:\$PATH" >> ~/.bashrc$ source ~/.bashrc 获取repo并赋予可执行权限&#xff08;或者参考google官方网站&#xff09; $ curl https://storage.googleapis.com/git-repo-downloads/…

解决: Spring Boot报错 This application has no explicit mapping ... a fallback

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 启动spring boot然后访问页面的时候&#xff0c;出现如下错误&#xff1a; Whitelabel Error PageThis application has no explicit m…

三种钱非常奥妙 花越多就赚越多

世界上有三种钱非常奥妙&#xff0c;你花得越多就赚得越多。这是学校老师不会教的事&#xff0c;让我们看看&#xff1a; 第一种钱&#xff1a;投资自己&#xff0c;自我成长&#xff0c;学习的钱一定要花&#xff01; 如果我们把世界首富比尔.盖茨从美国抓到非洲&#xff0c…

#pragma once 与 #ifndef比较分析

为了避免同一个文件被include多次&#xff0c;C/C中有两种方式&#xff0c;一种是#ifndef方式&#xff0c;一种是#pragma once方式。在能够支持这两种方式的编译器上&#xff0c;二者并没有太大的区别&#xff0c;但是两者仍然还是有一些细微的区别。 方式一&#xff1a; #ifn…

中医:看脚十秒钟可知身体疾病

中医认为&#xff0c;自测疾病有很多方法&#xff0c;如通过身体部位可自测疾病&#xff0c;还可通过疼痛自测疾病等等。在这里&#xff0c;我们主要讲如何通过脚自测疾病。也许&#xff0c;许多人不太在意自己的脚部&#xff0c;是最不受“照顾”的一个身体部位。然而&#xf…

Springcloud 引导上下文

SpringCloud为我们提供了bootstrap.properties的属性文件&#xff0c;我们可以在该属性文件里做我们的服务配置。可是&#xff0c;我们知道SpringBoot已经为我们提供了做服务配置的属性文件application.properties&#xff0c;那么这两个配置文件有什么区别呢&#xff1f;在Spr…

Springboot 项目中过滤器的使用

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 编写过滤器类&#xff1a; package gentle;import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.se…

C++ 中 new 操作符内幕:new operator、operator new、placement new

一、new 操作符&#xff08;new operator&#xff09; 人们有时好像喜欢有意使C语言的术语难以理解。比方说new操作符&#xff08;new operator&#xff09;和operator new的差别。 当你写这种代码&#xff1a; string *ps new string("Memory Management");你使…

Flask-1-05-CookieSession

接下来我会演示一下设置Cookie 读取Cookie 删除Cookie&#xff0c;以及添加Cookie的原理 接下来我们分别定义3个视图为 set_cookie、get_cookie、del_cookie # coding:utf-8from flask import Flask, make_response, requestapp Flask(__name__)app.route("/set_cookie&q…

18个不可不知的有用潜规则

人情世故是我们日常生活中积累的约定俗成的行为规则&#xff0c;属于社会知识的范畴。这些知识大半来源于与不同人群的社会交际&#xff0c;也来源于社会冲突与社会发展。在有专业知识与技能的情况下&#xff0c;人情世故能够帮助我们个人缓和与其他人之间的紧张度&#xff0c;…

解决跨域问题:No ‘Access-Control-Allow-Origin‘ header is present on the requested resource.

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 PS&#xff1a;如果遇到 这个问题 Request header field Content-Type is not allowed by Access-Control-Allow-Headers&#xff0c;解…

错误代码:0xc000007b 解决思路

三维电子沙盘项目&#xff1a; 现场环境部署时&#xff0c;二维平台和模型在实际部署中遇到了0xc000007b的问题&#xff0c;网上很多说是DX的问题&#xff0c;但并不能解决。 之前在编译OpenDDS时也遇到过类似的问题&#xff0c;是在不同版本的OpenDDS的动态库混用时遇到的&a…

上传本地项目到git

1、到需要上传的文件夹下&#xff0c;打开gitbase 2、git init 3、git add . 4、git commit -m init 5、验证权限 首先在Git Bash中输入:ssh-keygen -t rsa -C "youremailxxx.com" 然后一路回车,这个会在当前用户文件夹下&#xff0c;生成.ssh 文件夹&#xff0c;里边…