读书笔记
文章平均质量分 82
sockpuppet007
这个作者很懒,什么都没留下…
展开
-
《Windows核心编程》第3章 内核对象
<br />Windows 系统创建和处理的内核对象有:访问令牌对象、事件对象、文件对象、文件映射对象、I/O完成端口对象、作业对象、邮件槽对象、互斥对象、管道对象、进程对象、信号量对象、线程对象、可等待的计时器对象以及线程池工厂对象等等。利用Sysinternals提供的免费工具WinObj可以查看一个包含所有内核对象类型的列表。<br /><br /> 每个内核对象都只是一个内存块,它由操作系统内核分配,并只能由操作系统内核访问。该内存块是一个数据结构,其成员维护着与对象相关的信息。少数成员(如安全描原创 2010-12-21 00:18:00 · 232 阅读 · 0 评论 -
《Windows核心编程》第1章 对程序错误的处理
<br />当调用一个Windows函数时,它首先要检验传递给它的的各个参数的有效性,然后再设法执行任务。如果传递了一个无效参数,或者由于某种原因无法执行这项操作,那么操作系统就会返回一个值,指明该函数在某种程度上运行失败了。<br /><br /> 一个Windows函数返回的错误代码对了解该函数为什么会运行失败常常很有用。微软公司编译了一个所有可能的错误代码的列表,并且为每个错误代码分配了一个32位的号码。<br /><br /> 当一个Windows函数检测到一个错误时,它会使用一个称为线程本地存原创 2010-12-21 00:07:00 · 173 阅读 · 0 评论 -
《Windows核心编程》第2章 Unicode
<br />应用软件可以从各种不同的函数中获得特定国家的信息,并可观察控制面板的设置,以确定用户的首选项。软件的本地化要解决的真正问题,实际上就是如何来处理不同的字符集。<br /><br /> 有些文字和书写规则(比如中文)的字符集中的符号太多了,因此单字节(它提供的符号最多不能超过256个)是根本不够使用。为此出现了双字节字符集(DBCS),以支持这些文字和书写规则。在双字节字符集中,字符串中的每个字符可以包含一个字节或包含两个字节。<br /><br /> Unicode提供了一种简单而又一致的表原创 2010-12-21 00:16:00 · 212 阅读 · 0 评论 -
《Windows核心编程》第5章 作业
<br />Windows提供了一个作业(Job)内核对象,它允许将进程组合在一起并创建一个"沙箱"来限制进程能够做什么。最好将作业对象想象成一个进程容器。但是,创建只包含一个进程的作业也是非常有用,因为这样可以对进程施加平时不能施加的限制。<br /><br /> 通过给函数BOOL IsProcessInJob (HANDLE ProcessHandle,HANDLE JobHandle,PBOOL Result);<br /> 的第二个参数传递NULL,可以验证某个进程是否在一个现有的作业控制之下原创 2010-12-21 00:20:00 · 360 阅读 · 0 评论 -
《Windows核心编程》第4章 进程
<br />进程通常被定义成一个正在运行的程序的一个实例。它由两部分构成:<br /> 1) 一个内核对象,操作系统用它来管理进程;<br /> 2) 一个地址空间,其中含所有可执行文件或DLL 模块的代码和数据。<br /><br /> 一个进程可以有一个或多个线程,所有线程都在进程的地址空间中执行其代码。每个进程至少要有一个线程来执行进程地址空间包含的代码。当系统创建进程的时候,会自动为进程创建第一个线程,称之为主线程。<br /><br /> 对于所有要运行的线程,操作系统会轮流为每个线程调度原创 2010-12-21 00:19:00 · 292 阅读 · 0 评论 -
《Windows核心编程》第6章 线程基础
线程有两个部分组成: 1)线程内核对象。操作系统用它管理线程,它也是系统用来存放线程统计信息的地方。 2)线程栈。用于维护线程执行时所需的所有函数参数和局部变量。 每个线程都必须有一个入口点函数,这是线程执行的起点。如果想在进程中创建辅助线程,它必须有自己的入口点函数,形式如下: DWORD WINAPI ThreadFunc(PVOID pvParam){ DWORD dwResult = 0; … Return dwResult; } 线程函数最终将终止运行并返原创 2010-12-22 00:29:00 · 618 阅读 · 0 评论 -
《Windows核心编程》第8章 用户模式下的线程同步
<br />在以下两种基本情况下,线程之间需要相互通信:<br /> ● 需要让多个线程同时访问一个共享资源,同时不能破坏资源的完整性。<br /> ● 一个线程需要通知其他线程某项任务已经完成。<br /><br /> 原子访问指的是一个线程在访问某个资源的同时能够保证没有其他线程会在同一时刻访问同一资源。<br /><br /> Interlocked系列的函数会以原子方式来操控一个值。比如如果想以原子方式给一个值加1,可以使用InterlockedIncrement函数。注意,必须原创 2010-12-24 17:31:00 · 263 阅读 · 0 评论 -
《Windows核心编程》第9章 用内核对象进行线程同步
在用户模式下进行线程同步的好处就是速度快。如果关心应用程序的性能,则应该优先考虑在用户模式下的同步机制能否适用。 内核对象都有触发和未触发两种状态,微软创建了一些规则,用来规定如何在这两种状态之间进行转换。比如,进程(线程)内核对象在创建的时候总是处于未触发状态。当进程(线程)终止的时候,操作系统会自动使进程(线程)内核对象变成触发状态。当进程(线程)内核对象被触发后,它将永远保持这种状态,再也不会变回到为触发状态。 等待函数使一个线程自愿进入等待状态,直到指定的内核对象被触发为止。如果线程在调用一个等原创 2010-12-24 17:37:00 · 438 阅读 · 0 评论 -
《Windows核心编程》第7章 线程调度、优先级和关联性
每个线程都有一个上下文,后者保存在线程的内核对象中。这个上下文反映了线程 执行时CPU寄存器的状态。 Windows被称为抢占式多线程操作系统,它可以在任何时刻停止一个线程而另行调度另外一个线程。 如果ResumeThread函数成功,它将返回线程的前一个挂起计数;否则它将返回0xFFFFFFFF。一个线程可以被多次挂起。线程被挂起多少次,就必须恢复多少次,这样才能变为可调度状态。挂起线程可以使用SuspendThread函数,它也返回线程之前的挂起计数。 线程可以通过调用Sleep函数告诉系统,在一原创 2010-12-24 17:30:00 · 366 阅读 · 0 评论