функция обратного вызова DMA_APPEND_HANDLER (netdma.h)

примечание Интерфейс NetDMA не поддерживается в Windows 8 и более поздних версиях.

Функция ProviderAppendDma добавляет связанный список дескрипторов DMA к последнему дескриптору на канале DMA.

Синтаксис

DMA_APPEND_HANDLER DmaAppendHandler;

NTSTATUS DmaAppendHandler(
  [in] PVOID ProviderChannelContext,
  [in] PNET_DMA_DESCRIPTOR DescriptorVirtualAddress,
  [in] PHYSICAL_ADDRESS DescriptorPhysicalAddress,
  [in] ULONG DescriptorCount
)
{...}

Параметры

[in] ProviderChannelContext

Указатель, определяющий область контекста канала DMA. Поставщик DMA вернул этот дескриптор в NetDMA в расположении, указанном в параметре pProviderChannelContextфункция ProviderAllocateDmaChannel.

[in] DescriptorVirtualAddress

Указатель на виртуальный адрес первой NET_DMA_DESCRIPTOR структуры в связанном списке дескрипторов DMA. Соответствующий физический адрес указывается в параметре DescriptorPhysicalAddress.

[in] DescriptorPhysicalAddress

Указатель на физический адрес первого дескриптора DMA в связанном списке дескрипторов DMA. Соответствующий виртуальный адрес указан в параметре DescriptorVirtualAddress.

[in] DescriptorCount

Количество дескрипторов DMA в DescriptorVirtualAddress.

Примечание драйверы поставщика NetDMA до версии 2.0 NetDMA могут игнорировать параметр DescriptorCount. Для netDMA 2.0 и более поздних версий этот параметр является числом дескрипторов в операции DMA.
 

Возвращаемое значение

ProviderAppendDma возвращает одно из следующих значений состояния:

Возвращаемый код Описание
STATUS_SUCCESS
Операция успешно завершена.
STATUS_UNSUCCESSFUL
Операция завершилась ошибкой из-за неуказаемых причин.

Замечания

Интерфейс NetDMA вызывает функцию драйвера поставщика DMA ProviderAppendDma, чтобы добавить связанный список дескрипторов DMA после последнего дескриптора в канале DMA. Интерфейс NetDMA может вызывать ProviderAppendDma любое количество раз после запуска передачи DMA. Однако интерфейс NetDMA должен вызывать функцию ProviderStartDma после сброса или прерывания канала или после первого выделения канала DMA.

примечание в NetDMA 2.0 и более поздних версиях связанный список дескрипторов не завершается null. Элемент nextDescriptor в последнем дескрипторе в связанном списке указывает физический адрес структуры NET_DMA_DESCRIPTOR, которая будет использоваться в последующем вызове функции ProviderAppendDma. Драйвер поставщика NetDMA 2.0 может кэшировать адрес в NextDescriptor и использовать этот адрес в начале связанного списка для следующей операции добавления.
 
Интерфейс NetDMA задает NextDescriptor элемент последнего дескриптора в начало новой цепочки дескрипторов перед вызовом ProviderAppendDma.

Если текущий дескриптор в активной передаче является последним дескриптором, подсистема DMA должна перечитать последний дескриптор. Элемент NextDescriptor в последней NET_DMA_DESCRIPTOR структуре должен иметь новый адрес, а подсистема DMA должна продолжаться со следующим дескриптором. Если текущий дескриптор не является последним дескриптором, подсистема DMA может продолжать обрабатывать дескрипторы DMA без дополнительных задач.

NetDMA вызывает ProviderAppendDma в IRQL <= DISPATCH_LEVEL.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Поддерживается для драйверов NetDMA 2.0 в Windows Server 2008. Поддерживается для драйверов NetDMA 1.1 в Windows Server 2008. Поддерживается для драйверов NetDMA 1.0 в Windows Server 2008 и Windows Vista.
целевая платформа Виндоус
заголовка netdma.h (include Netdma.h)
IRQL <= DISPATCH_LEVEL

См. также

NET_DMA_DESCRIPTOR

ProviderAllocateDmaChannel

ProviderStartDma