функция обратного вызова 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 до NetDMA версии 2.0 могут игнорировать параметр DescriptorCount . Для NetDMA 2.0 и более поздних версий этот параметр является числом дескрипторов в операции DMA.
 

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

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

Код возврата Описание
STATUS_SUCCESS
Операция выполнена успешно.
STATUS_UNSUCCESSFUL
Операция завершилась сбоем по неопределенным причинам.

Комментарии

Интерфейс NetDMA вызывает функцию ProviderAppendDma драйвера поставщика DMA, чтобы добавить связанный список дескрипторов 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.
Целевая платформа Windows
Header netdma.h (включая Netdma.h)
IRQL <= DISPATCH_LEVEL

См. также раздел

NET_DMA_DESCRIPTOR

ProviderAllocateDmaChannel

ProviderStartDma