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

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

p五、Minidriver的初始化过程

当操作系统初次初始化Stream Class Minidrivers的时候会调用Minidriver的DriverEntry例程。Minidriver必须调用StreamClassRegisterMinidriver向Class Driver注册它自己。关于Stream Class Minidrivers的DriverEntry例程,请见第六部分。

在Minidriver调用StreamClassRegisterMinidriver函数向Class Driver进行注册时,它会传递一个HW_INITIALIZATION_DATA结构,此结构会提供给Class Driver一些基本的信息,Class Driver通过这些信息来初始化Minidriver。这些信息包括,设备范围的回调函数(device-wide callbacks),StrMiniReceiveDevicePacket,StrMiniCancelPacket,StrMiniRequestTimeout和StrMiniInterrupt。

HW_INITIALIZATION_DATA定义如下:

typedef struct HW_INITIALIZATION_DATA

{

    ULONG  HwInitializationDataSize;

    PHW_INTERRUPT  HwInterrupt;

    PHW_RECEIVE_DEVICE_SRB  HwReceivePacket;

    PHW_CANCEL_SRB  HwCancelPacket;

    PHW_REQUEST_TIMEOUT_HANDLER  HwRequestTimeoutHandler;

    ULONG  DeviceExtensionSize;

    ULONG  PerRequestExtensionSize;

    ULONG  PerStreamExtensionSize;

    ULONG  FilterInstanceExtensionSize;

    BOOLEAN  BusMasterDMA;

    BOOLEAN  Dma24BitAddresses;

    ULONG  BufferAlignment;

    BOOLEAN  TurnOffSynchronization;

    ULONG  DmaBufferSize;

    ULONG  Reserved[2];

} HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;

下面我详细解释该结构中各个成员的意义。

下面我详细解释该结构中各个成员的意义。

·HwInitializationDataSize

说明本结构的大小,以字节计。

·HwInterrupt

函数指针,指向Minidriver的StrMiniInterrupt例程。

·HwReceivePacket

函数指针,指向Minidriver的StrMiniReceiveDevicePacket例程。

·HwCancelPacket

函数指针,指向Minidriver的StrMiniCancelPacket例程。

·HwRequestTimeoutHandler

函数指针,指向Minidriver的StrMiniRequestTimeout例程。

·DeviceExtensionSize

说明Minidriver的“设备扩展结构(Device Extension)”的大小,这样Class Driver才能知道要为它分配多大的buffer空间。Minidriver可以利用此空间来记录,那些对Minidriver来说是公有的,但是对外是私有的信息。Class Driver会把该buffer的起始指针分别存放到结构HW_STREAM_OBJECT,HW_STREAM_REQUEST_BLOCK,HW_TIME_CONTEXT,和 PORT_CONFIGURATION_INFORMATION的成员HwDeviceExtension中,然后再把这些结构传递给Minidriver,这样Minidriver就知道Class Driver为它分配的buffer在哪了。

·PerRequestExtensionSize

在Class Driver传递给Minidriver的结构HW_STREAM_REQUEST_BLOCK(SRB)中,其成员SRBExtension是一个指针,指向一块buffer,此buffer用来存放“流请求块扩展结构(SRB Extension)”,它由Class Driver分配,所以在开辟空间之前,Class Drive必须要知道这块空间有多大。这个大小就在这里设定。每个SRB都有一个扩展结构,所以每个SRB都会有这样的一块buffer。

·PerStreamExtensionSize

结构HW_STREAM_OBJECT的成员HwStreamExtension是一个指针,指向一块buffer,此buffer用来存放“流扩展结构(Stream Extension)”,它由Class Driver分配,所以在开辟空间之前,Class Drive必须要知道这块空间有多大。这个大小就在这里设定。每个流都有一个流扩展结构,所以每个流都有一块这样的buffer。

·FilterInstanceExtensionSize

在Class Driver传递给Minidriver的结构HW_STREAM_REQUEST_BLOCK(SRB)中,其成员HwInstanceExtension也是一个指针,指向存放“实例扩展结构(Instance Extension)”的buffer的起始地址,它照样由Class Driver分配,所以在此用FilterInstanceExtensionSize成员来设定该buffer的大小。对Minidriver的每个实例,都会有这样一个buffer。

·BusMasterDMA

若此成员置为TRUE,则设备可以对Minidriver的DMA buffer执行直接总线控制DMA(Direct bus master DMA)。

