функция обратного вызова PFLUSH_ADAPTER_BUFFERS (wdm.h)
FlushAdapterBuffers подпрограмма сбрасывает все данные, оставшиеся во внутреннем кэше контроллера DMA системы или во внутреннем кэше адаптера главного автобуса в конце операции передачи 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, представляющей адаптер шины или контроллер DMA.
[in] Mdl
Указатель на MDL, описывающий буфер, переданный ранее в вызове драйвера на MapTransfer.
[in] MapRegisterBase
Указывает регистры карты, выделенные для операции DMA. Система передает это значение в подпрограмму Adapter Control драйвера.
[in] CurrentVa
Указатель на текущий виртуальный адрес в буфере, описанный Mdl, где произошла операция ввода-вывода. Это значение должно совпадать со значением начального CurrentVa, переданного MapTransfer.
[in] Length
Указывает длину буфера в байтах.
[in] WriteToDevice
Указывает направление операции передачи DMA: TRUE для передачи из буфера в системной памяти на устройство драйвера.
Возвращаемое значение
FlushAdapterBuffers возвращает TRUE, если все данные, оставшиеся во внутреннем кэше контроллера DMA или шины главного адаптера, успешно удалены в системную память или вне устройства.
Замечания
FlushAdapterBuffers не является системной подпрограммой, которая может вызываться напрямую по имени. Эта подпрограмма вызывается только указателем из адреса, возвращаемого в DMA_OPERATIONS структуре. Драйверы получают адрес этой подпрограммы путем вызова IoGetDmaAdapter.
Чтобы обеспечить завершение передачи DMA, каждый драйвер, выполняющий операции DMA, должен вызывать FlushAdapterBuffers перед завершением IRP, запрашивающего передачу DMA, и перед освобождением регистров карты.
Драйвер может получить начальный CurrentVa для начала передачи DMA на основе пакетов путем вызова MmGetMdlVirtualAddress. Однако возвращаемое значение представляет собой индекс в Mdl, а не допустимый виртуальный адрес. Если драйвер должен разделить большой запрос передачи на несколько операций DMA, он должен обновить CurrentVa и длину для каждой операции DMA.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Доступно начиная с Windows 2000. |
целевая платформа | Настольный |
заголовка | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
IRQL | <= DISPATCH_LEVEL |
правил соответствия DDI | irqlDispatch(wdm) |