﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>学习日记 &#187; drive</title>
	<atom:link href="https://www.softwareace.cn/?feed=rss2&#038;tag=drive" rel="self" type="application/rss+xml" />
	<link>https://www.softwareace.cn</link>
	<description>时刻想着为自己的产品多做一些对他好的事情</description>
	<lastBuildDate>Fri, 20 Mar 2026 06:58:28 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	
	<item>
		<title>windows xp 驱动开发(三)DDK与WDK WDM的区别</title>
		<link>https://www.softwareace.cn/?p=1125</link>
		<comments>https://www.softwareace.cn/?p=1125#comments</comments>
		<pubDate>Wed, 28 Jan 2015 01:38:46 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[drive]]></category>

		<guid isPermaLink="false">http://www.softwareace.cn/?p=1125</guid>
		<description><![CDATA[最近尝试去了解WINDOWS下的驱动开发，现在总结一下最近看到的资料。 1.首先，先从基础的东西说起，开发WI [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>最近尝试去了解WINDOWS下的驱动开发，现在总结一下最近看到的资料。</p>
<p>1.首先，先从基础的东西说起，开发WINDOWS下的驱动程序，需要一个专门的开发包，如：开发JAVA程序，我们可能需要一个JDK，开发WINDOWS应用程序，我们需要WINDOWS的SDK，现在开发WINDOWS下的驱动程序，我们需要一个DDK/WDK。</p>
<p>2.DDK（Driver Developer Kit）和WDK（Windows Driver Kit）的区别：</p>
<p>这个要说说驱动相关的一些历史:</p>
<p>1).95/98/ME下，驱动模型为：Vxd，相关资料可以看《编程高手箴言》的前几个章节，里面有很详细的介绍，虽然这个东西已经过时，但大概看看还是会增长见识的。</p>
<p>2).2000/XP/2003下，Windows采用WDM驱动模型（Windows Driver Model），开发2000/XP/2003的驱动开发包为：DDK。</p>
<p><span style="color: #990000;"> WDM驱动无非是微软在NT式驱动之上进行了扩充，过滤驱动也不例外 。</span></p>
<p>3).Vista及以后版本，采用了WDF驱动模型（Windows Driver Foudation），对应的开发包：WDK。</p>
<p>其实WDK可以看做是DDK的升级版本，现在一般的WDK是包含以前DDK相关的功能，现在XP下也可以用WDK开发驱动，WDK能编译出2000-2008的各种驱动。</p>
<p>3.Vxd驱动文件扩展名为：.vxd。</p>
<p>WDM和WDF驱动文件扩展名为：.sys。</p>
<p>4、WDM 是 Win32设备驱动程序体系结构。</p>
<p><span style="color: #990000;">Windows设备驱动程序，过去是WDM（Windows Driver Model）框架，编程复杂，初学者难以掌握其编程要领。为了解决这一问题，微软对WDM驱动程序的架构做了改进，形成了全新的WDF（Windows Driver Foundation）框架结构</span>。它提供了面向对象和事件驱动的驱动程序开发框架，大大降低了开发难度。从现在开始，掌握Windows设备驱动程序的开发人员，由过去的“专业”人士，将变为“普通”大众。<br />
WDF驱动程序包括两个类型，一个是内核级的，称为KMDF（Kernel-Mode Driver Framework），为SYS文件；另一个是用户级的，称为UMDF（User-Mode Driver Framework），为DLL文件。</p>
<p>5、</p>
<p><strong>ddk 和wdk</strong></p>
<p><span style="color: #ff0000;">ddk是基于wdm驱动模型的，而wdk是基于WDF驱动模型的</span>，wdm驱动模型和wdf驱动模型的最大的区别是：</p>
<p>1)<span style="color: #ff0000;">wdf驱动框架对WDM进行了一次封装</span>，WDF框架就好像C++中的基类一样，且这个基类中的model,IO model ,pnp和电源管理模型;且提供了一些与操作系统相关的处理函数，这些函数好像C++中的虚函数一样，WDF驱动中能够对这些函数进行override；特别是Pnp管理和电源管理！基本上都由WDF框架做了，而WDF的功能驱动几乎不要对它进行特殊的处理；</p>
<p>2)WDF驱动模型 与WDM驱动模型的另外一个主要区别是：</p>
<p>WDF 驱动采用队列进行IO处理，而WDM中将所有的IO操作都用默认的队列进行处理，如果要进行IRp同步，必须使用StartIO；</p>
<p>3)WDF是面向对象的，而WDM是面向过程的，WDF提供对象的封装，如将IRP封装成WDFREQUEST，对象提供方法和Event。</p>
<p>5）usb设备的读写；</p>
<p>当应用程序使用ReadFile或WriteFile进行读写时，首先将</p>
<p>UsbBuildInterruptOrBulkTransferRequest将构建urb请求，然后通过IoCallDriver发送给底层usb 总线驱动；</p>
<p>对于WDF来说，WdfUsbTargetPipeFormatRequestForRead 格式化读请求，然后使用WdfRequestSend  发送给底层Usb总线驱动；</p>
<p>对WDM和WDF的usb的读写都可以设置完成例程；</p>
]]></content:encoded>
			<wfw:commentRss>https://www.softwareace.cn/?feed=rss2&#038;p=1125</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