·Dma24BitAddresses

如果设备所使用的DMA硬件只支持对全部地址线(对X86来说是32位)的低24位进行访问,那么Minidriver应该置此变量为TURE;

·BufferAlignment

设定DMA缓冲区的对齐要求,譬如,当值为4时标识DMA缓冲区要求按4字节边界对齐。

·TurnOffSynchronization

如果本成员设为TURE,那么Minidriver会处理它自己的同步;否则Class Driver将会进行同步处理。绝大多数Minidriver应该置此成员为FALSE,更多请参见Minidriver Synchronization(第十二部分)。

·DmaBufferSize

设定DMA缓冲区的大小,然后Class Driver会按大小开辟空间。Minidriver可以通过调用StreamClassGetDmaBuffer来得到此buffer的起始地址。因为这块空间是连续的、非分页内存,并且一旦分配,该空间对操作系统和其他驱动程序都不再可用,所以应该将其大小设定的尽可能小。

·Reserved[2]

系统保留,Minidriver应该忽略此成员。

注册完毕后,Class Driver会使用StrMiniReceiveDevicePacket来通知Minidriver初始化设备。它会向Minidriver发送SRB_INITIALIZE_DEVICE请求,并传递一个PORT_CONFIGURATION_INFORMATION结构(在SRB中含有一个指向该结构的指针),其中包含了必要的硬件信息。当该请求被处理完毕后,Minidriver会告诉Class Driver关于结构体HW_STREAM_DESCRIPTOR的大小(以字节计),待会它将用此结构来描述所有它的流。PORT_CONFIGURATION_INFORMATION和HW_STREAM_DESCRIPTOR的结构定义如下:

typedef struct _PORT_CONFIGURATION_INFORMATION

{

    ULONG  SizeOfThisPacket;

    PVOID  HwDeviceExtension;

    PDEVICE_OBJECT  ClassDeviceObject;

    PDEVICE_OBJECT  PhysicalDeviceObject;

    ULONG  SystemIoBusNumber;

    INTERFACE_TYPE  AdapterInterfaceType;

    ULONG  BusInterruptLevel;

    ULONG  BusInterruptVector;

    KINTERRUPT_MODE  InterruptMode;

    ULONG  DmaChannel;

    ULONG  NumberOfAccessRanges;

    PACCESS_RANGE  AccessRanges;

    ULONG  StreamDescriptorSize;

    PIRP  Irp;

    PKINTERRUPT  InterruptObject;

    PADAPTER_OBJECT  DmaAdapterObject;

    PDEVICE_OBJECT  RealPhysicalDeviceObject;

    ULONG  Reserved[1];

}PORT_CONFIGURATION_INFORMATION, PPORT_CONFIGURATION_INFORMATION;

Windows摄像头驱动研究(一) Windows 驱动基础系列,转载请标明出处:http://blog.youkuaiyun.com/ikerpeng/article/details/38865317 摄像头驱动的主要目的是通过通过硬件捕捉视频信号。 WDM摄像头驱动框架。 主要包括两种的驱动ClassDriver(由Windows提供,为了统一标准), MiniDriver(由程序员实现) Class Dri 阅读详情

相关推荐

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

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

人是会思考的一棵苇草 1529

ClassDriver和MiniDriver的区别

驱动划分为两类ClassDriver和MiniDriver两类 1、ClassDriver 作者:微软。作用:提供设备类的共有属性服务,由微软编写,服务在抽象层。 2、MiniDriver作者:厂商。作用:由于各个设备之间的指令交换不同,微软只提供设备接口,设备交换具体实现由厂商处理,厂商写的这部分称为MiniDirver。比如扫描仪的WIA MiniDriver、打印机的MiniDriver

3244

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

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

hehedadaq的博客 4383

关于迷你驱动(Mini driver)

概念 微软WDM驱动程式架构的微驱动程式(mini driver)

XXX的专栏 2177

MiniFly微型四轴学习与开发日志(一)

