首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
Windows Internals 笔记——内核对象
】的更多相关文章
Windows Internals 笔记——内核对象
1.每个内核对象都只是一个内存块,它由操作系统内核分配,并只能由操作系统内核访问.这个内存块是一个数据结构,其成员维护着与对象相关的信息. 2.调用一个会创建内核对象的函数后,函数会返回一个句柄,它标识了所创建的对象.在32位windows进程中,句柄是一个32位的值,在64位windows进程中,则是一个64位的值. 3.为了增强操作系统的可靠性,这些句柄值是与进程相关的,不可以直接跨进程使用. 4.内核对象的所有者是操作系统内核,而非进程,在进程内创建的内核对象在进程终止时不一定会被销毁.大…
Windows核心编程&内核对象
1. 一个进程在初始化时,系统将会他分配一个空的句柄表,这个句柄表仅供内核对象使用,不供用户对象和GDI对象使用.进程在首次 初始化时,该句柄表为空.句柄表是一个由数据结构组成的数组,包含一个内核对象指针,一个访问掩码和一些标志.系统用索引来 标识内核对象的信息保存在进程句柄表中的具体位置,句柄值除以4即为索引值(针对不同版本的windows系统可能不同). 2. 要注意内核对象返回值INVALID_HANDLE_VALUE(-1)和NULL(0)的区别,凡是用于创建内核对象的函数,在检查它们的…
Windows Internals 笔记——关联性
1.默认情况下,Windows Vista在给线程分配处理器时,使用软关联.意思是如果其他因素都一样,系统将使线程在上一次运行的处理器上运行.让线程始终在同一个处理器上运行有助于重用仍在处理器高速缓存中的数据. 2.有一种称为NUMA的计算机体系结构,结构的计算机由多个系统板组成,每个系统版都有自己的CPU和内存块.任何线程都可以在这些CPU中任何一个上运行.如果CPU需要访问其他系统板上的内存,性能会下降的厉害.为了支持这种体系结构,Windows Vista允许我们设置进程和线程的关联性.也…
Windows Internals 笔记——线程调度
1.线程内核对象中的CONTEXT反应了线程上一次执行时CPU寄存器的状态.大约每隔20ms,Windows都会查看所有当前存在的线程内核对象.Windows在可调度的线程内核对象中选择一个,并将上次保存在线程上下文中的值载入CPU寄存器.这一操作被称为上下文切换.Windows实际上会记录每个线程的运行次数. 2.调用CreateProcess或者CreateThread时,系统将创建线程内核对象,并把挂起计数初始化为1.这样就不会给这个线程调度CPU了,因为线程初始化需要时间,我们不想再线程…
Windows Internals 笔记——线程
1.进程有两个组成部分,一个进程内核对象和一个地址空间.线程也有两个组成部分: 一个是线程的内核对象,操作系统用它管理线程.系统还用内核对象来存放线程统计信息的地方. 一个线程栈,用于维护线程执行时所需的所有函数参数和局部变量. 2.线程要在其进程的地址空间内执行代码和处理数据,假如一个进程上下文中有两个以上的线程运行,这些线程将共享一个地址空间.这些线程可以执行同样的代码,可以处理相同的数据.此外,这些线程还共享内核对象句柄,因为句柄表是针对每一个进程的. 3.为一个进程创建一个虚拟的地址空间…
Windows Internals 笔记——作业
1.Windows提供了一个作业内核对象,它允许我们将进程组合在一起并创建一个“沙箱”来限制进程能够做什么.创建只包含一个进程的作业同样非常有用,因为这样可以对进程施加平时不能施加的限制. 2.如果进程已与一个作业关联,就无法将当前进程或者它的任何子进程从作业中去除. 3.默认情况下,在Windows Vista中通过Windows资源管理器来启动一个应用程序时,进程会自动同一个专用的作业关联,此作业的名称使用了“PCA”字符串前缀.一旦通过Windows资源管理器启动一个老版本的应用程序出现问…
Windows Internals 笔记——CreateProcess
1.一个线程调用CreateProcess时,系统将创建一个进程内核对象,其初始使用计数为1.然后系统为新进程的主线程创建一个线程内核对象(使其计数为1). 2.CreateProcess在进程完全初始化好之前就返回TRUE.这意味着操作系统加载程序尚未尝试定位所有必要的DLL.如果一个DLL找不到或者不能正确的初始化,进程就会终止.因为返回TRUE,所有父进程不会注意到任何初始化问题. 3.CreateProcess的pszCommandLine参数期望我们传入的是一个非“常量字符串”的地址.…
Windows Internals 笔记——进程
1.一般将进程定义成一个正在运行的程序的一个实例,由以下两部分构成: 一个内核对象,操作系统用它来管理进程,内核对象也是系统保存进程统计信息的地方. 一个地址空间,其中包含所有可执行文件或DLL模块的代码和数据.此外它还包含动态内存分配,比如线程堆栈和堆的分配. 2.进程要做任何事情,都必须让一个线程在它的上下文中运行.该线程负责执行进程地址空间包含的代码. 3.每个线程都有它自己的一组CPU寄存器和它自己的堆栈.对于所有要运行的线程,操作系统会轮流为每一个线程调度一些CPU时间,它会采取轮询的…
Windows进程的内核对象句柄表
当一个进程被初始化时,系统要为它分配一个句柄表.该句柄表只用于内核对象 ,不用于用户对象或GDI对象. 创建内核对象 当进程初次被初始化时,它的句柄表是空的.然后,当进程中的线程调用创建内核对象的函数时,比如CreateFileMapping,内核就为该对象分配一个内存块,并对它初始化.这时,内核对进程的句柄表进行扫描,找出一个空项.由于表 3 - 1中的句柄表是空的,内核便找到索引1位置上的结构并对它进行初始化.该指针成员将被设置为内核对象的数据结构的内存地址,访问屏蔽设置为全部访问权,同时,…
windows编程之内核对象
学好windows编程,理解内核对象还是至关重要的(●'◡'●).闲话不多说,下面先来了解一下关于内核对象的知识: 内核对象(kernel object):内核对象是用于管理进程.线程和文件等诸多种类的大量资源. 内核对象的分类:进程对象,线程对象,互斥量(mutex)对象,信号量(semaphore)对象,事件对象,作业对象,文件对象,文件映射对象,管道(pipe)对象,邮件槽(mailslot)对象,I/O完成端口对象,线程池工厂(thread pool …