本章讨论的是相对抽象的概念,不涉及任何具体的内核对象的细节而是讨论所有内核对象的共有特性. 首先让我们来了解一下什么是内核对象.内核对象通过API来创建,每个内核对象是一个数据结构,它对应一块内存,由操作系统内核分配,并且只能由操作系统内核访问.在此数据结构中少数成员如安全描述符和使用计数是所有对象都有的,但其他大多数成员都是不同类型的对象特有的.内核对象的数据结构只能由操作系统提供的API访问,应用程序在内存中不能访问.调用创建内核对象的函数后,该函数会返回一个句柄,它标识了所创建的对象.…
第3章内核对象 在介绍Windows API的时候,首先要讲述内核对象以及它们的句柄.本章将要介绍一些比较抽象的概念,在此并不讨论某个特定内核对象的特性,相反只是介绍适用于所有内核对象的特性. 首先介绍一个比较具体的问题,准确地理解内核对象对于想要成为一名 Wi n d o w s软件开发能手的人来说是至关重要的.内核对象可以供系统和应用程序使用来管理各种各样的资源,比如进程.线程和文件等.本章讲述的概念也会出现在本书的其他各章之中.但是,在你开始使用实际的函数来操作内核对象之前,是无法深刻理解…
使用内核对象进行线程同步. 前面我们介绍了用户模式下线程同步的几种方式.在用户模式下进行线程同步的最大好处就是速度非常快.因此当需要使用线程同步时用户模式下的线程同步是首选. 但是用户模式下的线程同步也存在缺点.如InterLocked系列函数只能对一个值进行操作.关键段虽然可以对一段代码进行操作,但是只能对同一个进程内的线程进行同步.为了解决上述问题,我们将会讨论使用内核对象进行线程同步. 与用户模式下的速度快相比较,使用内核对象进行线程同步性能很低.原因就是:在创建或清除内核对象时调用线程必…
看到windows核心编程 第5章的最后一节,发现job lab例子程序不能在我的系统(win8下)正常运行,总是提示“进程在一个作业里”         用process explorer程序查看 于是我找到   例子程序源码的这段判断程序,注释后编译运行   终于进了程序的界面   可是我认为这不是一个好的解决方案   于是去看书的123页下面到124页上的那段话   果然在程序已经关联了作业对象   但是最后,书上说到,一个简单的解决方案是从命令行而不是windows资源管理器中启动调试器…
// 全局变量,用于指示共享的资源是否在使用 BOOL g_fResourceInUse = FALSE; void Func1() { //等待访问资源 while(InterlockedExchange(&g_fResourceInUse, TRUE) == TRUE) Sleep(0); //访问刚占有的资源 //Access the resource. //我们不需要再访问的资源 InterlockedExchange(&g_fResourceInUse, FALSE); } 这是…
内核对象 本章讨论的是相对抽象的概念,不涉及任何具体的内核对象的细节而是讨论所有内核对象的共有特性. 首先让我们来了解一下什么是内核对象.内核对象通过API来创建,每个内核对象是一个数据结构,它对应一块内存,由操作系统内核分配,并且只能由操作系统内核访问.在此数据结构中少数成员如安全描述符和使用计数是所有对象都有的,但其他大多数成员都是不同类型的对象特有的.内核对象的数据结构只能由操作系统提供的API访问,应用程序在内存中不能访问.调用创建内核对象的函数后,该函数会返回一个句柄,它标识了所创建的…
17.3 使用内存映射文件 若要使用内存映射文件,必须执行下列操作步骤: 1) 创建或打开一个文件内核对象,该对象用于标识磁盘上你想用作内存映射文件的文件. 2) 创建一个文件映射内核对象,告诉系统该文件的大小和你打算如何访问该文件. 3) 让系统将文件映射对象的全部或一部分映射到你的进程地址空间中. 当完成对内存映射文件的使用时,必须执行下面这些步骤将它清除: 1) 告诉系统从你的进程的地址空间中撤消文件映射内核对象的映像. 2) 关闭文件映射内核对象. 3) 关闭文件内核对象. 下面将详细介…
上一章介绍了内核对象,这一节开始就要不断接触各种内核对象了.首先要给大家介绍的是进程内核对象.进程大家都不陌生,它是资源和分配的基本单位,而进程内核对象就是与进程相关联的一个数据结构.操作系统内核通过它管理进程,也就是操作系统原理上介绍的进程控制块(PCB).举个例子,它就相当于每个学生都有的学籍,学校管理我们都是通过学籍,什么记过了,处分了,开除学籍了,都是在学籍上做文章.       进程一般被定义为一个正在运行的程序的一个实例,它由两部分组成:       1:内核对象,操作系统用它来管理…
第11章 线程池的使用 第8章讲述了如何使用让线程保持用户方式的机制来实现线程同步的方法.用户方式的同步机制的出色之处在于它的同步速度很快.如果关心线程的运行速度,那么应该了解一下用户方式的同步机制是否适用. 到目前为止,已经知道创建多线程应用程序是非常困难的.需要会面临两个大问题.一个是要对线程的创建和撤消进行管理,另一个是要对线程对资源的访问实施同步.为了对资源访问实施同步,Wi n d o w s提供了许多基本要素来帮助进行操作,如事件.信标.互斥对象和关键代码段等.这些基本要素的使用都非…
4.3 终止进程的运行 若要终止进程的运行,可以使用下面四种方法: • 主线程的进入点函数返回(最好使用这个方法) . • 进程中的一个线程调用E x i t P r o c e s s函数(应该避免使用这种方法) . • 另一个进程中的线程调用Te r m i n a t e P r o c e s s函数(应该避免使用这种方法) . • 进程中的所有线程自行终止运行(这种情况几乎从未发生) . 这一节将介绍所有这四种方法,并且说明进程结束时将会发生什么情况. 4.3.1 主线程的进入点函数返…