Minidriver的初始化过程

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

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

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

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

函数指针,指向MinidriverStrMiniInterrupt例程。

·HwReceivePacket

函数指针,指向MinidriverStrMiniReceiveDevicePacket例程。

·HwCancelPacket

函数指针,指向MinidriverStrMiniCancelPacket例程。

·HwRequestTimeoutHandler

函数指针,指向MinidriverStrMiniRequestTimeout例程。

·DeviceExtensionSize

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

·PerRequestExtensionSize

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

·BusMasterDMA

若此成员置为TRUE,则设备可以对MinidriverDMA buffer执行直接总线控制DMADirect 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_INFORMATIONHW_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.csdn.net/ikerpeng/article/details/38865317 摄像头驱动的主要目的是通过通过硬件捕捉视频信号。 WDM摄像头驱动框架。 主要包括两种的驱动ClassDriver(由Windows提供,为了统一标准), MiniDriver(由程序员实现) Class Dri 阅读详情

相关推荐

Mini驱动开发(译自Microsoft DDK)

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

epbon的专栏 3816

minidriver源码

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

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

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

人是会思考的一棵苇草 1526

hid虚拟加密狗 加密锁源代码

nox2加密狗的hid虚拟狗源代码,有详细的通讯加密解密分析和处理过程,用dsf框架

ClassDriverMiniDriver的区别

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

3238

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

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

人是会思考的一棵苇草 1519

关于迷你驱动(Mini driver)

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

XXX的专栏 2154

Minidriver初始化过程(2)

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

zijida的专栏 1582

Stream ClassMinidriver之间的接口

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

zijida的专栏 1672

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

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

人是会思考的一棵苇草 1989

Mini驱动开发指南(二)

<!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--><script type="text/javascript"

zgqtxwd的专栏 356

驱动设计流程

MiniDriver上层还有一个叫做ClassDriver的驱动。MiniDrive通过DriverEntity向ClassDriver注册它自己。这个过程是通过向ClassDriver传递HW_INITIALIZATION_DATA结构实现的。MiniDriver中的Drive

snowwood的专栏 824

勘误:HidRegisterMinidriver应在hidclass.lib而非hid.lib

参考msdn:http://msdn.microsoft.com/en-us/library/ff539835 Version Available in Windows 2000 and later versions of Windows. Header Hidport.h (include Hidport.h) Library

水木清华 2266

虚拟摄像头之DirectShow虚拟摄像头开发

by fanxiushu 2018-04-06 转载或引用请注明原始作者。之前CSDN上的博客,较多的文章阐述了虚拟摄像头的开发,而且是两种类别的。1,比如使用老的内核流框架开发WDM虚拟摄像头驱动,博客链接:https://blog.csdn.net/fanxiushu/article/d...

fanxiushu的专栏 1万+

实时性视觉语言模型MiniDrive:使用多帧图像给语言模型为自动驾驶文本标记

视觉-语言模型(VLMs)作为自动驾驶中的通用端到端模型,通过问答交互执行预测、规划和感知等子任务。然而,大多数现有方法依赖于计算开销大的视觉编码器和大型语言模型(LLMs),使其在现实场景和实时应用中难以部署。同时,大多数现有的VLMs缺乏处理多张图像的能力,难以适应自动驾驶中的多摄像头感知。为了解决这些问题,我们提出了一个名为MiniDrive的全新框架,该框架结合了我们提出的特征工程专家混合(FE-MoE)模块和动态指令适配器(DI-Adapter)。

自动驾驶实战 1322

编写stream minidriver

设计Stream Class Driver的主要目标,就是处理两个工作,一是处理操作系统,操作系统包含了对复杂的对多处理器的支持,二就是对内核流进行支持。这样Minidriver只需要对它必须执行的,与设备相关的操作进行处理即可。Class DriverMinidriver分配内存空间,对Minidriver可能用到的NT内核资源进行登记,并(随意地)处理同步问题。 Class Drive

kenn1117的博客 554

仅83M参数量!全民大模型时代来了?MiniDrive:自动驾驶的更高效视觉语言模型!

视觉语言模型(vlm)在自动驾驶中充当通用的端到端模型,通过问答交互执行预测、规划和感知等子任务。然而,大多数现有方法依赖于计算昂贵的视觉编码器和大型语言模型(LLM),使得它们难以部署在现实世界场景和实时应用中。同时,大多数现有的vlm缺乏处理多幅图像的能力,难以适应自动驾驶中的多摄像机感知。为了解决这些问题,我们提出了一个称为MiniDrive的新框架,它包含了我们提出的特征工程专家混合(FE-MoE)模块和动态指令适配器(DI-Adapter)。

计算机视觉工坊 2079
上一篇: 编写Stream Minidriver
下一篇: Minidriver的初始化过程(2)
zijida
博客等级 码龄24年 6粉丝 19原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值