Функция FltGetSwappedBufferMdlAddress (fltkernel.h)
Программа FltGetSwappedBufferMdlAddress возвращает адрес списка дескрипторов памяти (MDL) для буфера, который был переключен драйвером мини-фильтра.
Синтаксис
PMDL FltGetSwappedBufferMdlAddress(
[in] PFLT_CALLBACK_DATA CallbackData
);
Параметры
[in] CallbackData
Указатель на структуру данных обратного вызова для операции.
Возвращаемое значение
FltGetSwappedBufferMdlAddress возвращает адрес MDL для буфера, который был переключен вызывающим объектом. FltGetSwappedBufferMdlAddress возвращает NULL в следующих случаях:
- Операция — это быстрая операция ввода-вывода. В быстрой операции ввода-вывода буфер не может иметь MDL.
- Буфер, который был переключен вызывающим объектом, не имеет MDL.
- Драйвер мини-фильтра не переключил буферы в подпрограмме обратного вызова предварительной операции.
Замечания
Драйвер мини-фильтра, который переключается в новом буфере в подпрограмме обратного вызова предварительной работы, может получить адрес MDL для буфера, вызвав FltGetSwappedBufferMdlAddress из соответствующей процедуры обратного вызова после операции.
Требуется подпрограмма fltGetSwappedBufferMdlAddress, так как подпрограмма обратного вызова после операции получает структуру данных обратного вызова, содержащую исходный буфер и MDL-адрес, а не те, которые были заменены подпрограммой обратного вызова вызывающего объекта.
Для FltGetSwappedBufferMdlAddress можно вернуть значение, отличное отNULL MDL, даже если вызывающий объект не создавал MDL для буфера, в который он переключился. Это происходит при создании MDL для буфера драйвером мини-фильтра, устаревшим драйвером фильтра или драйвером файловой системы, который находится под вызывающим драйвером или стеком драйверов файловой системы.
Кроме того, для FltGetSwappedBufferMdlAddress возвращать значение, отличное отNULL, MDL, даже если вызывающий объект не переключился в новый буфер в подпрограмме обратного вызова перед выполнением. Это происходит в операциях, таких как разбиение по страницам ввода-вывода, где буфер null, а вызывающий объект переключится в новый MDL-адрес.
MDL для буфера, который был переключен вызывающим объектом, автоматически освобождается диспетчером фильтров при возврате подпрограммы обратного вызова после операции. Чтобы предотвратить освобождение этого MDL, вызовите FltRetainSwappedBufferMdlAddress.
FltGetSwappedBufferMdlAddress можно вызывать только из подпрограммы обратного вызова после операции.
Требования
Требование | Ценность |
---|---|
целевая платформа | Всеобщий |
заголовка | fltkernel.h (include Fltkernel.h) |
библиотеки | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | Любой уровень |