Windows 进程和作业

news2024/11/25 4:46:09

Windows 进程和作业

  • 创建进程
    • CreateProcess 函数的参数
      • CreateProcess 的流程
    • 创建Windows“现代化”进程
    • 创建其他类型的进程
  • 进程的内部构造
    • EPROCESS
    • KPROCESS
    • PEB
    • CSR_PROCESS
    • W32PROCESS
  • 受保护进程
  • 最小进程和 Pico 进程
    • 最小进程
    • Pico进程
  • Trustlet 安全进程
  • 进程的终止
  • 作业
    • 作业的限制
    • 使用作业
    • 操作作业
    • Windows 查看作业对象
    • Windows容器


本节内容大纲如下:

在这里插入图片描述

创建进程

CreateProcess 函数的参数

CreateProcess是Windows操作系统提供的API,用于创建新进程。通过CreateProcess API,可以创建一个新的进程并启动它,同时可以指定程序、命令行参数、工作目录、环境变量、安全特性和进程优先级等。CreateProcess API的原型如下:

BOOL CreateProcess(
LPCSTR lpApplicationName,
LPSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);

参数说明:

  • lpApplicationName:可执行文件的名称或完整路径。
  • lpCommandLine:命令行参数。
  • lpProcessAttributes和lpThreadAttributes:安全特性参数,用于指定进程和线程的安全属性,默认为NULL。
  • bInheritHandles:是否继承父进程的句柄,如文件句柄、命名管道等。
  • dwCreationFlags:创建标志,如指定CREATE_NEW_CONSOLE可以创建一个新的控制台窗口。
  • lpEnvironment:环境变量指针,指定进程使用的环境变量,默认为NULL,即使用父进程的环境变量。
  • lpCurrentDirectory:工作目录。
  • lpStartupInfo:启动信息结构体,用于指定进程的窗口样式、标题等。
  • lpProcessInformation:进程信息结构体,包含了新创建进程的句柄、ID等信息。

CreateProcess API可用于创建GUI程序、控制台程序、Windows服务、COM服务器等各种类型的应用程序。

CreateProcess 的流程

CreateProcess 的主要流程如下:

  1. 验证参数,将 Windows 子系统标志和选项转换为原生形式,解析、验证并转换属性列表为原生形式。
  2. 打开要在进程中执行的映像文件(.exe)
  3. 创建 Windows 执行体进程对象
  4. 创建初始线程(栈、上下文、Windows 执行体线程对象)
  5. 执行创建后需要的,与 Windows 子系统有关的进程初始化操作
  6. 开始执行初始化线程(指定了 CREATE_SUSPENDED 除外)
  7. 在新进程和线程的上下文种完成地址空间的初始化操作(如加载 DLL 库),并开始执行程序的入口点。

在这里插入图片描述

创建Windows“现代化”进程

创建现代化应用程序进程除了要通过正确的可执行文件路径调用 CreateProcess 之外,还要执行其他工作。例如要提供必需的命令行参数,此外还要添加一个未文档化的进程属性,并提供一个名为 PROC_THREAD_ATTRIBUTE_PACKAGE_FULL_NAME 的键,通过该键的值设置完整的商店应用包名称。虽然该属性尚未文档化,但我们可以通过其他方式执行商店应用。

创建其他类型的进程

虽然 Windows 应用程序可以启动传统或现代化应用程序,但执行体还可以支持绕过 Windows API 启动其他类型的进程。如原生进程、最小进程或 Pico 进程。

进程的内部构造

每个 Windows 进程都可以用一个执行体进程(EPROCESS)结构来表示。

PROCESS 及其大部分相关数据结构都位于系统地址空间中。唯一例外是进程环境块(process environment block,PEB),它是位于进程(用户)地址空间中。

EPROCESS

在这里插入图片描述

可以通过 dt nt!_eprocess 查看当前调试进程的 EPROCESS 内容。

在这里插入图片描述

KPROCESS

