流微型驱动开发指南(一)

流Mini驱动开发(译自Microsoft DDK) 本节详细讨论了已经过时的Stream.sys Class Driver。随着Microsoft Windows XP的正式发布,Microsoft建议硬件制造商考虑使用下一代Class模型——AVStream——来开发新的,非音频多媒体驱动程序。相关细节可参看《AVStream Overview》一章。Microsoft现在只对Stream.sys提供基本的支持。如果你要开发一个音频Minidri 阅读详情

流微型驱动开发指南

——翻译:codewarrior@HS5@HS5

注意:本节详述了已经过时的Stream.sys类驱动。随着Microsoft Windows XP的正式发布,Microsoft建议硬件制造商考虑使用下一代Class模型——AVStream——来开发新的,非音频多媒体驱动程序。相关细节可参看《AVStream Overview》一章。Microsoft现在只对Stream.sys提供基本的支持。如果你要开发一个音频Minidriver,请参看《Audio Miniport Drivers》一章。

很多种设备都通过提供流式Minidriver来得到(操作系统的)支持。尤其是视频捕捉设备,譬如数码相机和DVD播放机,它们都是通过提供流式Minidriver来获得支持的,类似的还有外部音频设备。更多介绍可参考《Video Capture Minidriver Design Guide》和《Vendor-Supplied DVD Drivers》。

流Minidriver支持内核流。在此我假定本文的读者已经熟悉了内核流的相关基本概念。如果你不明白,请先阅读《Kernel Streaming Overview》

设计Stream Class Driver的目的,就是通过处理许多和操作系统进行交互的细节,来使流式设备驱动的开发更加简单。

Minidriver让Stream Class Driver代表它处理同步问题。举个例子,Stream Class Driver可以为Minidriver随意地串行化I/O请求。通过让Class Driver为它处理同步问题,Minidriver可以做到多处理器平台安全,但是代码却是不可重入的。这样很适合后端(low-end)到中端(medium-end)的硬件。

Class Driver会自动对文件操作进行同步。例如,通过互斥体(Mutex)、信号量(Semaphores)或者事件(Event),打开流和打开设备的操作可以被正确地串行化,无需Minidriver的参与。

Class Driver从Minidriver中抽象了内核流的具体实现细节。

Class Driver处理所有和PnP管理器之间的交互动作。例如:

Class Driver代表Minidriver创建功能性设备对象(Functional device object)。

Class Driver管理资源设置(如翻译端口地址,翻译并映射内存范围,连接中断)

Class Driver处理PnP IRP包。比如IRP_MN_START_DEVICE, or IRP_MN_STOP_DEVICE。

所有的低级缓冲区管理也是由Class Driver完成的。

如果必要的话,分配DMA适配器对象。

映射缓冲区,并为DMA创建scatter/gather列表。

为DMA和PIO正确锁定并回写(Locking and flushing)缓冲区

所有的IO控制码的正确性验证也是由Class Driver完成的。

Class Driver通过看门狗定时器为所有的请求打上时间戳。

Minidriver自己并不创建设备对象,它在必要的时候可以分享Class Driver的设备对象。这样可以节约对系统资源占用。

每个适配器只创建一个设备对象。而适配器所支持的Mulitiple SubDevice(称为流,Stream)则用WDM Streaming Pins来描述。

一、Class Driver 和 Minidriver 的定义

 

Class Driver是由微软提供的一种中间驱动(或称媒介驱动),用来在硬件厂商提供的Minidriver和操作系统之间提供一个简单的接口。Minidriver是一个硬件相关的DLL,它通过函数调用的方式,使用微软提供的Class Driver来完成大部分动作,它只提供和设备紧密相关的控制。

在WDM模型中,Minidriver向Class Driver注册所有和它相关联的硬件适配器(Hardware Adapter),然后Class Driver会创建一个文件对象(File Object)来描述向它注册的每个适配器。Minidriver使用Class Driver的设备对象(Device Object)来进行系统调用。用户态的客户代码可通过WDM流(WDM Streaming)访问Class Driver。

