windows JOB作业类的处理

news/2024/9/18 0:31:51/ 标签: windows

windows_JOB_0">windows JOB作业类的处理

windows JOB作业类的处理

文章目录


# windows JOB作业类的处理
/*
moduel Job.h
Notices:
*/#pragma once
#include <malloc.h>	//for _alloca;
class CJob
{
private:HANDLE m_hJob;
public:CJob(HANDLE hJob = NULL);~CJob();operator HANDLE() const { return(m_hJob); }	//重载()运算符//用于打开或创建一个作业对象BOOL Create(PSECURITY_ATTRIBUTES psa = NULL, PCTSTR pszName = NULL);BOOL Open(PCTSTR pszName, DWORD dwDesiredAccess, BOOL fInheritHandle = FALSE);//用于操作作业对象的函数BOOL AssignProcess(HANDLE hProcess);BOOL Terminate(UINT uExitCode = 0);//用于设置或限制作业对象BOOL SetExtendedLimitInfo(PJOBOBJECT_EXTENDED_LIMIT_INFORMATION pjoeli, BOOL fPreserveJobTime = FALSE);BOOL SetBasicUIRestrictions(DWORD fdwLimits);BOOL GrantUserHandleAccess(HANDLE hUserOjb, BOOL fGrant = TRUE);//设置访问作业外用户对象能力BOOL SetSecurityLimitInfo(PJOBOBJECT_SECURITY_LIMIT_INFORMATION pjosli);//查询作业限制信息BOOL QueryExtendedLimitInfo(PJOBOBJECT_EXTENDED_LIMIT_INFORMATION pjoeli);BOOL QueryBasicUIRestrictions(PDWORD fdwRestrictions);BOOL QuerySecurityLimitInfo(PJOBOBJECT_SECURITY_LIMIT_INFORMATION pjosli);//查询作业状态信息BOOL QueryBasicAccountingInfo(PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION pjobai);BOOL QueryBasicProcessIdList(DWORD dwMaxProcess, PDWORD pdwProcessIdList,PDWORD pdwProcessesReturned = NULL);//设置或者查询作业的通知事件BOOL AssociateCompletionPort(HANDLE hIOCP, ULONG_PTR CompKey);BOOL QueryAssociatedCompletionPort(PJOBOBJECT_ASSOCIATE_COMPLETION_PORT pjoacp);BOOL SetEndOfJobInfo(DWORD fdwEndOfJobInfo = JOB_OBJECT_TERMINATE_AT_END_OF_JOB);BOOL QueryEndOfJobTimeInfo(PDWORD pfdwEndOfJobTimeInfo);
};CJob::CJob(HANDLE hJob)
{m_hJob = hJob;
}CJob::~CJob()
{if (NULL != m_hJob){CloseHandle(m_hJob);}
}
///
inline BOOL CJob::Create(PSECURITY_ATTRIBUTES psa, PCTSTR pszName) {m_hJob = CreateJobObject(psa, pszName);return (m_hJob != NULL);
}///
inline BOOL CJob::Open(PCTSTR pszName, DWORD dwDesiredAccess, BOOL fInheritHandle /*= FALSE*/) {m_hJob = OpenJobObject(dwDesiredAccess, fInheritHandle, pszName);return (m_hJob != NULL);
}///
inline 	BOOL CJob::AssignProcess(HANDLE hProcess) {return(AssignProcessToJobObject(m_hJob, hProcess));
}///
inline BOOL CJob::Terminate(UINT uExitCode /* = 0*/) {return(TerminateJobObject(m_hJob, uExitCode));
}///
inline BOOL CJob::SetExtendedLimitInfo(PJOBOBJECT_EXTENDED_LIMIT_INFORMATION pjoeli, BOOL fPreserveJobTime /*= FALSE*/) {if (fPreserveJobTime){pjoeli->BasicLimitInformation.LimitFlags |= JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME;}//如果要保留作业事件信息,则JOB_OBJECT_LIMIT_JOB_TIME标志必须去掉const DWORD fdwFlagTest =(JOB_OBJECT_LIMIT_JOB_TIME | JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME);if ((pjoeli->BasicLimitInformation.LimitFlags & fdwFlagTest) == fdwFlagTest);//DebugBreak();//这两个标志是互斥的,单现在两者同时被设置了。return (SetInformationJobObject(m_hJob, JobObjectExtendedLimitInformation,pjoeli, sizeof(*pjoeli)));
}///
inline BOOL CJob::SetBasicUIRestrictions(DWORD fdwLimits) {JOBOBJECT_BASIC_UI_RESTRICTIONS jobuir = { fdwLimits };return (SetInformationJobObject(m_hJob, JobObjectBasicUIRestrictions, &jobuir, sizeof(jobuir)));
}///
inline BOOL CJob::GrantUserHandleAccess(HANDLE hUserOjb, BOOL fGrant /*= TRUE*/){return UserHandleGrantAccess(hUserOjb, m_hJob, fGrant);
}///
inline BOOL CJob::SetSecurityLimitInfo(PJOBOBJECT_SECURITY_LIMIT_INFORMATION pjosli) {return (SetInformationJobObject(m_hJob,JobObjectSecurityLimitInformation, pjosli, sizeof(*pjosli)));
}///
inline BOOL CJob::QueryExtendedLimitInfo(PJOBOBJECT_EXTENDED_LIMIT_INFORMATION pjoeli) {return (QueryInformationJobObject(m_hJob, JobObjectExtendedLimitInformation,pjoeli, sizeof(*pjoeli), NULL));
}///
inline BOOL CJob::QueryBasicUIRestrictions(PDWORD fdwRestrictions) {JOBOBJECT_BASIC_UI_RESTRICTIONS jobuir;BOOL fOk = QueryInformationJobObject(m_hJob, JobObjectBasicUIRestrictions,&jobuir, sizeof(jobuir), NULL);if (fOk){*fdwRestrictions = jobuir.UIRestrictionsClass;}return (fOk);
}///
inline BOOL CJob::QuerySecurityLimitInfo(PJOBOBJECT_SECURITY_LIMIT_INFORMATION pjosli) {return (QueryInformationJobObject(m_hJob, JobObjectSecurityLimitInformation,pjosli, sizeof(*pjosli), NULL));
} 
inline BOOL CJob::QueryBasicAccountingInfo(PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION pjobai) {return (QueryInformationJobObject(m_hJob,JobObjectBasicAndIoAccountingInformation, pjobai, sizeof(*pjobai), NULL));
}///
inline BOOL CJob::QueryBasicProcessIdList(DWORD dwMaxProcess, PDWORD pdwProcessIdList,PDWORD pdwProcessesReturned /*= NULL*/) {//计算所需的控件大小DWORD cb = sizeof(JOBOBJECT_BASIC_PROCESS_ID_LIST) + (sizeof(DWORD) * (dwMaxProcess - 1));//从栈上分匹配内存(注意,不是堆,所有无需释放PJOBOBJECT_BASIC_PROCESS_ID_LIST  pjobpil =(PJOBOBJECT_BASIC_PROCESS_ID_LIST)_alloca(cb);BOOL fOk = (pjobpil != NULL);if (fOk){//告知函数,我们分配的最大控件大小pjobpil->NumberOfProcessIdsInList = dwMaxProcess;//请求返回 当前进程集IDfOk = QueryInformationJobObject(m_hJob,JobObjectBasicProcessIdList, pjobpil, cb, NULL);if (fOk){//得到信息,并返回给调用者if (pdwProcessesReturned != NULL){*pdwProcessesReturned = pjobpil->NumberOfProcessIdsInList;CopyMemory(pdwProcessesReturned, pjobpil,sizeof(DWORD) * pjobpil->NumberOfProcessIdsInList);}}}return fOk;
}///
inline BOOL CJob::AssociateCompletionPort(HANDLE hIOCP, ULONG_PTR CompKey) {JOBOBJECT_ASSOCIATE_COMPLETION_PORT joacp;joacp.CompletionPort = hIOCP;joacp.CompletionKey = (PVOID)CompKey;return(SetInformationJobObject(m_hJob,JobObjectAssociateCompletionPortInformation, &joacp, sizeof(joacp)));
}///
inline BOOL CJob::QueryAssociatedCompletionPort(PJOBOBJECT_ASSOCIATE_COMPLETION_PORT pjoacp) {return (QueryInformationJobObject(m_hJob,JobObjectAssociateCompletionPortInformation, pjoacp, sizeof(*pjoacp), NULL));
}///
inline BOOL CJob::SetEndOfJobInfo(DWORD fdwEndOfJobInfo /*= JOB_OBJECT_TERMINATE_AT_END_OF_JOB*/) {JOBOBJECT_END_OF_JOB_TIME_INFORMATION joeojti = { fdwEndOfJobInfo };return (SetInformationJobObject(m_hJob,JobObjectEndOfJobTimeInformation, &joeojti, sizeof(joeojti)));
}///
inline BOOL CJob::QueryEndOfJobTimeInfo(PDWORD pfdwEndOfJobTimeInfo) {JOBOBJECT_END_OF_JOB_TIME_INFORMATION jobojti;BOOL fOk = QueryInformationJobObject(m_hJob,JobObjectEndOfJobTimeInformation, &jobojti, sizeof(jobojti), NULL);if (fOk){*pfdwEndOfJobTimeInfo = jobojti.EndOfJobTimeAction;}return (fOk);
}

