WIN32核心编程 - 进程操作(一) 进程基础 - 创建进程 - 进程句柄

  • 公开视频 -> 链接点击跳转公开课程
  • 博客首页 -> 链接点击跳转博客主页

目录

进程基础

进程的定义与概念

进程的组成

创建进程

可执行文件

CreateProces

执行流程

GetStartupInfo

进程终止 

进程句柄

创建进程

打开进程

进程提权

内核模拟

回溯对象

自身进程

 


  • 进程基础

    • 进程的定义与概念

      • 什么是进程?

      • 进程可以被定义为一个执行中程序的实例。

      • 进程提供了程序执行所需的所有资源和环境。

      • 进程与程序的区别

      • 程序是一组指令和静态数据的集合,它是存储在磁盘或其他永久存储设备上的一个文件。

      • 进程,与之相对,是程序的动态执行实例。程序本身不执行任何操作;当它被操作系统加载到内存并开始执行时,它变成一个或多个进程。

    • 进程的组成

      • 进程内存布局(代码段、数据段、堆、栈等)

      • 代码段(Text Segment)

        • 也称为文本区域,包含程序的可执行代码。

        • 通常是只读的,以防止程序自我修改。

      • 数据段(Data Segment)

        • 存储程序中的全局变量和静态变量。

        • 根据变量是否初始化分为初始化的数据段和未初始化的数据段(BSS)。

      • 堆(Heap)

        • 用于动态内存分配,如C中的malloc或C++中的new操作。

        • 堆的大小可以在运行时动态扩展和收缩。

      • 栈(Stack)

        • 存储函数的局部变量、函数参数、返回地址等。

        • 每当调用新函数时,系统会自动在栈上分配空间。函数返回时,相应的栈空间被释放。

      • 进程上下文和环境

      • 包含了操作系统用于管理和调度进程的所有信息。这包括进程的状态(运行、就绪、等待)、程序计数器、寄存器内容、打开的文件描述符、安全属性、进程ID等。

创建进程

  • 可执行文件

    • Windows 平台的可执行文包括exe、dll、sys 等扩展名的文件。

      • exe是指可执行(executable),创建进程必须使用exe 文件。

      • dll是动态链接库,一些基础、共用的代码和数据存在于 d1l文件中。

      • sys 是内核驱动程序。

      • Windows 平台的可执行文件基本都是PE格式的。

  • CreateProces

    • #include <iostream>
      #include <Windows.h>int main()
      {STARTUPINFO si;PROCESS_INFORMATION pi;ZeroMemory(&si, sizeof(si));ZeroMemory(&pi, sizeof(pi));si.cb = sizeof(si);TCHAR szCmd[] = TEXT("notepad.exe \"123.txt\"");CreateProcess(/*TEXT("C:\\Windows\\System32\\notepad.exe")*/NULL,szCmd,NULL,NULL,FALSE,CREATE_NEW_CONSOLE,NULL,NULL,&si,&pi);return 0;
      }
  • 执行流程

    • 进程的启动过程

      • 进程的启动通常是由用户发起的一个事件,如双击应用程序图标、从命令行运行可执行文件、系统启动时自动运行等。

      • 用户行为或触发事件:用户通过各种方式请求启动一个程序,如通过用户界面或命令行。

      • 操作系统响应:操作系统响应这一请求,调用相关系统函数例如 CreateProcessShellExecute 等。

      • 创建进程对象:操作系统分配进程标识符(PID),创建进程所需的内核对象和数据结构。

      • 分配资源:为新进程分配内存,打开必需的系统资源和文件。

      • 创建主线程:操作系统创建进程的主线程,并将其指向程序的入口点。

      • 开始执行:主线程开始执行,加载程序代码到内存,初始化程序,开始执行程序指令。

      • 加载需要的动态链接库:程序如果依赖于其他动态链接库(DLLs),操作系统将它们加载到进程空间中。

      • 执行完成:主线程执行完成后,它将退出。如果是多线程程序,所有线程都结束后,进程才真正结束。

    • 主线程和工作线程

      • 当一个进程启动时,操作系统会创建一个线程来执行程序代码,这个线程被称为主线程。在多线程程序中,除了主线程外,还可以创建额外的线程,这些线程称为工作线程。

      • 主线程:

        • 是程序执行的入口点。

        • 负责执行程序初始化和调用其他线程。

        • 主线程结束时,通常意味着进程的结束。

      • 工作线程:

        • 是由主线程显式创建的用于执行特定任务的线程。

        • 可以同时执行多个任务,与主线程并行工作。

        • 可以提高应用程序性能,尤其是在多核处理器上运行时。

  • GetStartupInfo

    • #include <iostream>
      #include <Windows.h>int main()
      {STARTUPINFO si = { sizeof(si) };GetStartupInfo(&si);return 0;
      }

