`
andyjackson
  • 浏览: 57603 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

WINDOWS核心编程——进程

阅读更多

看完了内核对象,现在看进程。都知道进程是通过内核对象被操作系统管理的。它由内核对象和地址空间组成。

 

下面看看CreateProcess函数:创建进程。需要说明的是,在进程完全初始化之前该函数就会返回true。 这意味着操作系统j加载程序尚未进行定位所有所必要的dll。如果某个dll找不到或者未能正确初始化,进程就会终止。因为CreateProcess返回TRUE,所以父进程不会注意到任何初始化的问题。

 

1.pszCommandLine参数。

表示创建的进程的命令行参数,操作系统会修改我们传的命令行参数,但是在函数返回之前还原为原来的形式。它是PTSTR类型,表示传入的是一个“非常量字符串”的指针。如果传入常量字符串指针,会引起访问违规。

CreateProcess(NULL,TEXT("XXX"),NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);  //第二个参数传入的是常量指针

在使用时应该先将常量复制到一个缓冲区中:

TCHAR szCommandLine[] = TEXT("XXX");
//然后传入szCommandLine

2.psaProcess、psaThread和bInheritHanles

前两个参数分别为进程对象和线程对象指定安全性。为NULL时,系统为其分配默认的安全描述符。两个都是SECURITY_ATTRIBUTES的结构。bInheritHanles参数是该结构的一个参数,用于指示

 

 

有关的其他参数,就不再详细讲。

作业内核对象 。可以想象成一个进程容器。用于把一组进程装起来,这样就可以对进程施加限制。

/*
*创建一个作业内核对象
*@PSECURITY_ATTRIBUTES psa
*@PCTSTR pszname
*/
HANDLE hjob = CreateJobObject(NULL, TEXT("KDDKKKK"));

/*
*将进程添加到作业中
*@HANDLE hjob
*@HANDLE hProcess
*/
AssinProcessToJobObject(hjob, GetCurrentProcess());
 

对作业中的进程施加限制

BOOL SetInformationJobObject(
HANDLE  hJob,
JOBOBJECTINFOCLASS JobObjectInformationClass,
PVOID pJobObjectInformation,
DWORD cbJobObjectInformationSize);
/*
*@hJob 指定要限制的作业
*@JobObjectInformationClass 是一个枚举类型,指定要施加限制的类型
*@pJobObjectInformation 指向包含具体限制设置的数据结构的地址
*@cbJobObjectInformationSize 指定该数据结构的大小
*/

限制类型的总结:

 

限制类型 JobObjectInformationClass pJobObjectInformation
基本限额 JobObjectBasicLimitInformation

JOBOBJECT_BASIC_LIMIT_INFORMATION

扩展后的

基本限额

JobObjectBasicLimitInformation

JOBOBJECT_BASIC_LIMIT_INFORMATION

基本的UI

限制

JobObjectBasicUIRestrictions JOBOBJECT_BASIC_UI_RESTRICTIONS
安全限额 安全限额 JOBOBJECT_SECURITY_LIMIT_INFORMATION

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Windows编程入门——字节跳动.pptx

    Windows 编程的基本理论包括微软开发者网络 MSDN、API 调用与状态切换、进程管理器、虚拟地址空间、文件句柄列表、内存分页、线程列表、内核对象列表、进程状态注册表等。其中,Kernal32.dll、User32.dll、GDI32.dll...

    寒江独钓《Windows内核安全编程》

    全面系统地介绍了串口、键盘、磁盘、文件系统、网络等相关的Windows内核模块的编程技术,以及基于这些技术实现的输入密码保护、防毒引擎、文件加密、网络嗅探、网络防火墙等信息安全软件的核心组件的具体编程。...

    一个进程池的服务器程序

    当父进程发现请求数 >= 子进程数时,父进程创建新的子进程,并把子进程数加1(当然子进程数有个预先上限);当父进程发现子进程数大于请求数加1时,父进程杀死多余的子进程。 总的来说,思想是让子进程accept并处理...

    内存管理(AWE)——例程源码完成端口通讯服务器(IOCP Socket Server)设计(二)

    其它大道理本文不多说,关于操作系统内存管理的原理可以从《Windows核心编程》、《Windows操作系统》、《操作系统》等书籍上了解。 我们可以使用lookaside lists技术来重新使用已经分配的内存的,或者使用...

    自己动手写操作系统 pdf

    6.6.1 避免对称——进程的节奏感292 6.6.2 优先级调度总结300 第7章 输入/输出系统302 7.1 键盘302 7.1.1 从中断开始——键盘初体验302 7.1.2 AT、PS/2键盘304 7.1.3 键盘敲击的过程304 7.1.4 解析扫描码309 7.2 ...

    windows驱动开发技术详解-part2

     5.1.4 Windows驱动程序和进程的关系  5.1.5 分页与非分页内存  5.1.6 分配内核内存  5.2 在驱动中使用链表  5.2.1 链表结构  5.2.2 链表初始化  5.2.3 从首部插入链表  5.2.4 从尾部插入链表  ...

    Windows驱动开发技术详解的光盘-part1

     5.1.4 Windows驱动程序和进程的关系  5.1.5 分页与非分页内存  5.1.6 分配内核内存  5.2 在驱动中使用链表  5.2.1 链表结构  5.2.2 链表初始化  5.2.3 从首部插入链表  5.2.4 从尾部插入链表  ...

    Python编程入门经典

    9.6.3 线程——在相同的进程中 完成多个工作 141 9.7 本章小结 143 9.8 习题 144 第10章 创建模块 145 10.1 研究模块 145 10.1.1 导入模块 147 10.1.2 查找模块 147 10.1.3 理解模块 148 10.2 创建模块和包 149 10.3...

    linux环境高级编程基础知识.pptx

    Linux 环境高级编程基础知识是 Linux 操作系统的核心概念,涵盖了 Linux 的基本概念、文件结构、常用命令、Linux 的特点和优点、Linux 的历史发展等方面。 Linux 介绍 Linux 是一个类 Unix 操作系统,具有 Unix 的...

    操作系统课程设计:Linux系统管理实践与进程通信实现.doc

    操作系统课程设计 ——Linux系统管理实践与进程通信实现 二零一三年一月八号 一、设计内容 1、Linux系统的熟悉与常用操作命令的掌握。 2、Linux环境下进程通信的实现。(实现父母子女放水果吃水果的同步互斥问题,...

    亮剑.NET深入体验与实战精要2

    第4章 Windows窗体编程你也行 167 4.1 创建简单的WinForm项目 168 4.2 创建MDI窗体应用 170 4.3 获取应用程序路径信息 174 4.4 回车跳转控件焦点 175 4.5 窗体间传递复杂数据 176 4.5.1 构造传递 176 4.5.2 公有字段...

    亮剑.NET深入体验与实战精要3

    第4章 Windows窗体编程你也行 167 4.1 创建简单的WinForm项目 168 4.2 创建MDI窗体应用 170 4.3 获取应用程序路径信息 174 4.4 回车跳转控件焦点 175 4.5 窗体间传递复杂数据 176 4.5.1 构造传递 176 4.5.2 公有字段...

    大学计算机专业书籍推荐.pdf

    * 汇编语言程序设计:斯皮格尔、斯里尼瓦桑底层相关IBM PC 汇编语言程序设计、阿贝尔汇编语言编程艺术、海德Intel 汇编语言程序设计、欧文琢石成器——Windows 环境下 32 位汇编语言程序设计 * 微处理器:罗云彬...

    C#程序设计(最新的培训教材)

    1.底层操作系统——Windows 由于Web服务和使用Web服务的应用程序仍然运行在计算机上,而且既然是计算机都要有外设,所以仍然需要一个操作系统。Windows添加了XML支持,提供了对.NET框架的内置支持。 2.辅助产品...

    深入解析ATL(第2版).pdf

     四位顶尖的Windows编程专家在本书中系统地揭示了ATL的内部工作原理,他们解释了ATL是 如何工作的,以及为什么要以这样的方式工作。通过本书,客户端开发人员可以掌握ATL中的窗口、COM控件、MFC集成、Web服务代理...

    asp.net知识库

    在ASP.NET中使用WINDOWS验证方式连接SQL SERVER数据库 改进ADO.Net数据库访问方式 ASP.NET 2.0 绑定高级技巧 简单实用的DataSet更新数据库的类+总结 [ADO.NET]由数据库触发器引发的问题 为ASP.NET封装的SQL数据库...

Global site tag (gtag.js) - Google Analytics