http://www.ppmy.cn/news/1524779.html

相关文章

论文翻译:USENIX-2021 Extracting Training Data from Large Language Models

Extracting Training Data from Large Language Models 从大型语言模型中提取训练数据 https://www.usenix.org/system/files/sec21-carlini-extracting.pdf 文章目录 从大型语言模型中提取训练数据摘要1 引言 摘要 现在&#xff0c;发布在私有数据集上训练的大型&#xff…

828华为云征文|基于华为云Flexus云服务器X部署Minio服务

文章目录 ❀前言❀Minio简介❀部署环境准备❀yum环境配置❀安装docker❀获取镜像❀创建挂载目录❀启动容器❀查看容器状态❀安全组开放❀浏览器访问❀总结 ❀前言 大家好&#xff0c;我是早九晚十二。 近期华为云推出了最新的华为云Flexus云服务器X&#xff0c;这款云主机在算…

windows 显示进程地址空间

windows 显示进程地址空间 windows 显示进程地址空间 文章目录 windows 显示进程地址空间显示进程地址空间 显示进程地址空间 /* 3-ProcessInfo.cpp 显示进程地址空间 */#include "..\\CommonFiles\\CmnHdr.h" #include "..\\CommonFiles\\Toolhelp.h"#i…

Debian命令行设置samba共享目录