进程终止 

  • 进程终止是操作系统中进程生命周期的最后一个阶段。
    • ExitProcess
      • #include <iostream>
        #include <Windows.h>/*void ExitProcess([in] UINT uExitCode //进程和所有线程的退出代码);*/int main()
        {//结束自身ExitProcess(0/*GetExitCodeProcess*/);return 0;
        }
    • TerminateProcess
      • #include <iostream>
        #include <Windows.h>/*BOOL TerminateProcess([in] HANDLE hProcess,		//终止进程句柄[in] UINT   uExitCode		//进程退出代码);*/int main()
        {STARTUPINFO si = { 0 };si.cb = sizeof(si);PROCESS_INFORMATION pi = { 0 };BOOL bRet = CreateProcess(TEXT("D:\\Debug\\PE_Die\\die.exe"),NULL,NULL,NULL,FALSE,CREATE_NEW_CONSOLE,NULL,NULL,&si,&pi);if (bRet == 0) return 0;system("pause");TerminateProcess(pi.hProcess, 0/*GetExitCodeProcess*/);return 0;
        }

进程句柄

  • 创建进程

    • CreateProcess - ProcessInformation - ProcessHandle

      typedef struct _PROCESS_INFORMATION {
      HANDLE hProcess;     //新创建进程的句柄。 
      HANDLE hThread;      //新创建的进程的主线程的句柄。 
      DWORD dwProcessId;   
      DWORD dwThreadId;
      } PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;
      
  • 打开进程

    • OpenProcess

      • 打开一个已经存在的进程并获取对应进程句柄。
      • #include <iostream>
        #include <Windows.h>int main()
        {HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, 2036/*进程ID*/);if (hProcess != NULL){if (!TerminateProcess(hProcess, 0)){std::cout << GetLastError() << std::endl;}}return 0;
        }

  • 进程提权

    • OpenProcessToken;

    • LookupPrivilegeValue;

    • AdjustTokenPrivileges;

    #include <iostream>
    #include <Windows.h>int main()
    {HANDLE hProcess = NULL;HANDLE hToken = NULL;LUID luid = { 0 };TOKEN_PRIVILEGES tp = { 0 };if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)){std::cout << "OpenProcessToken ErrorCode -> " << GetLastError() << std::endl;return 0;}if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid)){std::cout << "LookupPrivilegeValue ErrorCode -> " << GetLastError() << std::endl;return 0;}tp.PrivilegeCount = 1;tp.Privileges[0].Luid = luid;tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(TOKEN_PRIVILEGES),NULL,NULL);if (GetLastError() == ERROR_NOT_ALL_ASSIGNED){return 0;}return 0;
    }
    

        

内核模拟

  • 示例代码
#include <iostream>
#include <Windows.h>int main()
{HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, 2576/*进程ID*/);if (hProcess != NULL){printf("%x \r\n", hProcess);system("pause");}return 0;
}
  • 定位进程

  • 查找句柄

        

回溯对象