在 EPROCESS 中的第一个成员名为进程控制块(process control block,PCB),它是一种 KPROCESS 类型的结构,专门用于内核进程。它的结构如下:

在这里插入图片描述
我们可以通过 dt nt!_kprocess 查看 KPROCESS 结构。
在这里插入图片描述
在这里插入图片描述

PEB

PEB 位于它所描述的进程的用户模式地址空间,其中包含了映像加载程序、堆管理器以及其他 Windows 组件需要从用户模式访问的信息。通过系统调用暴露所有这些信息是一种非常大开销的做法,而 EPROCESS 和 KPROCESS 结构只能从内核模式访问,为了节省内核空间所以又有了用户空间下的 PEB(process environment block,PEB)

在这里插入图片描述

查看 PEB 的方式可以使用 !process 命令或者 !peb 命令查看。首先使用 !process 命令查看进程对象及相关结构中所含信息的子集。对于每个进程,该命令的输出结果都分为两部分。当不指定进程地址或者 ID 时,执行 !process 会列出当前在 CPU0 上运行的线程所属的进程信息。

在这里插入图片描述
在这里插入图片描述

CSR_PROCESS

CSR_PROCESS 结构包含了专用于 Windows 子系统(Csrss)进程信息,因此仅 Windows 应用程序才有相关联的 CSR_PROCESS 结构(Smss 就没有)。此外,因为每个会话都有自己的 Windows 子系统实例,所以 CSR_PROCESS 结构是由每个会话的 Csrss 进程维护的。CSR_PROCESS 的基本结构如下:

在这里插入图片描述

在 windbg 中使用 !process 0 0 csrss.exe 查看:

在这里插入图片描述

在这里插入图片描述

W32PROCESS

W32PROCESS 结构其中包含了内核(Win32K)中 Windows 图形和窗口管理代码维护 GUI 进程状态信息(这些信息是在进程进行过至少一次 USER/GDI 系统调用时定义好的)所需的全部信息。

W32PROCESS 的基本结构如下(由于 Win32k 结构的类型符号没有公开提供,所以无法通过 windbg 进行展示)

在这里插入图片描述

受保护进程

简单的说。就是为了使得在 Windows 系统下播放和使用的媒体文件能够保持其版权收到可靠的保护(数字版权,digital rights management,DRM),从而专门设置了这一进程——受保护进程。

受保护进程能够与普通进程共存,但是会对系统中其他进程对此类进程请求访问权限的过程添加很多限制。

可以通过 process explorer 查看受保护的进程。

在这里插入图片描述

最小进程和 Pico 进程

最小进程

Windows 10 最少具备两个最小进程:

  • system 进程
  • memory compression 进程

此外,还可能会有 secure system 进程。

在 Windows 10 中还可以通过其他方式运行最小进程:启用适用于 Linux 的 Windows 子系统(WSL)这一可选功能,借此安装由 Lxss.sys 和 LxCore.sys 驱动程序组成且系统自带的 Pico 提供程序。

Pico进程

Pico进程是在微内核操作系统L4中实现的一个用户空间程序,用于管理L4内核中的进程。Pico进程是L4中的一个轻量级进程,其主要任务是管理其他进程的创建、销毁、调度和内存管理等操作。Pico进程通常运行在用户空间,并通过一个系统调用接口与内核进行交互,因此具有较高的安全性和可靠性。

Pico进程可以看作是L4中的一个特殊进程,用于为其他进程提供基本的进程管理服务,例如创建、销毁和管理进程的运行状态。通过Pico进程,用户可以轻松地实现进程的调度和内存管理,从而构建一个优秀的操作系统。

Trustlet 安全进程

Trustlet 安全进程是一种安全技术,它是一个轻量级的安全环境,运行在智能手机或智能手表等设备上,可以保护设备的安全和隐私。它采用了硬件安全的方法,使用特殊的处理器和存储器来保护设备和数据。

