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

Подпрограмма FlushAdapterBuffersEx очищает все данные, которые остаются в кэше данных в конце операции передачи DMA, выполняемой системным контроллером DMA или устройством master шины.

Синтаксис

PFLUSH_ADAPTER_BUFFERS_EX PflushAdapterBuffersEx;

NTSTATUS PflushAdapterBuffersEx(
  [in] PDMA_ADAPTER DmaAdapter,
  [in] PMDL Mdl,
  [in] PVOID MapRegisterBase,
  [in] ULONGLONG Offset,
  [in] ULONG Length,
  [in] BOOLEAN WriteToDevice
)
{...}

Параметры

[in] DmaAdapter

Указатель на структуру DMA_ADAPTER . Эта структура представляет собой объект адаптера, представляющий системный канал DMA драйвера или устройство master шины. Вызывающий объект получил этот указатель из предыдущего вызова процедуры IoGetDmaAdapter .

[in] Mdl

Указатель на цепочку MDL, описывающую страницы памяти, которые необходимо очистить. Задайте этот параметр, чтобы указать на цепочку MDL, которая использовалась для передачи DMA. Дополнительные сведения см. в описании параметра Mdl в разделах GetScatterGatherListEx, BuildScatterGatherListEx или MapTransferEx.

[in] MapRegisterBase

Дескриптор регистров карты, которые ранее были выделены для объекта адаптера.

[in] Offset

Начальная смещение относительно начала цепочки MDL, используемая для операции очистки. Присвойте этому параметру значение, которое использовалось в качестве начального смещения для передачи DMA. Дополнительные сведения см. в описании параметра Offset в разделах GetScatterGatherListEx, BuildScatterGatherListEx или MapTransferEx.

[in] Length

Количество байтов данных для очистки. Присвойте этому параметру значение, которое использовалось в качестве длины передачи для передачи DMA. Дополнительные сведения см. в описании параметра Length в разделах GetScatterGatherListEx, BuildScatterGatherListEx или MapTransferEx.

[in] WriteToDevice

Направление передачи DMA. Присвойте этому параметру значение, которое использовалось в качестве направления передачи для передачи DMA. Дополнительные сведения см. в описании параметра WriteToDevice в разделах GetScatterGatherListEx, BuildScatterGatherListEx или MapTransferEx.

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

FlushAdapterBuffersEx возвращает STATUS_SUCCESS, если вызов выполнен успешно. Возможные возвращаемые значения ошибок включают следующие коды состояния.

Код возврата Описание
STATUS_INVALID_PARAMETERS
Подпрограмма завершилась сбоем из-за недопустимых значений параметров, переданных вызывающим.

Комментарии

FlushAdapterBuffersEx не является системной подпрограммой, которую можно вызывать напрямую по имени. Эта подпрограмма может вызываться только указателем из адреса, возвращаемого в структуре DMA_OPERATIONS . Драйверы получают адрес этой подпрограммы, вызывая IoGetDmaAdapter с элементом Version параметра DeviceDescription , равным DEVICE_DESCRIPTION_VERSION3. Если IoGetDmaAdapter возвращает значение NULL, подпрограмма недоступна на вашей платформе.

FlushAdapterBuffersEx обеспечивает когерентность кэша процессора на аппаратных платформах, которые не реализуют аппаратно-принудительное когерентство кэша (слежка за шиной). Кроме того, для системной передачи DMA FlushAdapterBuffersEx очищает все данные, остающиеся во внутреннем кэше контроллера DMA системы.

Драйвер, инициирующий передачу DMA точечной и сборной данных, должен гарантировать, что после завершения передачи все переданные данные будут удалены из кэша. Драйвер должен вызвать FlushAdapterBuffersEx , прежде чем драйвер завершит IRP, запросив передачу DMA, и прежде чем драйвер освободит регистры карты. Дополнительные сведения см. в разделе Очистка кэшированных данных во время операций DMA.

FlushAdapterBuffersEx — это расширенная версия процедуры FlushAdapterBuffers . FlushAdapterBuffersEx может очистить весь точечный или собирающийся список за один вызов. Для использования FlushAdapterBuffers для очистки точечной и сборной списка требуется отдельный вызов для каждого MDL в цепочке MDL.

FlushAdapterBuffersEx можно использовать вместо FlushAdapterBuffers для очистки буфера для передачи DMA с одним пакетом. В этом случае цепочка MDL, на которую указывает параметр MDL , содержит только один MDL. Преимущество использования FlushAdapterBuffersEx заключается в том, что вызывающий объект может указать смещение в MDL.

Если метод FlushAdapterBuffersEx вызывается до завершения операции передачи DMA, этот вызов может отменить передачу до ее завершения или вызвать неопределенное поведение.

Требования

Требование Значение
Минимальная версия клиента Доступно начиная с Windows 8.
Целевая платформа Персональный компьютер
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
IRQL <= DISPATCH_LEVEL

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

BuildScatterGatherListEx

DMA_ADAPTER

DMA_OPERATIONS

FlushAdapterBuffers

GetScatterGatherListEx

IoGetDmaAdapter

MapTransferEx