自身进程

  • GetCurrentProcess
    • #include <iostream>
      #include <Windows.h>int main()
      {HANDLE hProcess = GetCurrentProcess();TerminateProcess(hProcess, 0);return 0;
      }
  • GetCurrentProcessId
    • #include <iostream>
      #include <Windows.h>int main()
      {DWORD dwPid = GetCurrentProcessId();HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid);TerminateProcess(hProcess, -1);return 0;
      }

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

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

相关文章

SD NAND时序解析

一、SD NAND时序的重要性 在SD NAND的数据传输过程中&#xff0c;时序起着至关重要的作用。正确的时序确保了数据能够准确无误地在主机和SD NAND之间传输。 二、命令与读写时序 SD NAND的通信基于命令和数据传输&#xff0c;遵循以下时序规则&#xff1a; 命令与响应交互&…

安卓常用的控件

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 在Android开发中&#xff0c;控件&#xff08;也称为视图或控件组件&#xff09;是构建用户界面的基本元素。它们…

康姿百德磁性床垫好不好,效果怎么样靠谱吗

康姿百德典雅款床垫&#xff0c;打造舒适睡眠新体验 康姿百德床垫是打造舒适睡眠新体验的首选&#xff0c;其设计能够保护脊椎健康&#xff0c;舒展脊椎&#xff0c;让您享受一夜好眠。康姿百德床垫的面料选择也非常重要&#xff0c;其细腻亲肤的针织面料给您带来柔软舒适的触…

如何在操作使用ufw设置防火墙

UFW&#xff08;简单防火墙&#xff09;是用于管理iptables防火墙规则的用户友好型前端。它的主要目标是使iptables的管理更容易。 在学习Linux的时候大家一般都会关心命令&#xff0c;Posix API和桌面等&#xff0c;很少会去了解防护墙。其实除了一些网络安全厂商提供的付费防…

交互案例:5大经典交互效果

文件格式&#xff1a;.rp&#xff08;请与班主任联系获取原型文档&#xff09; 文件名称&#xff1a;Axure交互案例&#xff1a;5大经典交互实现 文件大小&#xff1a;78.5 MB 文档内容介绍 五大经典交互包括&#xff1a; 图片手风琴 图片悬浮放大 详细说明切换 图片全屏查…

上位机GUI 第三弹

&#x1f60a; &#x1f60a; &#x1f60a; 从协议层面讲&#xff0c;地质单元相当重要&#xff0c;调试模式,我只能义命令发送的索引码作为,每个设备的区分方式,调试的情况&#xff0c;不在设备上设置任何东西&#xff0c;开机访问地址和端口就能用 因为懒&#xff0c;直接将…

【代码随想录】【算法训练营】【第55天】 [42]接雨水 [84]柱状图中最大的矩形

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 55&#xff0c;又是一个周一&#xff0c;不能再坚持~ 题目详情 [42] 接雨水 题目描述 42 接雨水 解题思路 前提&#xff1a;雨水形成的情况是凹的, 需要前中后3个元素&#xff0c;计算该元…

专业的TPM管理咨询公司有哪些特点?

专业的TPM管理咨询公司&#xff0c;作为现代企业管理和设备维护的重要合作伙伴&#xff0c;其特点不仅体现在技术能力和服务质量上&#xff0c;更在于其独特的经营理念和方法论。以下是专业TPM管理咨询公司所具备的显著特点&#xff1a; 一、全面的技术实力与深厚的行业经验 专…

word 转pdf 中图片不被压缩的方法

word 转pdf 中图片不被压缩的方法 法1&#xff1a; 调节word 选项中的图片格式为不压缩、高保真 法2&#xff1a; 1: word 中的图片尽可能使用高的分辨率&#xff0c;图片存为pnd或者 tif 格式&#xff08;最高清&#xff09; 2: 转化为pdf使用打印机器&#xff0c;参数如下…

分子AI预测赛笔记

#AI夏令营 #Datawhale #夏令营 Taks1 跑通baseline 根据task1跑通baseline 注册账号 直接注册或登录百度账号&#xff0c;etc fork 项目 零基础入门 Ai 数据挖掘竞赛-速通 Baseline - 飞桨AI Studio星河社区 启动项目 选择运行环境&#xff0c;并点击确定&#xff0c;没…