Trustlet 安全进程通过一个安全接口与操作系统通信,可以访问设备的安全存储区域和加密模块,执行安全任务,比如存储用户的加密密码、处理银行交易等。它可以与普通应用程序进行隔离,即使普通应用程序被攻击或感染了恶意软件,也不会影响Trustlet安全进程中的数据和功能。

Trustlet 安全进程是一种可信的安全技术,广泛应用于智能手机、智能手表、智能家居等物联网设备中。它可以保护用户的隐私和安全,避免信息泄露和金融损失。

进程的终止

Windows 进程可以调用 ExitProcess 函数进行退出。

ExitProcess是Windows API中的一个函数,用于终止当前进程。它位于kernel32.dll库中,并且只能被用于在Windows下运行的进程中。ExitProcess函数接受一个整数参数,通常用于表示进程的退出代码。这个代码会被传递给操作系统,使其能够了解进程是如何退出的。

ExitProcess函数是Windows API中系统调用的一部分,可以调用它来结束当前进程的运行。当调用ExitProcess函数时,它会立即终止进程,并且不会返回到调用程序。由于ExitProcess函数终止了进程,因此在调用函数之后,任何进程资源都将被释放,并且在退出时会发送各种通知。

ExitProcess函数的原型如下:

void ExitProcess(UINT uExitCode);

其中,uExitCode参数为进程退出代码,通常用整数表示。如果退出代码为0,则表示进程正常终止。而如果退出代码不为0,则表示进程退出时出现了错误。

作业

Windows 作业是指在 Windows 操作系统上执行的一系列任务或程序,其目的是为了实现某种特定的功能或目标。

Windows 作业的详细描述需要考虑以下方面:

  1. 作业的类型:Windows 作业可以有很多不同的类型,例如批处理作业、计划任务、后台任务等。因此,在描述一个 Windows 作业时,首先需要明确它的类型。

  2. 作业的目的:描述一个 Windows 作业时还应该明确它的目的,即这个作业是为了实现何种特定的功能或目标。比如,一个自动备份数据的作业的目的就是为了保护数据安全。

  3. 作业的执行方式:Windows 作业的执行方式也有多种,可能是由操作系统自动触发的,也可能是由用户手动触发的。因此,在描述一个 Windows 作业时,需要明确它的执行方式。

  4. 作业的配置:Windows 作业的配置包括各种参数,例如作业的执行时间、执行频率、执行条件、执行命令、执行日志等等。在描述一个 Windows 作业时,需要详细描述它的配置参数。

  5. 作业的管理:Windows 作业的管理包括监控、调度、修改、删除等操作。在描述一个 Windows 作业时,也需要说明如何进行相关的管理操作。

综上所述,Windows 作业的详细描述应该包括作业的类型、目的、执行方式、配置参数和管理操作等方面。这样可以帮助用户更好地了解和使用 Windows 作业功能。

Windows 作业(Job)的作用是将一组相关的进程组织在一起,共同接受同一组策略的限制。通过使用作业,可以在多个进程之间共享一些系统资源,例如共享内存、同步对象等。Windows 作业还可以被用于管理和限制进程的资源使用,例如内存、CPU 和网络带宽等,从而提高系统资源的利用率和稳定性。

除了资源管理之外,Windows 作业还可以被用于进程的控制和监控。例如,可以使用作业来强制停止一组相关的进程,或者监控它们的状态和性能等。这对于需要对一组进程进行协调管理的应用场景非常有用,例如批处理作业、服务管理器等。

作业的限制

Windows 作业的限制包括:

  1. 作业中的进程必须是同一用户创建的。

  2. 作业中的进程必须在同一台计算机上运行。

  3. 作业中的进程可以使用不同的安全级别,但不能低于其所属作业的安全级别。

  4. 作业中的进程无法与作业之外的进程通信,除非它们使用共享内存、命名管道或套接字等通信方式。

  5. 作业中的进程无法访问作业之外的资源,例如打印机、文件共享等。

  6. 作业中的进程无法以交互方式运行,也无法在用户桌面上显示窗口或对话框。

  7. 作业中的进程无法使用交互式服务(如图形界面、声音、USB设备等)。

  8. 作业中的进程无法以系统帐户身份运行,例如 LocalSystem 或 NetworkService 等。

  9. 作业中的进程无法启动其他作业或进程。

  10. 作业中的进程无法绕过 Windows 安全机制,例如使用管理员权限或绕过 UAC(用户账户控制)等。