文章目录注意事项技术参数遥控器操作说明调试界面遥控器设置遥控器开发环境配置 注意事项 遥控器充电时开关需打到 OFF 处,否则充不了电; 新手在室内飞行时强烈建议使用默认设置下飞行,室外飞行强烈建议设置飞行速度为 中速模式(中速、高速模式抗风能力强),因为室外风大,四轴抵抗不了; 蜂鸣器连续报警说明遥控器或者四轴电量低,请为四轴或者遥控器充电; 默认设置为定高、无头、低速、翻滚禁能。 技术参数 “X” 型 KEY_J1:一键起飞、一键降落; KEY_L:紧急停机; KEY_R:4D 翻滚、查看

AlexiosQ的博客 8361

KMDF HID Minidriver for Touch I2C Device

KMDF HID Minidriver for Touch I2C Device 电脑触屏文件

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

流微型驱动开发指南——翻译:codewarrior@HS5@HS5注意:本节详述了已经过时的Stream.sys类驱动。随着Microsoft Windows XP的正式发布,Microsoft建议硬件制造商考虑使用下一代Class模型——AVStream——来开发新的,非音频多媒体驱动程序。相关细节可参看《AVStream Overview》一章。Microsoft现在只对Stream.

人是会思考的一棵苇草 2251

平板电脑驱动driver.rar

内包含KMDF HID Minidriver for Touch I2C Device触摸屏驱动以及其他一些触摸驱动和硬件驱动,平板电脑刷机后触摸失效可尝试。本人一港产小众平板尝试有效。内含多种触摸驱动,需下载一一尝试,找到合适自己平板型号的驱动。

MiniFly微型四轴开发学习日志(一)——MiniFly 微型四轴软件原理

MiniFly微型四轴开发学习日志(一)——MiniFly 微型四轴软件原理 文章目录 微型四轴技术参数 NRF51822 程序框架 STM32F411 程序框架 姿态解算和 PID 算法总体流程 微型四轴技术参数 Minifly微型四轴采用双MCU,即STM32F411与NRF51822双核运行,其技术参数如下。 NRF51822 程序框架 如图为NRF51822的代码关系图 。其中button.c为按键驱动代码,uart.c为串口...

watchingdog的博客 3498

台电X5Pro触摸屏驱动

KMDF HID Minidriver for Touch I2C Device Driver,MSSL1680

minidriver源码

minidriver的源代码 实现了minidriver的基本功能

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

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

王马的博客 1330

调试touch驱动遇到的常见的几个问题以及解决方法

在调试touch驱动时我们经产会碰到唤醒机台后touch不好使等现象,本文正是针对这些bugs进行了详细的分析以及总结

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

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

人是会思考的一棵苇草 1504

hid-over-i2c-protocol-spec-v1-0

触摸屏IIC接口转usb必用,微软的官方文件

SARScape实战:集成GACOS数据优化InSAR大气校正全流程

本文详细介绍了如何在SARScape软件中集成GACOS数据,以优化InSAR大气校正的全流程。通过实战步骤,从GACOS数据申请、下载、导入,到在单景干涉图和SBAS-InSAR流程中应用,有效剥离大气相位延迟,显著提升形变监测结果的精度与可靠性,实现从“雾里看花”到“拨云见日”的转变。

weixin_28419039的博客 402

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

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

求索 1446

nRF52840开发环境搭建:从零开始配置Keil与SDK

本文详细介绍了nRF52840开发环境搭建的全过程,包括硬件准备、Keil MDK与nRF5 SDK的安装配置、常见问题解决方案及蓝牙功能开发进阶。特别强调了J-Link调试器的使用和SDK版本匹配的重要性,帮助开发者快速上手nRF52840开发。

weixin_29176179的博客 885

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

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

人是会思考的一棵苇草 1993

WinCC与施耐德PLC的Modbus TCP通信实战指南

本文详细解析了西门子WinCC与施耐德PLC通过Modbus TCP协议实现通信的完整实战流程。内容涵盖硬件网络配置、Modbus地址映射核心规则、WinCC驱动连接建立、变量创建及高级数据访问技巧,并提供了常见故障排查思路,帮助工程师高效解决跨品牌设备通信难题。

weixin_29194693的博客 1003

关于基于Midas Civil API的二次开发——PyMiMi

现在写了第一条博客,希望是一个好的开始,能够每天抽出一两个小时或者更多的时间来写写代码,研究研究。我发现在我的工作中存在着大量的重复性工作,对于文档的开发是好办的,毕竟网上有现成库,只需要pip一下拿来用就好,但是对于Midas而言,在24版本之前官方都是没有一个可以使用的接口的,可能mct文件算半个?

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值