DriverStudio 是一套用来简化微软Windows q_下设备驱动程序的开发,调试和测试的工具包?br />DriverStudio 当前的版本包括下列工h块: DriverAgent DriverAgent 为Win32 应用E序提供直接讉Kg的功能。即使你没有M讑֤驱动E序开发的l验或经历,你也能编写出DriverAgent应用E序来直接访问硬件设备。DriverAgent 应用E序可以q行?Windows 98, Windows 95, Windows NT ?Windows 2000q_上?当前版本不支持Windows XPq_? VToolsD VToolsD 是一个用来开发针对Win9X (Windows 95 ?Windows 98)操作pȝ下设备驱动程?VxD)的工兗VToolsD 中包括生成驱动程序源代码的工Prun-time ?interface 库,以及一些驱动程序样本,可以用来作ؓ各种cd的设备驱动程序的基础部分?br />DriverWorks DriverWorks对于Windows NT下和 Windows 98 ?Windows 2000共同支持的Win32驱动模型(WDM)讑֤驱动E序的开发提供完全的支持。DriverWorks中包含一个非常完善的源代码生成工?DriverWizard) 以及相应的类库和驱动E序hQ它提供了在C++下进行设备驱动程序开发的支持? DriverNetworks DriverNetworks 是针对Windows|络驱动开发h员的一个模块。在它的核心部分QDriverNetworks 是一个针对NDIS drivers ?TDI clients (DriverSockets)?C++ 的类库。DriverNetworks 中也有Quick Miniport Wizard 用来直接开始一个NDIS Miniport ?Intermediate Driver 工程。它可以让你快速的生成所有采用DriverNetworks C++ cd~写的NDIS驱动E序的编译,安装和调试所需要的文g SoftICE SoftICE 是一个功能极其强大的内核模式调试器,它支持在配置一台单独的计算机或两台计算Zq行讑֤驱动E序的调试?br /> BoundsChecker Driver Edition BoundsChecker 驱动E序版采用了NuMega针对应用E序开发的一U创新的错误?a class="channel_keylink" >技?/font>。BoundsChecker 驱动E序版中提供了参数确认和pȝ实施可以用来监视和跟t在不同的设备驱动程序与其它的操作系l的lg之间的所有的交互作用。配|向导提供了对于BoundsChecker 采集到的各种cd的大量信息的_的控制? BoundsChecker 驱动E序版当前支持Windows NT, Windows 2000, Windows Millennium Edition?Windows 98?当前版本不支持Windows XP) DriverWorkbench DriverWorkbench 可以使你q一步了解系l崩溃时的dump 文g和当时的事g。由于与BoundsChecker Driver Edition集成在一? 在DriverWorkbench 中可以看到在pȝ崩溃前或其登录的时候由BoundsChecker 采集到的数据。这U独特的查看pȝ的方式提供了I前的能力,使得可以通过查看在系l崩溃之前系l实际活动的t迹来发现问题之所在? DriverWorkbench 中也包含?TrueTime Driver Edition. TrueTime Driver Edition 是一个性能分析工具Q可让Windows NT 的设备驱动开发h员发现ƈ修正驱动E序的性能瓉。TrueTime Driver Edition 是用来满_于设备驱动程序和内核模式下代码开发h员的需求。一些额外的功能出现在TrueTime Driver Edition 的下一个版本中?br />DriverWorkbench 当前支持 Windows NT ?Windows 9x. (当前版本不支持Windows XP) FieldAgent FieldAgent 可让你对q行在客L计算Z的驱动程序进行处理。由FieldAgent攉到的信息可用于追捕到那些可能只发生在特定的配|环境下问题的原因?br />FieldAgent 当前支持 Windows NT ?Windows 9x. (当前版本不支持Windows XP) TrueCoverage Driver Edition 用来保对于所有的代码都已l完全被试的方法是使用代码覆盖率工兗TrueCoverage 可以帮助你检代码中的哪些部分已l被试Q哪些部分还没有被测试。通过在开发过E中量和跟t代码的执行情况和稳定程度,可以节约试旉q提高代码的可靠性。TrueCoverage 能够很轻杄攉驱动E序的覆盖率数据Q在源代码的上下文中查看q些数据Q也可以多ơ会话的l果合ƈ以篏加覆盖率?a class="channel_keylink" >数据?br />TrueCoverage Driver Edition当前支持 Windows NT 4.0 (Service Pack 3 or later) ?Windows 2000. (当前版本不支持Windows XP) 在我们推荐你使用DriverWorks ?VToolsD来开发设备驱动程序的同时QDriverStudio 中的工具与Microsoft DDK在一起也能很好的与其配合使用来开发出高质量的驱动E序? |
什么是VxD?
VxD?VIRTUAL X
DRIVER.?说了也白?其实是虚拟讑֤驱动E序.是系l用于对各种g资源识别,理,l护q作的扩?/span>.VXD和VMM(虚拟机管理器)一起合
?l持着pȝ的运?VxD模式从WIN3X时代开始了.一直到了WIN98q一直在MS的WINpd操作pȝ中vd作用.VxDq作在INTEL
pdCPU保护模式下的RING0.拥有对硬件的最高控制权.
什么是Kernel Mode Driver(KMD)?
Kernel Mode
Driver是NT下提出的理,l护gq作的驱动程序模?该DRIVERq行于NT的KERNEL模式?cM于RING0.但是,一个KMD的运
作环境在不同的时候是Ҏ不同?DRIVER收到讑֤h时的q行环境很可能和讑֤h实际操作的运行环?font color="#cc0000" size="1">Ҏ不同.q也是NT?DRIVER的运作也受到NT的许多限?一不小?DRIVER和NT同归于?来个BSOD(BLUE SCREEN OF DEATH).
什么是WDM?
WDM乃WIN32 DRIVER MODEL的简?随WIN95
OSR2.1推出,和WIN2000兼容.乃MS力推?全新'的驱动程序模?目前|上WDM的文章很?但是成书不多.基本上由?8对WDM的支?
有限,而WIN2000又没有正式版推出,WDM的实际应用还不多.但是很快,WDM成Z的DRIVER模式.在我看来,WDM只不q是?font color="#cc0000" size="1">PNP的KMD而已.(也许是没领悟到精髓说的话:))
早期的WIN3X,核心是VMM,当时的VMM已经具备了基本的操作pȝ核心的一些特?但是WIN3X的驱动程序模式׃?g由VxD驱动,|络和文件系l由实模?/font>驱动E序驱动,多媒体硬件和打印机有RING3 DLL驱动,pȝ服务军_部分被{?font color="#cc0000" size="1">V86模式下由实模式的DOS完成.
CWIN95很大一部分pȝ服务被{换到了保护模式下.但是,混ؕ的驱动模式没有改?WIN95L方向是易用?而且的确WIN95在用L面上?
些进??5开发组努力开发的时?NT也推Z.q是个号UC2极的OS.当然,我ƈ不相信该pȝ的强壮?如果它的源代码公开的话,很可能就不堪一
?当然,NT?5q是有可圈点之处?它乃是个真正?2位系l?而且,提供?个应用环?WIN32,VDM,POSIX.WOW,OS/2.q?
5个环境相互独?q且操作pȝ仅对WIN32环境提供接口,WIN32提供其他环境接口,其他环境的API调用最l被转换到WIN32,q入OS核心.
换言?WIN32是屏q?鼠标,键盘的拥有?其他环境如要使用,p向WIN32子系l申?
现在的WIN98乃是一个大杂种.包含了所?5的驱动程序模?加上了WDM.很难惌.如果有一个硬仉要开N动程?你必首先看一?适合什么模?MINIPORT? NDIS? HID? RING0? RING3? 几乎每个g都对应一U模?
::UNDOCUMENTED HINT
NT
隐藏了一个环?那就是NATIVE环境.q个环境可以说基本上没有在文档里出现q?也没有支?在DDK里仅仅公开了一部分NATIVE
API.NATIVE环境在系l启动时其重要.NT的CHKDSKE序是个NATIVE应用E序.在运行该E序?Ҏ没有WIN32环境,更没?
WOW, POSIX环境.q时候只有NATIVE API可供调用.而MS在很多情况下是靠NATIVE
API来获取更高的应用E序效能.得到不公q的竞争优势.某些NATIVE API甚至可饶q系l的安全查来完成原先不能完成的Q?
VXD和KMD的最大区别在于VXD不需要考虑多CPU的问?而KMD需要调用自旋锁来同步多CPU之间数据讉K.当然,如果必要的话,通过VXD来增
加对多CPU的支持应该ƈ不困?因ؓVMM提供了很开攄环境:VXD可以拦截VMM的调用入?qg在DOS时代拦截INT21来扩展系l服?
而NT如果要扩展系l的化就很困难了.因ؓq是未公开?(当然,Ҏq是有的.{过一D|间我再写:))
另外一个重要的区别是VXD可以在CPU处于实模式时p得系l的控制.而KMD不能.{KMD获得W一个启动时?CPU已经处于保护模式,甚至你替换调HAL或NTOSKRNL也无于?因ؓCPU的模式切换是有NTLDRq行?(
到底如何军_该用VXDq是KMDq是WDM?
当然,首先应该考虑的是应用q_.如果是NT4.X,你没得选了,肯定是KMD?如果是WIN95,那也只有VXD一U选择.当目标^台是98或WIN2000,?
供选择的方法多?但是也受到OS规范的限?
98?如果惛_发的是FSD,那么必须用VXD.管98有个WDMFS.SYS的东?但是它ƈ非真正的WDM的文件系l驱动程?98支持的FSD是以
IFSMGR.VXD为基的VXD.
如果xDISK,COMM...{一pd的DRIVER.你也要写VXD.因ؓ98q没有提供该cȝWDM支持.那么98下什么可以用WDM?HID,|络c?多媒体类
的硬件支持已l{化到了WDM.你已l可以从DDK里发现这几类驱动E序的样板程?
在NT2000?我还不是很熟.但是很显?对WDM的支持会更多.老的KMD逐渐退?当然,KMD有他不可灭的优?(在NT?KMD的限制比9X
下的VXD?但是它仍有一些活l余?例如DISK驱动E序可以讉K视频g,或者其他资?但随NT的发?早晚q些zȝ余地也会被取?)WDM
需要将自己注册到相应的c里.有相应的例程必须输出.有些cM于MINIDRIVER.
最l要考虑的是DRIVER作者的习惯.对哪1U模式更熟悉,写作更方?那就用哪?
我个人开?8/95q_更多?所以自己更們于VXD:安全限制最?q且,我喜Ƣ汇~?:) ?
NTKERN.VXD的一些东?
NTKERN.VXD乃是WIN98提供NTcL务的核心驱动E序.它输Z几个VXD服务.管有头文g,但是却没有文?q里告诉大家一个诀H?很多服务和NT下ZwXXX例程h相同的参?乃是VXD版的ZwXXX.
例如NtKernCreateFile是ZwCreateFile的翻?它也h11个参?
下面是NTKERN.VXD的VXD服务列表.
NTKERN_Service _NTKERN_Get_Version, LOCAL
NTKERN_StdCall_Service _NtKernCreateFile, 11, VxD_CODE
NTKERN_StdCall_Service _NtKernClose, 1, VxD_CODE
NTKERN_StdCall_Service _NtKernReadFile, 9, VxD_CODE
NTKERN_StdCall_Service _NtKernWriteFile, 9, VxD_CODE
NTKERN_StdCall_Service _NtKernDeviceIoControl, 10, VxD_CODE
NTKERN_Service _NtKernGetWorkerThread, VxD_CODE
NTKERN_StdCall_Service _NtKernLoadDriver, 1, VxD_CODE
NTKERN_StdCall_Service _NtKernQueueWorkItem, 2, VxD_CODE
NTKERN_Service _NtKernPhysicalDeviceObjectToDevNode, VxD_CODE
NTKERN_StdCall_Service _NtKernSetPhysicalCacheTypeRange, 4, VxD_CODE
NTKERN_Service _NtKernWin9XLoadDriver, VxD_CODE
NTKERN_StdCall_Service _NtKernCancelIoFile, 2, VxD_CODE
NTKERN_Service _NtKernGetVPICDHandleFromInterruptObj, VXD_CODE
NTKERN_StdCall_Service _NtKernInternalDeviceIoControl, 10, VxD_CODE
?
q服务里,部分是未公开?如果大家参悟透了,NT下也有很多东西可q刃而解.我想,文gIO应该没什么问?但是其他东西难搞了.在这?我在|络?
仅看C_NtKernLoadDriver的接?他和ZwLoadDriverh相同的参?用来从VXD加蝲KMD.(ZwLoadDriver
本n又是个未公开的函?具体接口如下:
NTSTATUS __stdcall ZwLoadDriver( PUNICODE_STRING ServiceKeyPath ).