windows xp 驱动开发(三)DDK与WDK WDM的区别

2023-10-31

转自: http://www.cnblogs.com/hyddd/archive/2009/03/15/1412684.html 

最近尝试去了解WINDOWS下的驱动开发,现在总结一下最近看到的资料。

  1.首先,先从基础的东西说起,开发WINDOWS下的驱动程序,需要一个专门的开发包,如:开发JAVA程序,我们可能需要一个JDK,开发WINDOWS应用程序,我们需要WINDOWS的SDK,现在开发WINDOWS下的驱动程序,我们需要一个DDK/WDK。

  2.DDK(Driver Developer Kit)和WDK(Windows Driver Kit)的区别:

  这个要说说驱动相关的一些历史:

  1).95/98/ME下,驱动模型为:Vxd,相关资料可以看《编程高手箴言》的前几个章节,里面有很详细的介绍,虽然这个东西已经过时,但大概看看还是会增长见识的。

  2).2000/XP/2003下,Windows采用WDM驱动模型(Windows Driver Model),开发2000/XP/2003的驱动开发包为:DDK。

            WDM驱动无非是微软在NT式驱动之上进行了扩充,过滤驱动也不例外 。

  3).Vista及以后版本,采用了WDF驱动模型(Windows Driver Foudation),对应的开发包:WDK。

其实WDK可以看做是DDK的升级版本,现在一般的WDK是包含以前DDK相关的功能,现在XP下也可以用WDK开发驱动,WDK能编译出2000-2008的各种驱动。

  3.Vxd驱动文件扩展名为:.vxd。

     WDM和WDF驱动文件扩展名为:.sys。

        4、WDM 是 Win32设备驱动程序体系结构。

            Windows设备驱动程序,过去是WDM(Windows Driver Model)框架,编程复杂,初学者难以掌握其编程要领。为了解决这一问题,微软对WDM驱动程序的架构做了改进,形成了全新的WDF(Windows Driver Foundation)框架结构。它提供了面向对象和事件驱动的驱动程序开发框架,大大降低了开发难度。从现在开始,掌握Windows设备驱动程序的开发人员,由过去的“专业”人士,将变为“普通”大众。
 WDF驱动程序包括两个类型,一个是内核级的,称为KMDF(Kernel-Mode Driver Framework),为SYS文件;另一个是用户级的,称为UMDF(User-Mode Driver Framework),为DLL文件。

5、

ddk 和wdk

ddk是基于wdm驱动模型的,而wdk是基于WDF驱动模型的,wdm驱动模型和wdf驱动模型的最大的区别是:

1)wdf驱动框架对WDM进行了一次封装,WDF框架就好像C++中的基类一样,且这个基类中的model,IO model ,pnp和电源管理模型;且提供了一些与操作系统相关的处理函数,这些函数好像C++中的虚函数一样,WDF驱动中能够对这些函数进行override;特别是Pnp管理和电源管理!基本上都由WDF框架做了,而WDF的功能驱动几乎不要对它进行特殊的处理;

2)WDF驱动模型 与WDM驱动模型的另外一个主要区别是:

WDF 驱动采用队列进行IO处理,而WDM中将所有的IO操作都用默认的队列进行处理,如果要进行IRp同步,必须使用StartIO

3)WDF是面向对象的,而WDM是面向过程的,WDF提供对象的封装,如将IRP封装成WDFREQUEST,对象提供方法和Event。

5)usb设备的读写;

当应用程序使用ReadFile或WriteFile进行读写时,首先将

UsbBuildInterruptOrBulkTransferRequest将构建urb请求,然后通过IoCallDriver发送给底层usb 总线驱动;

对于WDF来说,WdfUsbTargetPipeFormatRequestForRead 格式化读请求,然后使用WdfRequestSend  发送给底层Usb总线驱动;

对WDM和WDF的usb的读写都可以设置完成例程;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