Class Driver和Minidriver之间的交互包括:

·   Minidriver并不创建它自己的设备对象(Device Object),而是在必要的时候共享Class Driver的设备对象,这样可以节约系统资源。

·  每个适配器(Adapter)只能创建一个设备对象。而适配器所支持的Mulitiple SubDevice(称为流,Stream)则用WDM Streaming Pins来描述。

流微型驱动开发指南(六) 六、Minidriver的控制流程 下面要介绍的这几步,一般都和Minidriver的初始化、调用和卸载密切相关。将要用到的命令和结构在DDK的其他章节均有详细描述。 Minidriver的初始化、调用和卸载的步骤如下: 1.PnP管理器枚举到Minidriver所支持的硬件适配器插入,然后PnP管理器通过检查注册表去解析所有相关的符号引用,并向I/O子系统发送请求。 2.I/O子系统加载Mini 阅读详情

相关推荐

流微型驱动开发指南(五)

PORT_CONFIGURATION_INFORMATION各成员解释如下:·SizeOfThisPacket  设定本结构的大小,由Class Driver负责填写该域。·HwDeviceExtension  指向Minidriver的设备扩展结构(Device Extension)的指针。Minidriver会藉此buffer记录一些对Minidriver来说是公有的,但是对外是私有的信息。此

人是会思考的一棵苇草 1913

AVStream ddk 翻译