台灯学生用哪个牌子最好?学生用台灯品牌排行榜分析

台灯学生用哪个牌子最好&#xff1f;护眼台灯在近年来成为家长和长时间使用电子设备人群关注的家电/学生产品。对于家中有孩子或经常面对电子屏幕的人士来说&#xff0c;很多人可能已经对这类产品有所了解并进行了购买。然而&#xff0c;部分家长对护眼台灯的认识还不够深入&am…

FFT 简单基础(matlab

使用 fs 进行采样&#xff0c;进行 N点FFT 选择显示0~N/21点的幅值 横坐标对应频率计算公式&#xff1a; fs * n / N 举个梨子&#xff1a; 频率2kHz采样1s&#xff0c;得到2000个点的序列y(n) 对序列y(n)做4096点的FFT 幅值响应对应的横坐标频率…

机器人控制系列教程之Stewart平台简介和运动学分析

Stewart平台简介及应用场景 六自由度 Stewart 并联机器人结构简图如下图所示&#xff0c;主要有一个固定平台和一个移动平台以及六个可伸缩的推杆组成&#xff0c;通常情况下&#xff0c;固定平台与底座连接&#xff0c;移动平台在空间具有六个自由度&#xff0c;通过六个推杆…

价格很实惠,希喂、爱立方、生生不息主食冻干抗得住实测吗?

在挑选主食冻干时&#xff0c;许多宠物主人都会感到头疼。尽管主食冻干相较于普通猫粮具有诸多优势&#xff0c;但其价格也相对高昂。这导致许多宠物主人担心高价购买的主食冻干可能营养价值并不理想。然而&#xff0c;在选择时&#xff0c;我们还需要考虑其他重要因素&#xf…

Spring MVC 中 使用 RESTFul 实现用户管理系统

1. Spring MVC 中 使用 RESTFul 实现用户管理系统 文章目录 1. Spring MVC 中 使用 RESTFul 实现用户管理系统2. 静态页面准备2.1 user.css2.2 user_index.html2.3 user_list.html2.4 user_add.html2.5 user_edit.html 3. SpringMVC环境搭建3.1 创建module&#xff1a;usermgt3…

tapd 与国内外主流的8大项目管理软件大对比

对比Tapd与8大项目管理工具&#xff1a;PingCode、Worktile、Redmine、Teambition、广联达、Jira、禅道、飞书。 Tapd 是腾讯推出的一款敏捷开发管理工具&#xff0c;特别适合那些需要高效协作和快速迭代的敏捷开发团队。它支持多种敏捷方法论&#xff0c;包括Scrum和Kanban&am…

数学建模------Matlab数据可视化

目录 1.plot函数 &#xff08;1&#xff09;函数介绍 &#xff08;2&#xff09;参数介绍 &#xff08;3&#xff09;图形美化 &#xff08;4&#xff09;背景更改 &#xff08;5&#xff09;多组绘制 &#xff08;6&#xff09;图形叠加 &#xff08;7&#xff09;添加…

Elasticsearch备份数据到本地,并导入到新的服务 es 服务中

文章目录 使用elasticsearch-dump工具备份安装node.js(二进制安装)解压设置环境变量安装elasticsearch-dump docker安装使用ES备份文件到本地 使用elasticsearch-dump工具备份 这个工具备份时间比较长 安装node.js(二进制安装) wget https://nodejs.org/dist/v16.18.0/node-…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 英文单词联想(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 https://app5938.acapp.acwing.com.cn/contest/2/problem/OD…

如何利用小程序容器技术搭建小程序生态?

小程序&#xff0c;作为现代移动互联网生态中的重要基础设施&#xff0c;正以其独特的创新性和便捷性展现出勃勃生机。截至2021年&#xff0c;全网小程序的数量已经突破了700万&#xff0c;其中微信小程序的开发者达到了300万之多。这一数字不仅代表了小程序在技术层面的成熟度…