DRIVER_LIST_CONTROL回调函数 (wdm.h)

AdapterListControl 例程 (DMA) 散点/收集操作启动直接内存访问。

语法

DRIVER_LIST_CONTROL DriverListControl;

void DriverListControl(
  [in] _DEVICE_OBJECT *DeviceObject,
  [in] _IRP *Irp,
  [in] PSCATTER_GATHER_LIST ScatterGather,
  [in] PVOID Context
)
{...}

参数

[in] DeviceObject

调用方提供的指向 DEVICE_OBJECT 结构的指针。 这是目标设备的设备对象,以前由驱动程序的 AddDevice 例程创建。

[in] Irp

如果驱动程序具有 StartIo 例程,则调用方提供的指向描述 I/O 操作的 IRP 结构的指针。 否则,不使用。

[in] ScatterGather

调用方提供的指向描述散点/收集区域的 SCATTER_GATHER_LIST 结构的指针。

[in] Context

调用方提供的指向驱动程序定义的上下文信息的指针,在对 AllocateAdapterChannel 的上一次调用中指定。

返回值

备注

若要为特定设备对象注册 AdapterListControl 例程,驱动程序必须调用 IoGetDmaAdapter 以获取适配器对象,然后调用 GetScatterGatherList 以请求使用适配器并提供 AdapterListControl 例程的地址。 适配器可用时,系统将调用 AdapterListControl 例程。

示例

若要定义 AdapterListControl 回调例程,必须先提供一个函数声明,用于标识要定义的回调例程的类型。 Windows 为驱动程序提供一组回调函数类型。 使用回调函数类型声明函数有助于 驱动程序代码分析静态驱动程序验证程序 (SDV) 和其他验证工具查找错误,并且这是编写适用于 Windows 操作系统的驱动程序的要求。

例如,若要定义名为 MyAdapterListControlAdapterListControl 回调例程,请使用DRIVER_LIST_CONTROL类型,如以下代码示例所示:

DRIVER_LIST_CONTROL MyAdapterListControl;

然后,按如下所示实现回调例程:

_Use_decl_annotations_
VOID
  MyAdapterListControl(
    struct _DEVICE_OBJECT  *DeviceObject,
    struct _IRP  *Irp,
    PSCATTER_GATHER_LIST  ScatterGather,
    PVOID  Context
    )
  {
      // Function body
  }

DRIVER_LIST_CONTROL函数类型在 Wdm.h 头文件中定义。 若要在运行代码分析工具时更准确地识别错误,请务必将 _Use_decl_annotations_ 注释添加到函数定义。 注释 _Use_decl_annotations_ 可确保使用应用于头文件中DRIVER_LIST_CONTROL函数类型的注释。 有关函数声明要求的详细信息,请参阅 使用 WDM 驱动程序的函数角色类型声明函数。 有关 的信息 _Use_decl_annotations_,请参阅 批注函数行为

有关实现 AdapterListControl 例程的详细信息,请参阅 使用散点/收集 DMA

要求

要求
目标平台 桌面
标头 wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h)
IRQL 在 DISPATCH_LEVEL 调用。