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.pswp.cn/news/448189.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448189.shtml
英文地址,請注明出處:http://en.pswp.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;里邊…