Windows内核结构

第一篇博客,随便写下练练手:)

Windows内核总共分为三层:

  1. 与硬件直接打交道的这一层叫做硬件抽象层简称HAL,这一层的用意就是把所有与硬件相关联的代码逻辑隔离到一个专门的模块中,从而做到尽可能的独立于硬件平台。

  2. HAL之上是内核层,有时也称为微内核,这一层包含了基本的操作系统原语和功能,如线程和进程、线程调度、终端和异常的处理、同步对象和各种同步机制(比如自旋锁)

  3. 在内核层之上则是执行体层,这一层的目的是提供一些可供上层应用程序的或内核驱动程序直接调用的功能和语义。

    执行体层和内核层位于同一个二进制模块中即内核基本模块:ntoskrnl.exe Windows内核为用户模式代码提供了一组系统服务,供应用程序使用内核的功能。应用程序通常不直接调用这些系统服务,而是通过一组系统DLL,最终通过ntdll.dll切换到内核模式下的执行体API函数中,以调用内核中的系统服务,NTDLL是链接用户模式和内核模式的桥梁。 对于内核提供的每一个系统服务,该DLL都提供了一个相应的存根函数,这些存根函数的名称以“Nt”作为前缀,例如NtCreateProcess、NtOpenFile和NtSetTimer。另外,ntdll还提供了许多系统级别的支持函数,如映像加载器程序函数(“Ldr”为前缀)、系统事件函数(以“Etw”为前缀),以及一般的运行支持函数(以“Rtl”为前缀)和字符串支持函数等。
    执行体API函数接受的参数来源于各种应用程序,因此,为了保证系统的健壮性以及抵御来自用户模式的恶意攻击,所有执行体API函数必须保证参数的有效性。这意味着他们必须在恰当的时候检查参数的值,若是指针的话,还必须保证调用者可以访问指针所指的内存。通常会在服务函数的开始处检查所有的参数。
    检查代码:

     PreviousMode = KeGetPreviousMode();if (PreviousMode != KernelMode) {  try {           ProbeForWrite(InputInformation,             InputInfomationLength,              sizeof(ULONG));         if (ARGUMENT_PRESENT(ReturnLength))     {ProbeFOrWriteUlong(ReturnLength);}     except(EXCEPTION_EXECUTE_HANDLER){          return GetExceptionCode();      }}  }

Windows内核结构相关推荐

  1. windows内核开发学习笔记十五:IRP结构

    windows内核开发学习笔记十五:IRP结构   IRP(I/O Request Package)在windows内核中,有一种系统组件--IRP,即输入输出请求包.当上层应用程序需要访问底层输入输 ...

  2. 枚举windows进程模块的几种方法—PEB内核结构详解

    1. 引言 在诸多的场景中(例如软件测试,软件安全研究等领域)经常需要分析在目标进程中        具体加载了哪些模块(DLL),以及所加载的模块的信息(如模块基地址,映射文件大小等).获取这win ...

  3. 枚举Windows进程中模块的几种方法-PEB内核结构详解

    1. 引言 在诸多的场景中(例如软件测试,软件安全研究等领域)经常需要分析在目标进程中具体加载了哪些模块(DLL),以及所加载的模块的信息(如模块基地址,映射文件大小等).获取这windows进程加载 ...

  4. windows内核开发笔记七:内核开发OVERLAPPED结构体详解

    windows内核开发笔记七:内核开发OVERLAPPED结构体详解 typedef struct _OVERLAPPED {   DWORD Internal;   DWORD InternalHi ...

  5. linux c内核开发,嵌入式uClinux的内核结构和开发环境

    1 引言 嵌入式操作系统是嵌入式系统的灵魂,而且在同一个硬件平台上可以嵌入不同的嵌入式操作系统.比如ARM7TDMI内核,可以嵌入Nucleus.VxWorks.uClinux等操作系统.在此主要对u ...

  6. Windows内核执行体对象管理器的操作过程与分析

    我之前写过一个有关于对象管理的读书笔记.但是这篇文章与前面的不同,这是我个人对对象管理器到底是什么的一个分析,而且也是直接对WRK代码进行的阅读. 执行体对象即我们通常所言的内核对象,我们知道Wind ...

  7. 2、从汇编语言到Windows内核编程笔记(2)

    内核线程 在驱动中生成的线程一般是系统线程.系统线程所在的进程名为"System". NTSTATUS PsCreateSystemThread( OUT PHANDLE Thre ...

  8. 读书笔记之《Windows内核原理与实现》

    最近学习<Windows内核原理与实现>发现其博大精深,粗略过了一遍,很多东西比较茫然,看书之余把书中涉及的函数,结构,全局变量的所在页数总结出来,便于以后查阅. 由于半自动半手工,难免有 ...

  9. Windows内核函数的命名

    <Windows内核情景分析--采用开源代码ReactOS(上.下册)>本书通过分析ReactOS的源代码介绍了Windows内核各个方面的结构.功能.算法与具体实现.本小节为大家介绍Wi ...

  10. Windows内核新手上路1——挂钩SSDT

    Windows内核新手上路1--挂钩SSDT 这个系列记录学习我学习windows内核的点点滴滴,高手请直接无视. 文章核心内容:挂钩SSDT中函数列NtOpenProcess,NtDuplicate ...

最新文章

  1. Android园区部队人脸识别源码门禁项目讲解
  2. 几何画板度量三角形的步骤
  3. 刀片服务器显示连接线,通过浏览器对刀片服务器进行管理
  4. (58)FPGA乘法器实现(task)
  5. 关于 EOF EOF; 是什么意思?
  6. OARACLE——创建表空间、用户、权限、删除用户、导入、导出
  7. 实习期间的一些思考整理(1)2018.4.8~4.9
  8. Win10系统无法访问局域网共享文件夹的问题解
  9. python中用函数编写程序_python编写程序,在程序中定义一个函数,计算1+1/2+1/3+1/4+……+1/n...
  10. 你值得安装的24个chrome插件!!!
  11. Windows系统的电脑有可以删除的文件夹(个人笔记)
  12. LeetCode Daily challenge - K Closest Points to Origin
  13. python怎样使用各个日期赤纬_行星的上合、下合、大冲、大距、方照、逆行、合月时间计算...
  14. 工业相机(高速相机)与普通相机的差别
  15. redis常用的五大数据类型和redis新增类型以及对应的命令
  16. Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; mysql的xml文件出现异常解决方案
  17. 如何让Arduino用2颗5号电池运行1年以上--Arduino低功耗
  18. Debian firmware:failed to load i915/kbl_dmc解决
  19. Kubernetes 一篇文章教你yum快速搭建K8s
  20. 2018年哪些科技突破将带来新惊喜?

热门文章

  1. 二级java考什么_​Java计算机二级考试考什么
  2. RTI_DDS自定义插件开发 5 专属区域(_xxEA)
  3. 生产和服务使用的计算机软件,Windows效率 篇三:Windows 10软件推荐,将你的生产力工具发挥到极致!...
  4. RF接口测试设计时需要考虑的事(robotframework框架)
  5. cs231n图像分类笔记(上)学习记录
  6. wsdl2java生成服务端_根据wsdl,apache cxf的wsdl2java工具生成客户端、服务端代码
  7. 《人人都该买保险》读书笔记
  8. scratch3 打幽灵游戏
  9. scratch 3 下载和安装
  10. 【南卡樱桃|读书笔记《学习高手》】