Поделиться через


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

Подпрограмма FlushAdapterBuffers сбрасывает все данные, оставшиеся во внутреннем кэше контроллера DMA системы или во внутреннем кэше адаптера master шины, в конце операции передачи DMA.

Синтаксис

PFLUSH_ADAPTER_BUFFERS PflushAdapterBuffers;

BOOLEAN PflushAdapterBuffers(
  [in] PDMA_ADAPTER DmaAdapter,
  [in] PMDL Mdl,
  [in] PVOID MapRegisterBase,
  [in] PVOID CurrentVa,
  [in] ULONG Length,
  [in] BOOLEAN WriteToDevice
)
{...}

Параметры

[in] DmaAdapter

Указатель на структуру DMA_ADAPTER, возвращаемую IoGetDmaAdapter, которая представляет адаптер master шины или контроллер DMA.

[in] Mdl

Указатель на MDL, описывающий буфер, ранее переданный в вызове драйвера к MapTransfer.

[in] MapRegisterBase

Указывает регистры карты, выделенные для операции DMA. Система передает это значение в подпрограмму AdapterControl драйвера.

[in] CurrentVa

Указатель на текущий виртуальный адрес в буфере, описанный в Mdl, где произошла операция ввода-вывода. Это значение должно совпадать с исходным значением CurrentVa, переданным в MapTransfer.

[in] Length

Указывает длину буфера в байтах.

[in] WriteToDevice

Указывает направление операции передачи DMA: TRUE для передачи из буфера в системной памяти на устройство драйвера.

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

FlushAdapterBuffers возвращает значение TRUE, если все данные, оставшиеся во внутреннем кэше контроллера DMA или адаптера master шины, были успешно сброшены в системную память или отправлены на устройство.

Комментарии

FlushAdapterBuffers не является системной подпрограммой, которую можно вызывать напрямую по имени. Эта подпрограмма может вызываться только указателем из адреса, возвращенного в структуре DMA_OPERATIONS . Драйверы получают адрес этой подпрограммы, вызывая IoGetDmaAdapter.

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

Драйвер может получить начальное значение CurrentVa для начала передачи DMA на основе пакетов, вызвав MmGetMdlVirtualAddress. Однако возвращаемое значение является индексом в MDL, а не допустимым виртуальным адресом. Если драйвер должен разделить большой запрос на передачу на несколько операций DMA, он должен обновить CurrentVa и Length для каждой операции DMA.

Требования

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

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

AllocateAdapterChannel

DMA_ADAPTER

DMA_OPERATIONS

IoGetDmaAdapter

KeFlushIoBuffers

MapTransfer

MmGetMdlVirtualAddress