функция обратного вызова 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, если вызов выполнен успешно. Возможные возвращаемые значения ошибок включают следующие коды состояния.
Код возврата | Описание |
---|---|
|
Подпрограмма завершилась сбоем из-за недопустимых значений параметров, переданных вызывающим. |
Комментарии
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 |