精华内容
下载资源
问答
  • Windows内核安全与驱动开发(随光盘)(随源码)
  • windows内核编程

    2016-09-19 10:46:02
    windows内核下操作字符串
  • Windows内核安全与驱动开发 随代码ZIP
  • 分享给大家,以下是《Windows内核安全与驱动开发》光盘说明: 本光盘包含了本书例子中的部分源码,光盘内source文件夹为源码根目录,source目录下的fir.sln文件为工程的解决方案文件,读者可以使用Visual Studio ...
  • 基本Windows内核书籍

    千次阅读 2009-06-20 16:16:00
    要让Linux内核支持Windows应用程序和设备驱动,我们当然得要了解并理解Windows的各种机制和机理。本文的目的是为大家介绍和推荐一些关于Windows的参考资料。当然,对Linux的了解和理解更是必不可少,但是笔者以为...

        要让Linux内核支持Windows应用程序和设备驱动,我们当然得要了解并理解Windows的各种机制和机理。本文的目的是为大家介绍和推荐一些关于Windows的参考资料。当然,对Linux的了解和理解更是必不可少,但是笔者以为既然是行走于我们这个地界的人,对Linux想必自有一定的基础,所以Linux方面的参考资料这里就不讲了。
        说到Windows的技术资料,微软本身的各种SDK、DDK、以及MSDN网站上的资料当然是重要的,但是信息量太大。在笔者看来,微软的资料数量之大正是由于不公开源代码。一件东西,放在透明的玻璃瓶里,自然就不需要作太多的描述;而若封装在一个黑盒子中,描述起来可就费劲了。微软既不肯公开其源码,却又想要别人在此基础上开发各种第三方软件,自然就得对其各种产品作黑盒子描述,“信息爆炸”就不可避免了。许多人见了微软的资料就烦,是因为这些资料只告诉你“其然”而不告诉你“其所以然”。也有许多人很喜欢微软的资料,是因为这些资料就像使用手册,所以“一抓就灵”。也难怪市面上有那么多关于 Windows的各种“宝典”。读微软的资料可以使你成为“很好的”工程师,却不会使你成为科学家。
        不过,幸而还有一些书,在讲述其然的同时还在讲述其所以然。有趣的是,其中特别重要的几本正是由微软出版社组织和出版的。可见微软自己也知道,光作黑盒子描述,光让人家知其然而不知其所以然,是不够的,那样很难成长起高质量的Windows软件开发人员,反过来对微软也不利。这跟奴隶主有时候也意识到该让奴隶们吃的壮实一些,是同一个道理。而对于我们,这些书的重要性就不言而喻了。

        Windows参考书的首选当推Mark Russinovich和 David Solomon的“Microsoft Windows Internals”第4版,微软出版社2005年版。我们只要简单回顾一下这本书 的历史,读者就可体会到它的重要性。这本书的第一版由Helen Custer编写,书名“Inside Windows NT”。第二版(1998年) 改由David Solomon编写,由WinNT开发团队的主任Lou Perazzoli作序。第三版(2000年)的书名改成 “Inside Windows 2000”,由David Solomon和Mark Russinovich共同编写。到了第四版,书名又改成 “Microsoft Windows Internals”,由Mark Russinovich和David Solomon共同编写。尤其引人注目的是,第四版上有David Cutler写的前言,题为“Historical Perspective”,文中回顾了WinNT的由来。这位 David Cutler可不是等闲之辈,他是WinNT之父。就是他,当年把VMS的技术和(部分)人马从DEC带到了微软。有个笑话很形象地说出了 WinNT和VMS之间的渊源关系:把“VMS”这三个字母的ASCII代码每个都加1,就成了“WNT”。而David Solomon是 David Cutler在DEC就相识的老伙伴。正是David Cutler特许David Solomon可以自由翻看WinNT的源代码。这种 “看”,跟把人请去住在旅馆里十天半个月、每天去微软资料室看上几个钟头的那种“双规”下的“看”,当然有着天壤之别。所以,这本书应该说是一本权威著作,书中所讲应该认为是有源代码根据的。再说,这本书也确实让人知其然并且知其所以然。当然,要是有源代码就更好了,但是要知道那是微软,能有如此这般就很不错了。在兼容内核的开发过程中,这本书无疑将在总体上起很大的指导作用。
        第二本书是Walter Oney的 “Programming the Microsoft Windows Driver Model”第2版,微软出版社2003年版。这本书对微软的 WDM设备驱动模型(即框架)作了深入的介绍。微软要求从Win2k开始的设备驱动模块都符合WDM的要求。与传统的WinNT设备驱动相比,WDM要求设备驱动模块都支持PnP(即插即用)、电源管理(不用时可转入省电模式)、以及WMI (Windows Management Instrumentation,意为Windows管理手段,是微软版的WBEM实现)。所以,这本书所介绍的是新的Window设备驱动框架的设计与实现,附带着也介绍了设备驱动界面上的一些重要的函数。显然,这本书对于兼容内核中设备驱动框架和设备驱动界面的实现有着重要的指导意义。读了这本书,再回过去看Windows DDK中一些样本实例的源代码,就更容易理解,理解也可以更深了。
        不过,现在实际上在使用的.sys模块还有不少只是传统的WinNT设备驱动。WinNT的设备驱动框架可以说是WDM的一个子集,比WDM要简单一些。对于WinNT设备驱动,Art Baker的“The Windows NT Device Driver Book”是一本很好的参考书。这本书是由 Prentice Hall在1996年出版的。虽然年代已经久远,书的内容却并不显得太陈旧,可以作为WDM那本书的补充,参照阅读。
        第四本书是Jeffrey Richter的“Advanced Windows”第3版,微软出版社1997年版。这本书就不仅仅是讲内核了。它让读者对Windows操作系统有个整体上的理解。例如,在另一篇文章中笔者曾提到,Windows在创建子进程时对于已打开文件的遗传与Unix/Linux 在方式上有很大的不同,这本书对此就有很详细的叙述。而这一点正可以说明,不同内核间的有些差别是很难在内核外面得到补偿的。
        第五本书是 Gary Nebbett的“Windows NT/2000 Native API Reference”,MTP出版社。这里所说的 “Native API”,实际上就是系统调用。显然,这是一本关于WinNT系统调用的参考手册。既然微软把系统调用界面藏在黑盒子里面,或者说藏在 Win32 API后面,从来都不公开,那么这本参考手册的价值也就不言而喻了。看一下这本书,就可以知道实现Windows系统调用界面的工作量该有多 大。
        作为对这本书的补充,Parasad Dabak等人的“Undocumented Windows NT”,M& T Books,1999年出版,对于WinNT系统调用的实现也是一本有用的参考书。与前面几本由微软出版的参考书不同的是,这两本书的材料主要是通过逆向工程得来的。有源代码作为根基的著作固然比较权威,根据实验取得的资料也值得重视。
        还有一本Sven Schreiber的 “Undocumented Windows 2000 Secrets”,Addison-Wesley,2001年出版,也是一本好书,甚至更好。这本书一边是基于逆向工程介绍Windows内核各方面的内容,也包括设备驱动;另一边还教给读者一些逆向工程的方法,所以对程序的调试很有好处。特别值得一提的是,这本书的附录中实际上还列出了Win2k系统调用的函数跳转表、即函数名与系统调用号的对照,书中还讲述了这个对照表是如何得来的。这可是个宝贵的信息。因为Native API一书中虽然详细介绍了各个具体系统调用的使用方法,却并未提供它们的系统调用号。而若缺了这个信息,我们在实现 Windows系统调用界面的函数跳转表时就得多费许多周折。
        最后,Rajeev Nagar的“Windows NT File System Internals”,O’Reilly,1997,虽然主题是“文件系统内幕”,但是实际上对内核的各个方面都有一些介绍,也有一定的参考价值。
        这八本书是笔者所知最好的Windows参考书。当然,并不是说读者必须读了这八本书的全部才能从事兼容内核的开发,更不是说读了这八本书就一定可以把兼容内核开发好。

    展开全文
  • 自己收集的,Windows内核安全与驱动开发 PDF+光盘源码
  • 本书从Windows内核编程出发,全面介绍串口、键盘、磁盘、文件系统、网络等相关的Windows内核模块的编程技术,以及基于这些技术的密码保护、防毒引擎、文件加密、网络嗅探、网络防火墙的具体实现。 对于驱动编程模型...
  • Windows 内核安全 驱动开发 pdf 完整目录 标签 Windows 内核安全 驱动开发 pdf 完整目录 标签
  • Windows内核安全与驱动开发完整的光盘代码,经典的驱动开发代码案例,如果触犯版权,请告知!
  • 寒江独钓-Windows内核安全编程随光盘
  • WINDOWS内核原理与实现

    2016-07-05 17:33:24
    本书介绍Windows内核的基本原理,包括进程和线程、内存管理、线程间同步、I/O模型和Windows的存储模型。对于每一部分内容的介绍,首先从现代操作系统的基本原理出发,然后结合Windows公开的源代码WRK来介绍Windows中...
  • WINDOWS内核原理与实现(带书签版)
  • 从汇编语言到Windows内核编程.pdf 【完整书签】【高清版】(共282页) ============================================ 入手篇 熟悉汇编 第1章 汇编指令与c语言 1.1 上机建立第一个工程 1.1.1用visual studio创建工程...
  • Windows内核安全与驱动开发PDF带书签(随光盘).
  • 本书从操作系统原理的角度,详细解析了windows如何实现限贷操作系统的额各个关键组件。在介绍各个组件时,本书以WRK为参照。
  • Windows内核安全与驱动开发光盘源码
  • Windows内核安全与驱动开发 随光盘源码,全部打包上传。PDF待扫描完成后奉上!
  • Windows内核安全与驱动开发(随光盘)
  • Windows内核安全与驱动开发》光盘说明 本光盘包含了本书例子中的部分源码,光盘内source文件夹为源码根目录,source目录下的fir.sln文件为工程的解决方案文件,读者可以使用Visual Studio 2005开发工具打开fir....
  • Windows内核安全与驱动开发(带书签):本书的前身是《天书夜读——从汇编语言到Windows内核编程》和《寒江独钓——Windows内核安全编程》。与Windows客户端安全软件开发相关的驱动程序开发是本书的主题。中的程序...
  • Windows内核原理与实现

    2014-01-02 22:59:18
    Windows内核原理与实现》pdf电子书的下载地址,真实有效。
  • 这是《Windows内核安全与驱动开发》一的随案例代码,代码内容以Windows驱动编程为主,仅供参考学习之用
  • Windows内核原理与实现》内工具

    热门讨论 2012-01-02 15:31:32
    Windows内核原理与实现》内的工具,从电子工业出版社网站上下载下来的,但是原来的工具是嵌在docx文档中的,需要下载一个package.exe程序来提取。所以索性都提取出来重新压缩,方便大家使用。
  • windows内核开发.pdf

    2020-05-14 13:25:33
    windows内核驱动开发,原的环境是Visual Studio 2005+Windows Vista,所以在编译的时候需要设置相应的SDK
  • Linux 内核Windows 内核有什么区别?

    千次阅读 多人点赞 2021-02-20 09:46:29
    对于服务器使用的操作系统基本上都是 Linux,而且内核源码也是开源的,任何人都可以下载,并增加自己的改动或功能,Linux 最大的魅力在于,全世界有非常多的技术大佬为它贡献代码。 这两个操作系统各有千秋,不分...

    微信搜索「小林coding」,更多图解系、网络文章等你来撩哦!

    Windows 和 Linux 可以说是我们比较常见的两款操作系统的。

    Windows 基本占领了电脑时代的市场,商业上取得了很大成就,但是它并不开源,所以要想接触源码得加入 Windows 的开发团队中。

    对于服务器使用的操作系统基本上都是 Linux,而且内核源码也是开源的,任何人都可以下载,并增加自己的改动或功能,Linux 最大的魅力在于,全世界有非常多的技术大佬为它贡献代码。

    这两个操作系统各有千秋,不分伯仲。

    操作系统核心的东西就是内核,这次我们就来看看,Linux 内核和 Windows 内核有什么区别?


    内核

    什么是内核呢?

    计算机是由各种外部硬件设备组成的,比如内存、cpu、硬盘等,如果每个应用都要和这些硬件设备对接通信协议,那这样太累了,所以这个中间人就由内核来负责,让内核作为应用连接硬件设备的桥梁,应用程序只需关心与内核交互,不用关心硬件的细节。

    内核

    内核有哪些能力呢?

    现代操作系统,内核一般会提供 4 个基本能力:

    • 管理进程、线程,决定哪个进程、线程使用 CPU,也就是进程调度的能力;
    • 管理内存,决定内存的分配和回收,也就是内存管理的能力;
    • 管理硬件设备,为进程与硬件设备之间提供通信能力,也就是硬件通信能力;
    • 提供系统调用,如果应用程序要运行更高权限运行的服务,那么就需要有系统调用,它是用户程序与操作系统之间的接口。

    内核是怎么工作的?

    内核具有很高的权限,可以控制 cpu、内存、硬盘等硬件,而应用程序具有的权限很小,因此大多数操作系统,把内存分成了两个区域:

    • 内核空间,这个内存空间只有内核程序可以访问;
    • 用户空间,这个内存空间专门给应用程序使用;

    用户空间的代码只能访问一个局部的内存空间,而内核空间的代码可以访问所有内存空间。因此,当程序使用用户空间时,我们常说该程序在用户态执行,而当程序使内核空间时,程序则在内核态执行。

    应用程序如果需要进入内核空间,就需要通过系统调用,下面来看看系统调用的过程:

    内核程序执行在内核态,用户程序执行在用户态。当应用程序使用系统调用时,会产生一个中断。发生中断后, CPU 会中断当前在执行的用户程序,转而跳转到中断处理程序,也就是开始执行内核程序。内核处理完后,主动触发中断,把 CPU 执行权限交回给用户程序,回到用户态继续工作。


    Linux 的设计

    Linux 的开山始祖是来自一位名叫 Linus Torvalds 的芬兰小伙子,他在 1991 年用 C 语言写出了第一版的 Linux 操作系统,那年他 22 岁。

    完成第一版 Linux 后,Linux Torvalds 就在网络上发布了 Linux 内核的源代码,每个人都可以免费下载和使用。

    Linux 内核设计的理念主要有这几个点:

    • MutiTask,多任务
    • SMP,对称多处理
    • ELF,可执行文件链接格式
    • Monolithic Kernel,宏内核
    MutiTask

    MutiTask 的意思是多任务,代表着 Linux 是一个多任务的操作系统。

    多任务意味着可以有多个任务同时执行,这里的「同时」可以是并发或并行:

    • 对于单核 CPU 时,可以让每个任务执行一小段时间,时间到就切换另外一个任务,从宏观角度看,一段时间内执行了多个任务,这被称为并发。
    • 对于多核 CPU 时,多个任务可以同时被不同核心的 CPU 同时执行,这被称为并行。

    SMP

    SMP 的意思是对称多处理,代表着每个 CPU 的地位是相等的,对资源的使用权限也是相同的,多个 CPU 共享同一个内存,每个 CPU 都可以访问完整的内存和硬件资源。

    这个特点决定了 Linux 操作系统不会有某个 CPU 单独服务应用程序或内核程序,而是每个程序都可以被分配到任意一个 CPU 上被执行。

    ELF

    ELF 的意思是可执行文件链接格式,它是 Linux 操作系统中可执行文件的存储格式,你可以从下图看到它的结构:

    ELF 文件格式

    ELF 把文件分成了一个个分段,每一个段都有自己的作用,具体每个段的作用这里我就不详细说明了,感兴趣的同学可以去看《程序员的自我修养——链接、装载和库》这本书。

    另外,ELF 文件有两种索引,Program header table 中记录了「运行时」所需的段,而 Section header table 记录了二进制文件中各个「段的首地址」。

    那 ELF 文件怎么生成的呢?

    我们编写的代码,首先通过「编译器」编译成汇编代码,接着通过「汇编器」变成目标代码,也就是目标文件,最后通过「链接器」把多个目标文件以及调用的各种函数库链接起来,形成一个可执行文件,也就是 ELF 文件。

    那 ELF 文件是怎么被执行的呢?

    执行 ELF 文件的时候,会通过「装载器」把 ELF 文件装载到内存里,CPU 读取内存中的指令和数据,于是程序就被执行起来了。

    Monolithic Kernel

    Monolithic Kernel 的意思是宏内核,Linux 内核架构就是宏内核,意味着 Linux 的内核是一个完整的可执行程序,且拥有最高的权限。

    宏内核的特征是系统内核的所有模块,比如进程调度、内存管理、文件系统、设备驱动等,都运行在内核态。

    不过,Linux 也实现了动态加载内核模块的功能,例如大部分设备驱动是以可加载模块的形式存在的,与内核其他模块解藕,让驱动开发和驱动加载更为方便、灵活。

    分别为宏内核、微内核、混合内核的操作系统结构

    与宏内核相反的是微内核,微内核架构的内核只保留最基本的能力,比如进程调度、虚拟机内存、中断等,把一些应用放到了用户空间,比如驱动程序、文件系统等。这样服务与服务之间是隔离的,单个服务出现故障或者完全攻击,也不会导致整个操作系统挂掉,提高了操作系统的稳定性和可靠性。

    微内核内核功能少,可移植性高,相比宏内核有一点不好的地方在于,由于驱动程序不在内核中,而且驱动程序一般会频繁调用底层能力的,于是驱动和硬件设备交互就需要频繁切换到内核态,这样会带来性能损耗。华为的鸿蒙操作系统的内核架构就是微内核。

    还有一种内核叫混合类型内核,它的架构有点像微内核,内核里面会有一个最小版本的内核,然后其他模块会在这个基础上搭建,然后实现的时候会跟宏内核类似,也就是把整个内核做成一个完整的程序,大部分服务都在内核中,这就像是宏内核的方式包裹着一个微内核。


    Windows 设计

    当今 Windows 7、Windows 10 使用的内核叫 Windows NT,NT 全称叫 New Technology。

    下图是 Windows NT 的结构图片:

    Windows NT 的结构

    Windows 和 Linux 一样,同样支持 MutiTask 和 SMP,但不同的是,Window 的内核设计是混合型内核,在上图你可以看到内核中有一个 MicroKernel 模块,这个就是最小版本的内核,而整个内核实现是一个完整的程序,含有非常多模块。

    Windows 的可执行文件的格式与 Linux 也不同,所以这两个系统的可执行文件是不可以在对方上运行的。

    Windows 的可执行文件格式叫 PE,称为可移植执行文件,扩展名通常是.exe.dll.sys等。

    PE 的结构你可以从下图中看到,它与 ELF 结构有一点相似。

    PE 文件结构


    总结

    对于内核的架构一般有这三种类型:

    • 宏内核,包含多个模块,整个内核像一个完整的程序;
    • 微内核,有一个最小版本的内核,一些模块和服务则由用户态管理;
    • 混合内核,是宏内核和微内核的结合体,内核中抽象出了微内核的概念,也就是内核中会有一个小型的内核,其他模块就在这个基础上搭建,整个内核是个完整的程序;

    Linux 的内核设计是采用了宏内核,Window 的内核设计则是采用了混合内核。

    这两个操作系统的可执行文件格式也不一样, Linux 可执行文件格式叫作 ELF,Windows 可执行文件格式叫作 PE。


    巨人的肩膀
    1. https://en.wikipedia.org/wiki/Monolithic_kernel
    2. https://en.wikipedia.org/wiki/Executable_and_Linkable_Format
    3. https://en.wikipedia.org/wiki/Windows_NT
    展开全文
  • 本书的前身是《天书夜读——从汇编语言到Windows内核编程》和《寒江独钓——Windows内核安全编程》。与Windows客户端安全软件开发相关的驱动程序开发是本书的主题。中的程序使用环境从32位到64位,从Windows XP到...
  • windows内核安全与驱动开发 谭文的 的随光盘内的所有资源+代码。 是从我的的光盘里拷贝出来的。所以这个资源是完整的。可信赖的。欢迎使用.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 49,965
精华内容 19,986
关键字:

windows内核书