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

Кроме того, fltGetSwappedBufferMdlAddress может возвращать значение MDL, отличное от NULL , даже если вызывающий объект не переключился в новом буфере в своей процедуре обратного вызова перед операции. Это происходит в операциях, таких как разбиение операций ввода-вывода по страницам, где буфер имеет значение NULL, а вызывающий объект переключается в новом MDL-адресе.

MDL для буфера, который был переключен вызывающим объектом, автоматически освобождается диспетчером фильтров при возврате подпрограммы обратного вызова после операции. Чтобы предотвратить освобождение этого MDL, вызовите FltRetainSwappedBufferMdlAddress.

FltGetSwappedBufferMdlAddress можно вызвать только из подпрограммы обратного вызова после операции.

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть fltkernel.h (включая Fltkernel.h)
Библиотека FltMgr.lib
DLL Fltmgr.sys
IRQL Любой уровень

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

FltDecodeParameters

FltRetainSwappedBufferMdlAddress