首页
社区
课程
招聘
[转帖]若干重要的Windows参考资料
发表于: 2008-5-8 12:08 10132

[转帖]若干重要的Windows参考资料

2008-5-8 12:08
10132

说到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参考书。当然,并不是说读者必须读了这八本书的全部才能从事兼容内核的开发,更不是说读了这八本书就一定可以把兼容内核开发好。

参考书目
Mark Russinovich,David Solomon,“Microsoft Windows Internals”,4e,Microsoft Press,2005
Walter Oney,“Programming the Microsoft Windows Driver Model”,2e, Microsoft Press,2003
Art Baker,“The Windows NT Device Driver Book”,Prentice Hall,1996
Jeffrey Richter,“Advanced Windows”,3e,Microsoft Press,1997
Gary Nebbett,“Windows NT/2000 Native API Reference”,MTP, 2000
Parasad Dabak, “Undocumented Windows NT”,M&T Books, 1999
Sven Schreiber,“Undocumented Windows 2000 Secrets”,Addison-Wesley,2001
Rajeev Nagar,“Windows NT File System Internals”,O’Reilly,1997


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (17)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
有没有中文的书,推一下!
2008-5-8 14:34
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
《Windows NT Win32 API Super Bible》
http://www.infoxa.com/asp/book_file/xxnr_book_5013.htm

《Windows 脚本编程核心技术精解》
http://www.infoxa.com/asp/book_file/xxnr_book_4912.htm

《Windows Sockets 规范及应用-Windows网络编程接口》
http://www.infoxa.com/asp/book_file/xxnr_book_4737.htm

《Windows编程启示录》
http://www.infoxa.com/asp/book_file/xxnr_book_4696.htm

《Windows图形编程》
http://www.infoxa.com/asp/book_file/xxnr_book_4231.htm

。。。

www.infoxa.com 还有很多,懒的帖了,自己淘吧。
2008-5-9 21:32
0
雪    币: 224
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
Mark一下
一本还没看过…………
2008-5-9 23:05
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
都是很好的资料.
2008-5-12 23:07
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
没人顶呀,
看来资料不够好.
2008-5-14 19:33
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我自己来顶一下,哈哈
2008-5-14 20:21
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
确实是不错的资料
2008-5-14 21:17
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9


总算有回应.
2008-5-25 15:23
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
还有很多的资料.需要的可以去找.
2008-6-5 09:32
0
雪    币: 233
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
资料太多了,我觉得寻找资料的时间太多了,把看书的时间占用了
2008-6-5 12:44
0
雪    币: 347
活跃值: (25)
能力值: ( LV9,RANK:420 )
在线值:
发帖
回帖
粉丝
12
谢谢你了
2008-6-5 13:55
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
发现好东西了  谢谢
2008-6-6 16:57
0
雪    币: 233
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
下载了那本圣经,看了一下果然是圣经!
2008-6-7 07:43
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
好的资料,可以使人事半功倍!
2008-6-16 10:18
0
雪    币: 221
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
看了一下,果然都是经典啊!
可惜都是英文的。外国人发明了一样东西,然后让国人学习。然后在发明新的东西,在淘汰。
恶性循环。。。。。
2008-6-23 20:03
0
雪    币: 356
活跃值: (38)
能力值: ( LV9,RANK:220 )
在线值:
发帖
回帖
粉丝
17
这是相当相当好的资料啊。不过下载地址呢。。。
2008-6-28 18:58
0
雪    币: 202
活跃值: (151)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
真的是好的参考资料能够让你“知其所以然”。楼主介绍的有些没注意过,谢谢分享,很具导向意义!!!
2008-7-1 12:23
0
游客
登录 | 注册 方可回帖
返回
//