1.       AVStream概览 AVStream是一款微软提供的多媒体类驱动程序,它既支持单独的视频流媒体,也支持音频视频集成的流媒体。微软把AVStream作为操作系统的一部分,在驱动程序ks.sys中导出。硬件供应商只需要编写运行在Ks.sys下层的小驱动程序(minidriver)。 以前的音频类驱动程序是微软提供的音频端口驱动程序(audio port class driver

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 1540

Digispark(ATTINY85) 微型开发板驱动安装与开发环境配置教程

Digispark(ATTINY85) 微型开发板驱动安装与开发环境配置教程 文章目录Digispark(ATTINY85) 微型开发板驱动安装与开发环境配置教程参考链接:前言:配置步骤: 参考链接: Digispark(ATTINY85) 微型开发板驱动安装与开发环境配置教程 前言: 说到Digispark(ATTINY85) 微型开发板,我是真滴有很多槽要吐,由于我买来之后一直放着它在吃灰,淘宝的链接都快失效了。 好不容易找到了一个没失效的链接,下载了对应的软硬件驱动,发现插入之后,端口一直无法读取。

hehedadaq的博客 4383

AVstream驱动学习

Step 1: Learn about Windows architecture and drivers AVStream: AVStream is a Microsoft-provided multimedia class driver that supportsvideo-only streaming and integrated audio/video streaming. Micros

RobinXiangZhi的专栏 4918

VirtualCameraDriver:使用AVStream minidriver的Windows虚拟相机驱动程序

VirtualCameraDriver Windows虚拟摄像机驱动程序,使用AVStream迷你驱动程序。 这个项目对我自己是一个挑战。 我想为Windows创建一个虚拟相机驱动程序。 该项目包括两个部分: Windows驱动程序和可以将帧推送到驱动程序的用户模式应用程序。 司机 该驱动程序基于Microsoft的avshws驱动程序示例。 在此驱动程序中实现的筛选器由一个接受缓冲区(1280x720,RGB)的自定义属性扩展,然后将该缓冲区复制到输出缓冲区。 属性集的GUID : {CB043957-7B35-456E-9B61-5513930F4D8E} 物业编号: 0 可以使用DirectShow来访问此属性。 驱动程序安装: 构建驱动程序(需要Windows SDK和Windows驱动程序工具包)后,可以使用hdwwiz.exe (可以在CMD中启动)安装inf。

驱动开发 ddk 帮助文档

开发WINDOWS下的驱动程序,我们需要一个DDK/WDK,给出一个驱动开发帮助文档 Windows DDK中译版.chm

硬件设备接入Filter Graph

包装Filter    所有DirectShow Filter都是用户模式的软件组件。为了使内核模式硬件设备(如视频采集卡)接入DirectShow Filter Graph,设备必须为用户模式Filter。这些Filter包括音频捕捉Filter、VFW捕捉Filter、电视调谐器Filter、电视音频Filter和模拟视频交叉开关Filter。DirectShow还提供名为KsProxy的F...

冷月醉雪的博客 373

window ddk 开发文档中文版(第一、二卷)

window ddk 开发文档中文版,目前只有前面的两卷

window 显示驱动开发-微型端口程序的初始化(一)

DriverEntry 分配 DRIVER_INITIALIZATION_DATA 结构,并使用DXGKDDI_INTERFACE_VERSION填充 DRIVER_INITIALIZATION_DATA 的 Version 成员,并使用指向显示微型端口驱动程序的其他入口点函数 ((即显示微型端口驱动程序实现的函数) )的指针填充DRIVER_INITIALIZATION_DATA的其余成员。用户模式显示驱动程序调用运行时提供的回调函数来访问显示微型端口驱动程序中的内核模式服务。

王马的博客 1330

DDK的中文帮助文档

称它为“驱动程序超级宝典“一点也不过分,因为它是被译为中文的MSDN DDK文档。这个文档不是我翻译的,我只不过将它编辑了一下。翻译它的同志是个高手

ddk中文文档

DDK中文版文档,英语不好的可以尝试

流微型驱动开发指南(三)

三、开始着手编写Stream Minidriver设计Stream Class Driver的主要目标,就是处理两个工作,一是处理操作系统,操作系统包含了对复杂的对多处理器的支持,二就是对内核流进行支持。这样Minidriver只需要对它必须执行的,与设备相关的操作进行处理即可。Class Driver为Minidriver分配内存空间,对Minidriver可能用到的NT内核资源进行登记,并(随

人是会思考的一棵苇草 1504

windows ddk doc 中文版win驱动开发文档

win2k ddk doc 中文版win驱动开发文档

微型驱动程序、微型端口驱动程序和驱动程序对

微型驱动程序或微型端口驱动程序可以用作半个驱动程序对。诸如(微型端口、端口)的驱动程序对可以简化驱动程序开发。在驱动程序对中,一个驱动程序处理整个设备集合共同的常规任务,而另一个驱动程序处理特定于单个设备的任务。处理设备特定任务的驱动程序有多个名称,包括微型端口驱动程序、微型类驱动程序和微型驱动程序。 Microsoft 提供一般驱动程序,而独立的硬件供应商通常提供特定驱动程序。在阅读本主题之前

求索 1446

Java实战:用Proj4j搞定WGS84与CGCS2000坐标互转(附完整代码)

本文详细介绍了如何使用Java库Proj4j实现WGS84与CGCS2000坐标系之间的高精度转换。通过七参数转换模型和格网改正量文件,提供完整的代码实现和项目配置指南,帮助开发者快速集成到地理信息系统项目中,提升坐标转换效率和精度。

weixin_29251567的博客 829

Docker新手必看:解决‘Unable to find image’错误的完整指南

本文针对Docker新手常见的‘Unable to find image’错误,提供了完整的排查与解决指南。文章深入剖析了权限不足、网络连接失败、Docker服务未运行等核心原因,并给出了将用户加入docker组、配置镜像加速器等实用解决方案,帮助读者彻底理解并解决镜像拉取问题。

weixin_29230901的博客 244

流微型驱动开发指南(二)

二、Stream Class和 Minidriver之间的接口流类接口(Stream Class Interface)主要由介于Class Driver和Minidriver之间的一系列的函数调用组成。Class Driver对请求的流程(Request Flow)进行控制,当有必要对适配器硬件进行存取时,它就调用适配器的Minidriver。Class Driver还负责对多处理器和中断同步作出

人是会思考的一棵苇草 1993

斯坦福大学CS224d基础1:线性代数知识

本文为斯坦福CS229的内容,也是CS224d课程的背景数学知识。概括了在机器学习和深度学习中用到的大部分线性代数知识。为了便于大家查漏补缺,这里根据英文版本整理了一个中文版本。

龙心尘 2万+

两种微型水泵介绍——微型电磁泵和微型隔膜泵

微型水泵:组成形式为电机+泵体,且泵体上有一进一出两个接口,水从入水口进,排水口出。凡是采用这种形式,且体积小巧、袖珍的水泵,都叫微型水泵。微型水泵的作用就是抽水,在各种电器具中得到非常广泛的应用。 下面介绍两种常用的微型水泵——微型电磁泵、微型隔膜泵。 电磁泵的工作原理 电磁泵是一种电磁驱动的柱塞泵,是一种高压微型泵;其特点为:结构紧凑、输出压力高、无泄漏、体积小、动态调节特性好、输出流量较小等。 等电磁线圈通电后,滑杆在电磁场力作用向右运动,密封仓容积增大,压力小于进口气压时,液体流入密封仓。

tuxinbang1989的博客 1万+

Sigrity System Explorer Transient Analysis模式进行瞬态仿真分析操作指导-单端信号-串联端接

Sigrity System Explorer Transient Analysis模式可以用于瞬态仿真分析,通过搭建简易拓扑用于前仿真分析通道的时域性能,下面搭建一个简易的单端拓扑并且进行串联端接,以下图为例,准备好发送接收端的IBIS模型, (se_example.ibs,本例发送接收端都使用相同的IBIS模型),以及传输线的S参数模型(W1_welement_se.sp)最上方的图形界面是传输线的模型,本例是一个上下都有参考平面的带状线,右侧的梯形是蚀刻角度,根据W1和W2以及铜厚来确定。

weixin_54787054的博客 339

C#实现OPC客户端与S7-1200 PLC通信:工控场景稳定通信的实战指南(附完整代码)

标准化优先:OPC UA是工业通信的标准,相比直接通信,更适合多设备集成的工控场景;稳定性第一:必须封装断线重连、异常处理、资源释放逻辑,满足7×24小时运行需求;效率优化:高频采集场景优先用批量读写,避免单个变量频繁请求;细节把控:节点ID、变量类型、端口配置等细节是新手最容易踩坑的地方,建议先用UA Expert验证。这套代码和方案已在多个工业项目中落地,从单台S7-1200到多台S7-1200/1500集群,都能稳定运行。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1039

Windows 显示驱动开发-微型端口的DriverEntry 函数

在 DriverEntry 返回后,DRIVER_INITIALIZATION_DATA 结构不需要保留在内存中。DriverEntry 应可分页。

王马的博客 860

大厂硬件笔试机试题ASIC设计方向-卷3

本文提供了30道硬件工程师机试题目,涵盖数字逻辑、模拟电路、CMOS和信号处理等核心领域。选择题和判断题均配有详细解析,重点考察Verilog编程、CMOS特性、触发器设计、采样定理等知识点。题目难度适中但覆盖面广,如Verilog中阻塞/非阻塞赋值的区别、CMOS静态功耗来源、Nyquist采样定理、通用逻辑门判断等。备考建议强调掌握逻辑门设计、Verilog时序电路编写和CMOS特性理解。这些题目反映了华为等大厂硬件机试的典型考查内容,通过系统复习可有效提升机试成绩,为后续面试奠定基础。

启芯硬件的博客 545
上一篇: 流微型驱动开发指南(五)
下一篇: 流微型驱动开发指南(二)
会思考的草
博客等级 码龄25年 208粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值