使用作业

CreateJobObject 是Windows操作系统中的一个API函数,它可以创建一个作业对象。作业对象是一种进程容器,用于管理和限制一组相关的进程。

此函数的语法如下:

HANDLE CreateJobObject(
  LPSECURITY_ATTRIBUTES lpJobAttributes, // 指向SECURITY_ATTRIBUTES结构的指针,用于定义作业对象的安全特性
  LPCTSTR               lpName          // 指向一个以NULL结尾的字符串,用于指定作业对象的名称
);

其中,lpJobAttributes参数用于指定安全特性,如果将该参数设置为NULL,则使用默认安全设置。lpName参数为可选参数,用于指定作业对象的名称。

CreateJobObject函数创建成功将返回一个句柄值,该句柄用于标识作业对象。创建的作业对象可以用于限制进程的CPU时间、工作集大小、I/O操作等资源使用。此外,作业对象还可以用于监控和终止进程。

SetInformationJobObject API是Windows操作系统提供的一种API函数,该函数可以用于操作作业对象的信息,包括限制作业中处理器时间、内存使用、作业和进程优先级以及作业保护限制等。

使用该API函数可以设置作业对象的限制条件,当作业中的进程超出设置的限制时,系统会终止该进程或作业。

SetInformationJobObject API通常与CreateJobObject API一起使用,CreateJobObject API用于创建作业对象,而SetInformationJobObject API用于对作业对象进行限制。

该API函数的语法如下:

BOOL SetInformationJobObject(
  HANDLE                 hJob,
  JOBOBJECTINFOCLASS     JobObjectInformationClass,
  LPVOID                 lpJobObjectInformation,
  DWORD                  cbJobObjectInformationLength
);

参数说明:

  • hJob:作业对象的句柄。
  • JobObjectInformationClass:作业对象信息的类别,如JobObjectExtendedLimitInformation、JobObjectBasicUIRestrictions等。
  • lpJobObjectInformation:一个指向作业对象信息结构体的指针。
  • cbJobObjectInformationLength:作业对象信息结构体的大小。

操作作业

  1. 首先,用户需要打开任务管理器。可以通过快捷键Ctrl+Shift+Esc或者右键点击任务栏上的空白部分并选择“任务管理器”来打开它。

  2. 在任务管理器中,用户可以查看当前正在运行的所有进程和应用程序,以及它们占用的资源量,如CPU、内存和磁盘。

  3. 用户可以选择结束进程或应用程序,以释放资源或解决问题。

  4. 如果要创建新的作业或计划任务,可以点击“创建任务”或“创建基本任务”,根据提示步骤进行设置。

  5. 在设置新的作业时,用户需要指定作业的名称、描述、触发器、操作、条件和设置选项等。

  6. 触发器可以指定一个或多个条件,根据时间、事件或计算机状态来触发作业。

  7. 操作可以是运行脚本、运行程序、发送电子邮件等。

  8. 条件可以是指定用户登录或注销时触发作业,或者指定计算机空闲时运行作业。

  9. 在设置完成后,用户可以保存新作业并查看、编辑或删除现有作业。

  10. 在Windows系统中,还可以使用命令行工具如schtasks.exe来创建、修改或删除作业。

Windows 查看作业对象

作业对象在 Windows 中可以使用任务管理器来查看。步骤如下:

  1. 打开任务管理器:在任务栏上右键单击,选择“任务管理器”,或者使用快捷键“Ctrl+Shift+Esc”。

  2. 切换到“详细信息”选项卡:在任务管理器中,切换到“详细信息”选项卡。

  3. 查找作业对象:在“详细信息”选项卡中,查找以“svchost.exe”开头的进程,这些进程是作业对象的宿主进程。双击该进程,进入“属性”的界面。

  4. 查看作业对象:在“属性”界面中,选择“服务”选项卡,可以看到该进程所托管的作业对象和相应的服务名称。