Samba 是一个用于在 Unix/Linux 系统上实现 SMB/CIFS 网络协议的软件套件,使这些系统能够与 Windows 网络共享文件和打印机。在 Debian 10 上安装和配置 Samba 可以实现 Linux 和 Windows 之间的无缝文件共享。 安装 Samba 1. 更新包列表并安装 Samba: sudo apt update sud…

dplyr、tidyverse和ggplot2初探

dplyr、tidyverse 和 ggplot2 之间有紧密的联系&#xff0c;它们都是 R 语言中用于数据处理和可视化的工具&#xff0c;且都源于 Hadley Wickham 的工作。它们各自有不同的功能&#xff0c;但可以无缝协作&#xff0c;帮助用户完成从数据处理到数据可视化的工作流。以下是它们之…

Kubernetes 系列 | k8s入门运维

目录 一、K8S集群搭建1.1 部署方式1.2 了解kubeadm1.3 部署流程1.3.1 初始化配置1.3.2 安装容器运行时1.3.3 安装K8S软件包1.3.4 创建集群 二、集群高可用1.1 集群高可用-堆叠1.2 集群高可用-集群外etcd 三、Pod运维3.1 Pod运维3.2 Pod的生命周期3.3 Pod状况3.4 Pod阶段3.5 容器…

java的BigInteget介绍

当java程序需要处理一个非常大的整数&#xff0c;超过long类型的取值范围&#xff0c;就无法用基本类型对数值接收&#xff0c;这样就要用到BigInteget类。 BigInteger类的方法 BigInteger(String val) 将字符串变为BigInteger类型数据 示例代码如下 import java.math.BigI…

Linux 驱动编写框架 并编译导入开发板

向内核新加文件&#xff1a;例如 demo1.c 1. 创建并编辑新的文件 #include <linux/init.h> #include <linux/kernel.h> #include <linux/types.h> #include <linux/fs.h> #include <linux/module.h> #include <linux/kdev_t.h> #include …

大数据之Spark(一)

九、Spark&#xff08;PySpark 3.2&#xff09; 9.1、基本概念 定义&#xff1a;用于大规模数据处理的统一分析引擎 运行模式 本地模式&#xff08;单机&#xff09;&#xff1a;一个独立进程&#xff0c;多个线程模拟spark运行时环境Standalone模式&#xff08;集群&#…