windows xp 驱动开发(三)DDK与WDK WDM的区别 的相关文章

  • 零部署 CouchDB 嵌入 Windows 应用程序?

    我可能在这里做梦 但我想知道是否有可能将最小的 CouchDB 引擎完全嵌入到 Windows 应用程序中 以便该应用程序可以运行而无需在用户计算机上安装 CouchDB Erlang 我已经提供了这种精简 捆绑的功能 请在此处查看http
  • 我应该为 Windows 选择 ActivePerl 还是 Strawberry Perl? [复制]

    这个问题在这里已经有答案了 我对 Perl 完全陌生 但我想尝试一下 我读到了有关 Windows 平台的两个竞争对手的发行版 我猜有just其他操作系统上的 Perl 维基百科 http en wikipedia org wiki Per
  • Delphi XE 和使用 OnKeyDown 捕获箭头键

    我希望我的表单能够处理箭头键 而且我可以做到 只要表单上没有按钮 为什么是这样 关键消息由接收这些消息的控件本身进行处理 这就是为什么当您使用按钮时表单不会接收消息 因此 通常您必须对这些控件进行子类化 但 VCL 足够友好地询问父子表单如
  • 在 Windows 上通过 pip 使用 fastmath(gmp 或 mpir)构建 PyCrypto

    我通过 pip 在 Windows 上安装了 PyCrypto 但无法构建 Crypto PublicKey fastmath 因为找不到 GMP 我知道有一个二进制版本虚空 http www voidspace org uk python
  • 在 Win 10 中调试卸载 DLL 时发生崩溃,但在 Win 7 中则不然

    不完全确定我已经解决了这个问题 但这就是我所看到的和我所看到的think正在进行 我有一个主要用 C 编写的 Win32 程序 用于加载 C DLL 该 DLL 通过 COM 对象 可能由 DLL 本身实例化的对象 将数据从 C 程序传递到
  • 如何模拟客户端和服务器之间的套接字断开连接(在 Windows 上)?

    我已经实现了一种 心跳解决方案 我想看看在实际情况下网络 故障 时会发生什么 特别是当套接字上没有流量时发生这种情况 问题 我只有一台电脑 我在windows java上 我想简单地拔掉网线 停用网卡不会影响这两个进程 因为它们在同一个盒子
  • 适用于 Windows 的二进制 python 包(模块)的无人值守安装

    是否没有合理的方法来执行 Windows 二进制 python 包的脚本安装 不幸的是 似乎几个基本的 Windows python 软件包 如 pywin32 和 py2exe 只能以 EXE 形式提供 而不是以 MSI 形式提供 据我所
  • DirectX 11 ClearRenderTargetView 恢复透明缓冲区?

    我正在尝试创建一个使用 directx 进行绘制的窗口opaque上面的内容透明的视图 即桌面显示出来 使用 DirectX11 我尝试执行以下操作 但它并没有使背景透明 事实上 我输入的任何不透明度值都会给出完全相同的结果 我在做什么 f
  • 如何将参数传递给 DLL 初始化(例如,通过 LoadLibrary 加载时)?

    如何将参数传递给通过 LoadLibrary 加载的 DLL 的初始化函数 有可能吗 也就是说 无需求助于某种导出函数或共享内存 没有直接的方法 最简单的可能是通过环境变量 它们可以在调用之前轻松设置LoadLibray with sete
  • 批处理文件随机删除文本文件的一半行?

    我需要一种方法来使用批处理来查看文本文件的每一行 并删除该文本文件中的一半行 随机选择要删除的行 这是为了模拟 D D 游戏中的锦标赛 我所需要的只是一种方法来淘汰每轮比赛的获胜者 我可以轻松地制作一个批处理文件 复制文本文件并为每一轮重命
  • 应用程序日志保存在哪里? [复制]

    这个问题在这里已经有答案了 可能的重复 Windows 上应用程序日志文件的存储位置 https stackoverflow com questions 1572934 where to store an application log f
  • Powershell添加系统变量

    我正在尝试使用 PowerShell 在此处添加系统变量 我已经尝试过两种方式使用 env MyTestVariable My test variable and Environment SetEnvironmentVariable Tes
  • Python - PIP 安装故障排除 - PermissionError: [WinError 5] 访问被拒绝

    使用 PIP 安装新软件包甚至将 pip 本身升级到最新版本时出现以下错误 我正在 Windows 8 1 机器上使用 Python 3 4 运行 pip 该消息告诉我我没有文件的管理权限 我的帐户是管理员帐户 我很感激任何关于如何解决这个
  • SQL Server 的 mysqldump 等效项

    SQL Server 是否有与 MySQL 具有 mysqldump 等效的模式和数据导出 转储工具 试图重新定位旧的 ASP 站点 但我对在 Windows 服务器上工作感到很不高兴 注意 DTS 导出实用程序自己似乎可以导出数据 而无需
  • C# Winforms 不规则的 Windows [重复]

    这个问题在这里已经有答案了 如何使用 WinForms 和 C 创建不规则形状的窗口 有几种不同的方法可以实现这一目标 一是用用TransparencyKey 正如尼夫勒在帖子中指出的那样 另一种是分配一个Region http msdn
  • 自定义 Windows 7 登录 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我如何为 Windows 7 登录屏幕进行编程 不仅仅是替换背景图像 就像我希望它通过 RFID 阅读器进行身份验证一样 我能做到吗 我知道 XP 可
  • Python:当键盘中断被转发到多处理子进程时?

    我在 Windows 上执行了以下测试代码 import multiprocessing import time def child while True time sleep 2 if name main multiprocessing
  • Java更改系统换行符

    在 Windows 上 使用System out println 打印出来 n r而在 Unix 系统上你会得到 n 有没有办法告诉java你想使用什么换行符 正如其他人已经说过的 系统属性line separator包含实际的行分隔符 奇
  • NodeJS 连接到 SQL Server getaddrinfo ENOTFOUNT

    我正在尝试使用 Knex js 连接到 Microsoft SQL Server 但收到 getaddrinfo ENOTFOUND 我知道这表明 NodeJS 无法解析地址 通常是通过 DNS 或协议问题 const knex requi
  • 无法找到模块提供者

    我在使用 PowerShell 时遇到问题 几乎就像没有完全安装一样 这很奇怪 因为它是 Windows 10 并且是附带的 在没有锁定的情况下 我尝试使用另一台正在运行的 Windows 10 计算机上的全新副本替换以下目录 C User