Windows容器

Windows容器是一种轻量级的虚拟化技术,允许多个应用程序在同一台主机上运行,同时保持彼此隔离。Windows容器可以运行在Windows操作系统上,包括Windows Server和Windows 10。它们提供了一种快速、可靠、安全的软件开发和交付方式,可以大幅减少开发、测试和部署应用程序所需的时间和资源。Windows容器分为两种类型:基于进程的容器和基于Hyper-V的容器。基于进程的容器是轻量级的虚拟化,它们与宿主机共享同一套操作系统内核和系统资源;而基于Hyper-V的容器则是更为重量级的虚拟化,每个容器都拥有自己的操作系统内核和系统资源。

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

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

相关文章

合并完之后,进行回退

我是将分支合并到了uat_v3上,现在又要求将uat_v3上的代码回退到合并以前; 我是将origin/uat_v3 checkout 除一份本地uat_v3,然后选中合并以前的commit记录,新建分支 temp/reverse 分支; 这样我本地的temp/reverse分支就已经是合…

[Java进阶] Swing两万字大总结一(超详细教程,这不得收藏一波)

🔥一个人走得远了,就会忘记自己为了什么而出发,希望你可以不忘初心,不要随波逐流,一直走下去🎶 🦋 欢迎关注🖱点赞👍收藏🌟留言🐾 🦄 …

将类模板做为参数(类模板中使用)

将类模板做为参数(类模板中使用) 这种方式只在类模板中使用,函数模板不能使用这种方法。 将模板名做为一种特殊的数据类型,实例化对象的时候,使用模板名做为参数,传递给模板。 下面例子中,数组…

Unity 上传文件到阿里云 对象存储OSS服务器

首先登录阿里云 免费试用–对象存储OSS --点击立即试用,可以有三个月的免费试用 创建Buket 新建AccessKey ,新建完成后,会有一个CSV文件,下载下来,里面有Key ,代码中需要用到 下载SDK 双击打开 sln文件&#xff0…

Java初识,继承

文章目录 环境变量配置的意义javapath与classpath伪随机数的生成RandmomMathThreadLocalRandomSecureRandom javamain函数Scanner 函数打印函数 注释Java中的注释主要分为以下三种 Stringboolean equals(Object anObject)int compareTo(String s) 数组数组的遍历数组名数组参数…

第八章:SegNet——一个用于强大的语义像素级标注的深度卷积编码-解码架构

0.摘要 我们提出了一种新颖的深度架构SegNet,用于语义像素级图像标注。SegNet具有一些吸引人的特性: (i)它只需要对完全学习的函数进行前向评估,就可以获得平滑的标签预测; (ii)随着深度增加,像素标注考虑了更大的上下…

网络安全中黑客的问题,黑客真的那么厉害吗?

前言 黑客这个名字一直是伴随着互联网发展而来,给大家的第一印象就是很酷,而且技术精湛,在网络世界里无所不能。目前几乎所有的公司企业甚至国家相关部门都会争相高薪聘请技术精湛的黑客作为互联网机构的安全卫士,所以黑客也是很…

超市商品信息管理系统设计与实现(论文+源码)

超市商品信息管理系统设计与实现(论文源码) 本篇 论文源码私我 以上内容只是精简版 还有很多原创类型论文 摘 要 本次主要先介绍研究背景、研究目标及相应价值的基础上,分析了国内外电子商务及相应超市管理系统的研究现状。随着计算机技术和网络技术的发展&#xf…

【力扣】543. 二叉树的直径

543. 二叉树的直径 给你一棵二叉树的根节点,返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。两节点之间路径的 长度 由它们之间边数表示。 示例 1: 输入:root…

高等数学❤️第一章~第二节~极限❤️极限的概念与性质~函数极限(自变量趋于无穷大时的极限)详解

