KS-AUDIO-COM
+ -

PortClass各适配器端口驱动类继随承关系

2022-08-29 61 0

111445826255

Mini端口类驱动程序

通过PcNewPort实现:

//
  // Instantiate the port by calling a function supplied by PortCls.
  //
  PPORT    port;
  NTSTATUS ntStatus = PcNewPort(&port, PortClassId);

  if (NT_SUCCESS(ntStatus))
  {
      PUNKNOWN miniport;
      //
      // Create the miniport object.
      //
      if (MiniportCreate)   // a function to create a proprietary miniport
      {
          ntStatus = MiniportCreate(&miniport,
                                    MiniportClassId, NULL, NonPagedPool);
      }
      else   // Ask PortCls for one of its built-in miniports.
      {
          ntStatus = PcNewMiniport((PMINIPORT*)&miniport,
                                   MiniportClassId);
      }

      if (NT_SUCCESS(ntStatus))
      {
          //
          // Bind the port, miniport, and resources.
          //
          ntStatus = port->Init(DeviceObject,
                                Irp, miniport, UnknownAdapter, ResourceList);
          if (NT_SUCCESS(ntStatus))
          {
              //
              // Hand the port driver and the reference
              // string to PortCls.
              //
              ntStatus = PcRegisterSubdevice(DeviceObject,
                                             Name, port);
          }

          //
          // We no longer need to reference the miniport driver.
          // Either the port driver now references it,
          // or binding failed and it should be deleted.
          //
          miniport->Release();
      }

      //
      // Release the reference that existed when PcNewPort() gave us
      // the pointer in the first place. This reference must be released
      // regardless of whether the binding of the port and miniport
      // drivers succeeded.
      //
      port->Release();
  }

其有以下几种:

Class GUID Port Interface Name
CLSID_PortWaveCyclic IPortWaveCyclic
CLSID_PortWavePci IPortWavePci
CLSID_PortWaveRT IPortWaveRT
CLSID_PortMidi IPortMidi
CLSID_PortDMus IPortDMus
CLSID_PortTopology IPortTopology

对应的就是这些:
111925895191

0 篇笔记 写笔记

PortClass中的COM
一般的Windows驱动我们采用的是WDM驱动架构,最近的Windows驱动架构WDF也是建立在WDM基础上的。这些基于WDM的一般设备驱动可以应付大部分的设备驱动,如串口,PCI,USB等通用设备驱动。但是微软的关于流的处理的一些服务及驱动采用的面向对象的设计方法,是基于COM进行开发的,典型的像......
PortClass流式音频架构
在Windows操作系统中,PortClass仅用于纯音频设备驱动的开发,其配合内核流式驱动模块ks.sys实现音频设备驱动的开发。内核流式驱动模块ks.sys包含两部分内容,一部分是提供内核通用的流式驱动模块,另一部分是avstream模块。avstream模块即可用于开发音频设备驱动,也可用......
PortClass音频驱动程序架构
音频适配器驱动程序是最低层的音频驱动,对下实现对硬件的操作,以上提供端口驱动的函数回调。所以音频适配器驱动的代码来自两部分,一部分是厂商提供的硬件驱动代码,一般是由portclass提供的通用音频驱动模块。入口函数因为适配器驱动程序是作为内核模式驱动程序服务安装的,所以和其它驱动一样,由操作系统加......
PortClass提供的音频MINI端口驱动
PortClass提供了以下几种MiniPort驱动类型。Cyclic DMA wave input and output:此类Mini端口驱动程序支持访问ISA和其他声卡的基于DMA的wave I/O功能。接口专门处理循环(autoinit)DMA缓冲区,流问题由端口驱动程序解决。Scatt......
PortClass InitializeAdapterDriver函数
InitializeAdapterDriver函数是PortClass驱动DriverEntry调用的第一个函数,也是惟一的函数。该函数的功能和其它的MINI小端口驱动一样,都是初始化相应的MIN小端口驱动框架的“结构体”,并使用系统提供的类驱动的回调函数来初始化相应的IRP回调函数,而我们函数的第......
PortClass PcAddAdapterDevice函数
PcAddAdapterDevice函数在WDK中声名如下:PORTCLASSAPI NTSTATUS NTAPI PcAddAdapterDevice( IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT PhysicalD......
PortClass 自定义启动函数StartDevice
通过上一节知道,IPR_MN_START_DEVICE的回调函数其实是PnpStartDevice,不过兜兜转转,最终执行的是我们在通过在PcAddAdapterDevcie函数的第三参数StartDevice。当然在执行我们自定义的这个StartDevice函数之前,PortClass框架类已经通......
PortClass 电源管理
电源管理实现的COM是AdapterPowerMgr,继承于IAdapterPowerManagement和CUnknown,用于电源的管理。class AdapterPowerMgr: public IAdapterPowerManagement, public CUnkn......
PortClass 拓扑结构实现原理
PortClass音频设备驱动中,除了设计电源管理之外,另一些重要的结构就是实现音频设备的MiniPort驱动。我们知道,PortClass提供了多种MiniPort端口驱动,我们只需要继承,并实例化并生成设备拓扑结构就行了。但多种MiniPort端口驱动的类型很多,我们一般选择Topology端......
PortClass IMiniportTopology拓扑结构的实现
需要实现IMiniportTopology的为:class Topology: public IMiniportTopology, public CUnknown{};当然Topology和WaveCyclic类为了实现上图的拓结构图,需要返回相应的拓结连接关系图,系统会调......
PortClass IMiniportWaveCyclic拓扑结构的实现
需要实现IMiniportWaveCyclic的类分别为:class WaveCyclic: public IMiniportWaveCyclic, public CUnknown{};当然WaveCyclic类为了实现上图的拓结构图,需要返回相应的拓结连接关系图,系统......
PortClass IMiniportWaveCyclicStream
IMiniportWaveCyclicStream接口表示流经WaveCyclicFilter上引脚的音频流。该过滤器包装了WaveCycle渲染或捕获设备,并通过将WaveCycle端口驱动程序与WaveCycle微型端口驱动程序配对来实现。需要实现IMiniportWaveCyclicStre......
WDM-UAA音频驱动简介
UAA全称Microsoft Universal Audio Architecture.Windows内核音频体系包括两大部分,分别为WDM和KS(kernel stream)组件。并且其支持的操作系统从Windows 98至现在最新的Windows 11.Windows对支持符合UAA规范的P......
PortClass电源管理回调函数及调用时机
PortClass电源管理使用IAdapterPowerManagement类实例来回调。class AdapterPowerMgr: public IAdapterPowerManagement, public CUnknown其三个回调函数分别为:PowerChan......
CUnknown和INonDelegatingUnknown
CUnknown继承于INonDelegatingUnknown,并且CUnknown是所有COM的基类。class CUnknown : public INonDelegatingUnknown而INonDelegatingUnknown是一个虚基结构体。INonDelegatingUnkn......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!