DMA_CHANNEL_ALLOCATE_HANDLER回调函数 (netdma.h)

注意 不支持 NetDMA 接口

在 Windows 8 及更高版本中。

 
ProviderAllocateDmaChannel 函数分配 DMA 通道。

语法

DMA_CHANNEL_ALLOCATE_HANDLER DmaChannelAllocateHandler;

NTSTATUS DmaChannelAllocateHandler(
  [in]  PVOID ProviderContext,
  [in]  PNET_DMA_CHANNEL_PARAMETERS ChannelParameters,
  [in]  PVOID NetDmaChannelHandle,
  [out] PVOID *pProviderChannelContext
)
{...}

参数

[in] ProviderContext

标识 DMA 提供程序的上下文区域的指针。 DMA 提供程序驱动程序在调用 NetDMA 接口时将此句柄传递给 NetDMA 接口 NetDmaRegisterProvider 函数。

[in] ChannelParameters

指向 NET_DMA_CHANNEL_PARAMETERS 定义 DMA 通道的配置参数的结构。

[in] NetDmaChannelHandle

标识 DMA 通道的句柄。 提供程序驱动程序将此句柄传递给 NetDmaXxx 函数以标识 DMA 通道。

[out] pProviderChannelContext

指向指向 DMA 通道的 DMA 提供程序上下文区域的指针的值的指针。 DMA 提供程序驱动程序在从 ProviderAllocateDmaChannel 返回之前分配此上下文区域。 NetDMA 将上下文区域指针传递给需要提供程序通道上下文的 ProviderXxx 函数。

返回值

ProviderAllocateDmaChannel 返回以下状态值之一:

返回代码 说明
STATUS_SUCCESS
操作已成功完成。
STATUS_RESOURCES
由于资源不足,操作失败。
STATUS_UNSUCCESSFUL
由于未指定的原因,操作失败。

注解

NetDMA 接口调用 DMA 提供程序驱动程序的 ProviderAllocateDmaChannel 函数来分配 DMA 通道。 NetDMA 接口在使用 DMA 通道之前调用 ProviderAllocateDmaChannel

DMA 提供程序驱动程序尝试分配具有中断 CPU 相关性的 DMA 通道,该通道与 ProcessorAffinityMask 成员中指定的位匹配 NET_DMA_CHANNEL_PARAMETERSChannelParameters 参数的结构。 如果 MSI-X 不受支持或 MSI-X 受支持,但具有匹配中断 CPU 相关性的 DMA 通道不可用,则 DMA 提供程序驱动程序会分配任何可用的 DMA 通道,并调用 KeSetTargetProcessorDpc 例程来设置中断 DPC 的目标 CPU 以匹配指定关联掩码位之一。

DMA 提供程序始终将它与 DMA 通道中断 DPC 关联的 CPU 编号返回到 NET_DMA_CHANNEL_PARAMETERS 结构的 CpuNumber 成员中的 NetDMA 接口。

DMA 提供程序驱动程序提供指向 ProviderAllocateDmaChannel的 pProviderChannelContext 参数处驱动程序分配上下文信息的块的指针。 此上下文区域存储有关 DMA 通道的信息。 NetDMA 接口在后续调用需要 DMA 通道上下文的 ProviderXxx 函数中传递上下文信息。

当 NetDMA 接口调用 ProviderAllocateDmaChannel 时,它在 NetDmaChannelHandle 参数处提供句柄。 DMA 提供程序驱动程序在后续调用与 DMA 通道关联的 NetDmaXxx 函数时使用此句柄。

NetDMA 接口调用 ProviderFreeDmaChannel 函数以释放以前分配的 DMA 通道。

NetDMA 在 IRQL <= DISPATCH_LEVEL 调用 ProviderAllocateDmaChannel

要求

   
最低受支持的客户端 在 Windows Vista 中支持 NetDMA 1.0 驱动程序。
目标平台 Windows
标头 netdma.h (包括 Netdma.h)
IRQL <= DISPATCH_LEVEL

另请参阅

KeSetTargetProcessorDpc

NET_DMA_CHANNEL_PARAMETERS

NetDmaRegisterProvider

ProviderFreeDmaChannel