【精讲】高等数学中函数极限:自变量趋于无穷大时的极限 博主:命运之光的主页 专栏:高等数学 目录 【精讲】高等数学中函数极限:自变量趋于无穷大时的极限 导言 一、函数极限自变量趋于无穷大的概念 二、函数极限自变量趋于无穷…

【力扣刷题 | 第十九天】

目录 前言: 135. 分发糖果 - 力扣(LeetCode) 860. 柠檬水找零 - 力扣(LeetCode) 总结: 前言: 今天着重刷贪心算法的题目 135. 分发糖果 - 力扣(LeetCode) n 个孩子…

Deepin/UOS Linux 桌面自定义 IDEA/DataGrip 应用程序图标

在 $HOME/Desktop目录下编辑 vim jetbrains.intelij.idea.desktop [Desktop Entry] TypeApplication NameIntelij IDEA Icon/opt/module/idea-IU-203.8084.24/bin/idea.png Exec/opt/module/idea-IU-203.8084.24/bin/idea.sh Terminalfalse CategoriesDevelopment;IDE;vim je…

力扣“找出数组排序后的目标下标”:一种简洁高效的算法

本篇博客会讲解力扣“2089. 找出数组排序后的目标下标”的解题思路,这是题目链接。 本题的解题思路如下:首先,利用qsort函数对原数组进行升序排序,然后,根据目标值在排序后的数组中查找对应的下标,并将其存…

Pixi + Tone 实现简单midi音频可视化

依赖库 Pixi.js 是一个前端图形渲染库,使用精灵技术绘制高性能的图形。Tone.js是一个前端音频框架,对web audio api进行了封装,可以快速创建音频样本、音频效果、进行音频分析和音频播放。tonejs/midi是tonejs的一个插件,可以讲m…

Iterator-Generator详解

1 迭代器可迭代对象 2 原生的迭代器对象 3 自定义类的迭代器 4 生成器理解和作用 5 自定义生成器方案 6 异步处理方案解析 迭代器-JavaScript中迭代器(了解) 给某个数组专门添加一个迭代器的代码。 const names ["abc", "cba"…

诚迈科技子公司智达诚远精耕智能驾驶,为商用落地注入创新力量

近期,工业和信息化部副部长辛国斌在新闻发布会上表示,将启动智能网联汽车准入和上路通行试点,组织开展城市级“车路云一体化”示范应用,将支持L3级及更高级别的自动驾驶功能商业化应用。根据工信部最新消息,《智能网联…

微聊测试报告

文章目录 微聊测试用例功能测试自动化测试注册页面登录页面会话窗口朋友圈界面 界面测试注册页面登录页面会话页面朋友圈页面 兼容性测试PCPad手机浏览器 性能测试安全测试密码保存是否安全SQL注入服务器错发 网络有网弱网断网 ​👑作者主页:Java冰激凌 …

Pinia学习笔记 | 入门 - 映射辅助函数

文章目录 Pinia学习笔记简介Pinia是什么 代码分割机制案例1.挂载PiniaVue3Vue2:安装PiniaVuePlugin插件 2.定义store的两种方式options API 和 composition API使用options API模式定义使用composition API模式 2.业务组件对store的使用创建store实例解构访问Pinia容…

Vue学习笔记 之 Svg图标组件的实现步骤

1、安装依赖 首先需要安装svg-sprite-loader依赖,命令如下,这在在学习的过程中,就是因为没有下载该依赖,导致图标一直无法正常显示。 npm install svg-sprite-loader --save-dev --force2、配置svg图片处理规则 通过使用svg-spri…

【嵌入式Linux内核驱动】SPI子系统 | 硬件原理 | 应用编程 | 内核驱动 | 总体框架

1. 硬件原理 1.1 SPI通信协议 SPI(Serial Peripheral Interface)是由Motorola公司开发的一种通用数据总线 四根通信线:SCK(Serial Clock)、MOSI(Master Output Slave Input)、MISO&#xff08…