随机推荐

  • 禁止缩放meta标签

    转载于 https www cnblogs com LiuJL p 10977907 html
  • [1149]RabbitMQ CPU 占用过高优化

    文章目录 背景 问题排查 error logger 问题 erlang 调度器问题 总结 背景 服务器上搭建的 RabbitMQ 在并发量不是很大的情况下 CPU 占用竟然达到了 40 左右 这种情况第一感觉是不科学的 推测应该是使用不当或
  • 电脑上编辑文件打字时页面乱跳解决方法

    问题描述 在网页上编写文章 执行复制 粘贴或者换行等操作时 会出现页面滑动的情况 而光标在编辑的文案中的位置却没变 原因分析 设置了鼠标灵敏度 解决方案 步骤1 打开控制面板 步骤2 在右上方输入鼠标或点击硬件与声音 点击鼠标 步骤3 在鼠
  • 离散数学4_第5章关系与函数__关系矩阵

    关系矩阵的 定义 注意这里 m n阶的矩阵 是指m 行 n列的 矩阵 如果行 列相等 称为方阵
  • textarea 光标位置相关

    textarea cursor postion 兼容 i8 通过 本案例的对于文本域的处理以后就可以 扩展使用了 功能 本文主要的内容是介绍了 在文本域中 光标的位置获取 被选中文本的位置获取 start end 以及在光标位置插入文本 或
  • python寻找相似用户_基于用户相似性的协同过滤——Python实现

    coding utf 8 importrandom mathfrom operator importitemgetterclassUserBasedCF def init self trainDataFile None testDataFi
  • 【Unity问题&错误】list问题

    error CS0305 Using the generic type System Collections Generic List
  • ctfshow web入门 代码审计

    文章目录 web301 web302 web303 web304 web305 web306 web307 web308 web309 web310 web301 下载源码后在checklogin php发现问题代码
  • ChatGPT未来会拥有自我情感和思维吗?

    ChatGPT是一种基于人工智能的聊天机器人 它可以模拟人类的对话 并且可以回答各种问题 目前 ChatGPT已经非常先进 但是它是否会拥有自我情感和思维呢 首先 我们需要明确一点 ChatGPT是一种基于机器学习的算法 它的行为是由程序员
  • 记一次阿里巴巴电话面试题

    前几天投了阿里巴巴校招简历 今天晚上突然来了阿里的面试电话 有点紧张又有点激动 面试的问题问的挺全面 但是有些准备不足 因此回答的并不算太满意 现在整理一下分享给大家 希望进阿里的小伙伴可以来踩踩 1 自我介绍 打电话时我刚吃完饭 上来就介
  • AndroidManifest.xml作用

    今天在看到一篇博客是对于博主对于AndroidManifest xml文件的作用的理解深感赞同 AndroidManifest xml文件就是在安装的时候用来给PackageManagerService进行解析 分析出这个APK的packa
  • 【NeurIPS 2021】ViT 中增强的 Shortcut Connection:Augmented Shortcuts for Vision Transformers

    Augmented Shortcuts for Vision Transformers 论文地址 主要工作 方案简介 基本定义 具体实现 Augmented Shortcuts Efficient Implementation via Ci
  • 权限维持篇---Windows权限维持--隐藏篇

    权限维持篇 Windows权限维持 隐藏篇 文章目录 权限维持篇 Windows权限维持 隐藏篇 前言 一 隐藏文件 二 隐藏账号 三 端口复用 四 进程注入 五 结束 六 我的公众号 前言 攻击者在获取服务器权限后 通常会用一些后门来维持
  • AD 原理图网络未连上,设置DRC报错

    AD原理图整理时 碰到一个网络没有连接 但是DRC检查没有提示有异常的情况 如下图 R7H右端并没有连上 然而原理图检查居然没有问题 在导入PCB时才报错 因为原理图DRC没有报错 想要找到问题 需要蛮多时间 细思极恐 AD其实是可以设置检
  • 数据结构-顺序栈的基本操作的实现(含全部代码)

    主要操作函数如下 InitStack SqStack s 参数 顺序栈s 功能 初始化 时间复杂度O 1 Push SqStack s SElemType e 参数 顺序栈s 元素e 功能 将e入栈 时间复杂度 O 1 Pop SqStac
  • 【黑马程序员】面向对象(五) 第九天

    android培训 java培训 java学习型技术博客 期待与您交流 知识点 异常处理能够使一个方法给它的调用者抛出一个异常 异常发生在一个方法的执行过程中 RuntimeException和Error都是免检异常 其它所有异常都是必检的
  • vite --- 搭建开发环境

    目录 下载安装和初始化VSCode 安装Node js yarn 使用 pnpm 安装与使用 搭建第一个Vite项目 使用 PNPM创建项目 项目目录解读 下载安装和初始化VSCode 1 访问网站 Visual Studio Code C
  • editplus配置python环境 和 php环境

    editplus配置python环境 和 php环境 使用editplus这么久 才知道是可以配置python环境 和 php环境 想来真丢人 这就是自学的痛苦之处 许多时如果不是自己突然想到 只会永远在黑暗中摸索 editplus配置py
  • KNN与CNN

    KNN与CNN相关 KNN K Nearest Neighbor 最邻近分类算法 就是k个最近的邻居的意思 说的是每个样本都可以用它最接近的k个邻居来代表 KNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个
  • windows xp 驱动开发(三)DDK与WDK WDM的区别

    转自 http www cnblogs com hyddd archive 2009 03 15 1412684 html 最近尝试去了解WINDOWS下的驱动开发 现在总结一下最近看到的资料 1 首先 先从基础的东西说起 开发WINDOW