`
Jack Wu
  • 浏览: 882753 次
  • 来自: ...
社区版块
存档分类
最新评论
阅读更多
单地说:

内核对象是系统的一种资源。系统对象一旦产生,任何应用程序都可以开启并且使用该对象。系统给内核对象一个计数值作为管理只用,内核对象包括:
 event,mutex,semaphore,file,file-mapping,preocess,thread.

这些内核对象每次产生都会返回一个handle,作为标示,每使用一次,对应的计数值加1,调用CloseHandle可以结束内核对象的使用。

具体:


1.  内核对象:
    1).符号对象
    2).事件对象
    3).文件对象
    4).文件影象对象
    5).I/O完成对象
    6).作业对象
    7).信箱对象
    8).互斥对象
    9).管道对象
    10).进程对象
    11).信标对象
    12).线程对象
    13).待计时器对象
     等

2.内核对象只能由内核所拥有,而不是由进程拥有.(就是说进程没有了,内核还可以被其他进程使用)

3.内核对象的数据结构有计数器,进程调用时,计数器增1,调用结束,计数器减1,内核对象计数器为零时,销毁此内核对象.(系统来管理内核对象)

4.内核安全性,进程使用什么权限调用内核对象,由SECURITY_ATTRIBUTES结构的数据结构来指定.几乎所有的调用内核对象的函数都含有SECURITY_ATTRIBUTES结构的指针参数.(可以由这个参数来判断是不是内核对象哦)
typedef struct _SECURITY_ATTRIBUTES {
  DWORD  nLength;   //结构体长度
  LPVOID lpSecurityDescriptor;  //安全性设置
  BOOL   bInheritHandle;  //可继承性
} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES;

5.进程的内核对象的句柄表,进程调用内核对象时,就会创建内核对象的句柄表,就是内核对象在进程中的索引,索引值就是调用内核对象函数返回的句柄.关闭所有的内核对象,使用CloseHandle();

6.跨越进程边界共享内核对象
MICROSOFT把句柄设计成进程句柄,不设计成系统句柄是为了实现句柄的健壮性和安全性。
1)内核对象句柄的继承性。(为了实现内核的多个进程的共享)
    作用:为了子进程实现对父进程创建的内核对象的访问。 
    步骤:首先,父进程创建内核对象时,初始化SECURITY_ATTRIBUTES结构的对象,让SECURITY_ATTRIBUTES结构体的成员变量bInheritHandle设置为TRUE。
       然后,子进程创建后,生成自己的句柄表,句柄表遍历父进程的句柄表,找到有继承性的句柄,并复制一份到子进程的句柄表中,子进程的内核对象和父进程的内核对象使用相同的内存块指针,内核对象计数器在子进程中创建内核对象后增一,父进程调用CloseHandle()来关闭内核对象,确不影响子进程使用该内核对象。
2)改变句柄的标志
BOOL SetHandleInformation(
  HANDLE hObject,  // handle to object
  DWORD dwMask,    // flags to change
  DWORD dwFlags    // new values for flags
);

打开内核的可继承性标志
SetHandleInformation(hobj,HANDLE_FLAG_INHERIT,HANDLE_FLAG_INHERIT);
关闭内核的可继承性标志
SetHandleInformation(hobj,HANDLE_FLAG_INHERIT,0);
若想让内核对象不被关闭,设置HANDLE_FLAG_PROTECT_FROM_CLOSE。

获得句柄标志的函数
BOOL GetHandleInformation(
  HANDLE hObject,    // handle to object
  LPDWORD lpdwFlags  // handle properties
);

3)命名对象
作用:让进程中的内核对象可以共享,让别的进程可以通过命名空间,跨进程来访问这个进程的内核对象。
创建对象和访问对象使用函数
创建对象Create*:如果命名的内核对象已经存在并具备安全访问权限,则参数被忽略,进程的句柄表复制一份内核对象的指针和标志到进程的句柄表,如果不存在,则马上创建内核对象。
例子:
HANDLE CreateMutex(
  LPSECURITY_ATTRIBUTES lpMutexAttributes,  // SD
  BOOL bInitialOwner,                       // initial owner
  LPCTSTR lpName                            // 对象名字
);

打开对象Open*:如果命名的内核对象已经存在并具备安全访问权限,进程的句柄表复制一份内核对象的指针和标志到进程的句柄表,如果不存在,则返回NULL,使用GetLassError(),得到返回值2。

4)终端服务的名字空间
每个客户程序会话都有自己的服务名字空间,一个会话无法访问另一个会话的对象,尽管他们具备相同的对象名字。
服务程序的名字空间对象总放在全局名字空间中。

5)复制对象句柄
DuplicateHandle函数来对另一个进程对象的句柄进行复制到调用此函数的进程句柄表中,实现进程间共享内核对象。
BOOL DuplicateHandle(
  HANDLE hSourceProcessHandle,  // handle to source process
  HANDLE hSourceHandle,         // handle to duplicate
  HANDLE hTargetProcessHandle,  // handle to target process
  LPHANDLE lpTargetHandle,      // duplicate handle
  DWORD dwDesiredAccess,        // requested access
  BOOL bInheritHandle,          // handle inheritance option
  DWORD dwOptions               // optional actions
);



分享到:
评论

相关推荐

    Windows内核 Windows内核

    Windows内核是微软操作系统的核心,它是系统运行、管理硬件资源、提供服务以及调度进程的基础。Windows内核的设计与实现充满了技术的精妙,它的复杂性和广泛性使得深入理解它成为了许多IT专业人士的追求。 1. **...

    寒江独钓--windows内核安全编程光盘源码_寒江独钓windows内核安全编程_

    《寒江独钓--Windows内核安全编程》是一份深入探讨Windows操作系统内核安全编程的珍贵资源,由知名技术专家“寒江独钓”编著。这份资料包含了丰富的Windows内核驱动开发实例,覆盖了从磁盘驱动、文件系统驱动到网络...

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

    编写Windows内核程序,就意味着这个程序可以执行任意指令,可以访问计算机所有的软件、硬件资源。因此,稍有不慎就有可能将系统变得不稳定。Windows的设计者设计了各种驱动模型或者框架,如NT式内核驱动模型、WDM...

    Windows内核设计思想 光盘源代码

    2. **进程与线程**:Windows内核中,进程是资源分配的基本单位,线程则是执行单元。进程间通信(IPC)和线程调度是内核的重要功能,Windows通过进程调度器来管理线程的执行。 3. **对象管理**:Windows内核使用了一...

    Windows内核原理与实现.PDF

    ### Windows内核原理与实现 #### 一、书籍概述 《Windows内核原理与实现》是潘爱民大师的一部力作,该书深入浅出地解析了Windows操作系统的核心技术,帮助读者理解Windows内核的工作机制。作者通过结合实际的...

    Windows内核设计思想 完整版 .pdf

    根据提供的文件信息,我们将重点解析“Windows内核设计思想”这一主题,并深入探讨与之相关的技术要点、设计理念以及实现机制。 ### Windows内核设计思想概述 #### 一、Windows内核简介 Windows操作系统的核心部分...

    windows内核部分源码分析

    《Windows内核部分源码分析》 Windows操作系统作为全球最广泛使用的个人计算机系统之一,其内核是整个系统的基石,负责管理和协调系统资源,保证系统的高效稳定运行。深入理解Windows内核,对于开发者来说,不仅...

    Windows内核安全与驱动开发 随书源码.rar

    随书源码rar文件提供了书中所讲解的各种实例代码,是学习和理解Windows内核安全以及驱动编程的重要辅助资源。这里我们将围绕这些关键概念进行详细阐述。 Windows内核是操作系统的核心部分,它负责管理系统的硬件...

    WINDOWS内核原理与实现(jb51.net).pdf

    Windows内核是操作系统的核心部分,它负责管理系统的硬件资源、调度进程、处理中断、管理内存以及提供系统服务。了解Windows内核的原理与实现,对于提升系统性能优化、驱动程序开发、系统安全分析等都有极其重要的...

    Windows内核安全与驱动开发光盘源码

    Windows内核是系统的核心,负责管理和调度系统资源,而驱动程序则是操作系统与硬件之间的桥梁,使得硬件设备能够正常工作。下面将深入探讨这两个主题,并结合源码分析,帮助你理解和掌握相关知识。 **一、Windows...

    windows内核安全与驱动开发(pdf+源码).zip

    《Windows内核安全与驱动开发》是一本深入探讨Windows操作系统内核安全机制和驱动程序开发的专业书籍。在Windows操作系统中,内核是系统的基石,它管理着系统资源、硬件抽象层以及进程调度等核心功能。驱动程序则是...

    windows内核原理与实现 配套工具

    这本书涵盖了Windows内核的基础架构、系统调用、进程管理、线程调度、内存管理、设备驱动等多个关键领域,旨在帮助读者理解Windows操作系统如何高效地管理和协调系统资源。 源码在计算机科学中扮演着至关重要的角色...

    Windows 内核设计思想

    Windows内核是操作系统的核心部分,负责管理内存、进程、线程、文件系统等关键资源。内核的设计需要考虑效率和安全,因此它采用了模块化的设计思想,将不同的功能封装在不同的模块中,以提高系统的整体性能和可维护...

    Windows内核情景分析-采用开源代码ReactOS(下册)高清pdf版

    首先,书中从内存管理的角度切入,系统性地分析了Windows内核如何分配和管理内存资源。内存管理是操作系统内核的核心功能之一,它涉及到物理内存和虚拟内存的分配、内存页的映射、分页机制、内存共享和保护等多个...

    Windows内核安全编程从入门到实践(高级编程)

    Windows内核是操作系统的核心部分,负责管理硬件资源、调度进程、处理中断和提供系统服务。由于内核运行在最高权限级别(称为系统态),任何在内核中的错误都可能导致系统崩溃或被恶意利用。因此,进行内核安全编程...

    Windows内核的分析

    Windows内核是操作系统的心脏,它管理着系统资源,包括处理器时间、内存分配、设备驱动程序以及进程和线程的调度。了解Windows内核对于系统优化、驱动开发以及故障排查具有重要意义。 在Windows内核中,主要包含...

    Windows内核安全编程

    《Windows内核安全编程》是一本深入探讨Windows操作系统内核层面安全问题的专业书籍。试读内容涵盖前三章,虽然不完整,但足以让我们对Windows内核安全编程的基础知识有所了解。下面将根据这些章节的内容,详细阐述...

    [天书夜读-从汇编语言到Windows内核编程].谭文.邵坚磊.扫描版

    本书《天书夜读-从汇编语言到Windows内核编程》是谭文和邵坚磊两位作者共同著作的技术图书,旨在引导读者深入理解Windows操作系统内核的工作原理。从基础的Windows程序设计和汇编语言开始,书中详细讲解了如何进行...

    Windows内核原理与实现

    Windows内核是整个操作系统的基石,负责管理硬件资源、进程调度、内存管理和输入/输出操作等核心任务。其主要由以下几个部分组成: 1. **执行体(Executive)**:执行体是Windows内核的一个关键组成部分,包含了多...

    Windows内核原理与实现.rar

    通过阅读本书,我们可以了解到Windows内核如何管理资源、调度进程、处理中断、实现内存管理和设备驱动等方面的关键知识点。 1. **Windows内核概述**:Windows内核是整个操作系统的基石,负责系统初始化、调度、错误...

Global site tag (gtag.js) - Google Analytics