функция обратного вызова 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) |