【数据库-CRUD进阶-约束,联合查询,内连接(详解)】

&#x1f308;个人主页&#xff1a;努力学编程’ ⛅个人推荐&#xff1a; c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构&#xff0c;刷题刻不容缓&#xff1a;点击一起刷题 &#x1f319;心灵鸡汤&#xff1a;总有人要赢&#xff0c;为什么不能是我呢 &#x1f412…

​招​银​网​络​​大​疆​​元​象​一​面​

1. 请尽可能详细地说明&#xff0c;XHR、axios和fetch这三者的区别是什么&#xff1f;axios和fetch的底层实现是什么&#xff1f;axios拦截器是什么&#xff1f;axios提供了哪些配置或功能&#xff0c;是fetch和XHR中没有的&#xff1f;你的回答中不要写出示例代码。 XHR、axi…

flink中startNewChain() 的详解

在 Apache Flink 中&#xff0c;startNewChain() 是一个与算子链&#xff08;operator chaining&#xff09;相关的方法。与 disableChaining() 类似&#xff0c;它允许开发者控制算子链的创建方式&#xff0c;但 startNewChain() 的作用是从当前算子开始创建一个新的算子链&am…

全面解析性能测试中的瓶颈分析与优化策略!

在软件开发的生命周期中&#xff0c;性能测试是确保应用程序在不同负载下稳定运行的关键步骤。性能瓶颈是导致系统性能下降的主要原因&#xff0c;及时发现并解决这些瓶颈&#xff0c;能够显著提升系统的响应速度和用户体验。本文将深入探讨性能测试中的瓶颈分析方法与优化策略…

【设计模式】设计模式的八大原则

设计模式的八个原则&#xff1a; 依赖倒置原则&#xff1a; 高层次的代码&#xff08;稳定&#xff09;不应该依赖低层次的代码&#xff08;变化&#xff09;抽象的代码不应该依赖具体的代码。 开放封闭原则&#xff1a;类模块应该开放扩展的&#xff0c;而其原先的代码尽量封…

盘点2024年大家都在用的录屏工具

现在录屏工具的使用范围越来越广了。我的深切体验是有很多人愿意为知识付费了&#xff0c;但是到线下培训的话很多人时间不一定能协调的来&#xff0c;这就导致涌现了不少的录屏课程。这次我们来探讨下要怎么录屏才能呈现更好的效果。 1.福昕录屏大师 链接达达&#xff1a;ww…

GPT撰写开题报告教程——课题确定及文献调研

撰写开题报告是一项复杂而重要的任务&#xff0c;需要涵盖从主题选择到文献综述、研究方法等多个环节。借助AI&#xff0c;如ChatGPT&#xff0c;可以显著提高这一过程的效率以及内容的质量。本文将详细探讨如何一步步利用ChatGPT撰写开题报告。 一、开题报告内容 一个清晰的…

Docker Swarm 管理

案例一概述及前置知识点 概述&#xff1a; 创鑫公司给云计算工程师提出新的要求&#xff0c;可将集群中所有Docker Engine整合进一个虚拟的资源池&#xff0c;通过执行命令与单一的主Swarm进行沟通&#xff0c;而不必分别和DockerEngine沟通。在灵活的调度策略下&#xff0c;…

MongoDB基本语法

MongoDB 基本语法详解 MongoDB 是一种面向文档的 NoSQL 数据库&#xff0c;支持灵活的数据结构和高扩展性&#xff0c;广泛应用于现代应用程序开发。MongoDB 采用 BSON&#xff08;Binary JSON&#xff09;格式存储数据&#xff0c;使得其能够存储复杂嵌套的结构。 1. 数据库…

大数据安全之Kerberos

Kerberos 是一个网络身份验证协议&#xff0c;旨在提供强身份验证&#xff0c;尤其是在开放网络环境中。它最早由麻省理工学院&#xff08;MIT&#xff09;开发&#xff0c;用于在不安全的网络环境中安全地验证用户身份。Kerberos 协议的设计旨在防止窃听、重放攻击和网络中的其…

2024年9月12日(k8s环境及测试 常用命令)

一、环境准备及测试 1、报错处理&#xff1a; kube-system calico-node-5wvln 0/1 Init:0/3 0 16h kube-system calico-node-d7xfb 0/1 Init:0/3 0 16h ku…