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


Функция FsRtlRemovePerFileObjectContext (ntifs.h)

Для "устаревшего" драйвера фильтра файловой системы функция FsRtlRemovePerFileObjectContext развязывает структуру контекста по каждому файлу и объекту из списка контекстов отдельных файловых объектов, ранее связанных с объектом файла.

Синтаксис

PFSRTL_PER_FILEOBJECT_CONTEXT FsRtlRemovePerFileObjectContext(
  [in]           PFILE_OBJECT FileObject,
  [in, optional] PVOID        OwnerId,
  [in, optional] PVOID        InstanceId
);

Параметры

[in] FileObject

Указатель на объект файла, для которого удаляется контекстная информация.

[in, optional] OwnerId

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

[in, optional] InstanceId

Указатель на переменную, выделенную вызывающим объектом, которую можно использовать для различения структур контекста отдельных файлов и объектов, созданных одним и тем же драйвером фильтра. Формат этой переменной зависит от драйвера фильтра. Этот параметр является необязательным и может иметь значение NULL.

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

FsRtlRemovePerFileObjectContext отменяет связь и возвращает указатель на первый найденный контекст объекта файла. Если совпадение не найдено, функция FsRtlRemovePerFileObjectContext возвращает значение NULL.

Комментарии

"Устаревший" драйвер фильтра файловой системы вызывает FsRtlRemovePerFileObjectContext , чтобы удалить собственную структуру контекста для каждого файла-объекта со списком контекстов для каждого файла-объекта, связанных с файловым объектом. Все такие структуры контекста должны быть ранее связаны с объектом файла путем вызова FsRtlInsertPerFileObjectContext.

Если вызов FsRtlRemovePerFileObjectContext выполнен успешно, первая структура контекста для каждого файла и объекта, соответствующая OwnerIdInstanceId, если она имеется), будет развязана, и на нее возвращается указатель. Этот указатель может использоваться драйвером фильтра для освобождения несвязанной структуры контекста.

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

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

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

Примечание Устаревшие драйверы фильтров должны вызывать функцию FsRtlRemovePerFileObjectContext , чтобы удалить связь и освободить структуру контекстной информации до завершения IRP_MJ_CLOSE. В противном случае будет утечка памяти, выделенной для этой структуры контекста.
 
Кроме того, драйверы минифильтров файловой системы не должны использовать функции FsRtlXxxPerFileObjectContext . Вместо этого они могут использовать соответствующие функции контекста FltXxx. Дополнительные сведения см. в разделе FSRTL_PER_FILEOBJECT_CONTEXT .

Требования

Требование Значение
Минимальная версия клиента Windows Vista
Целевая платформа Универсальное
Верхняя часть ntifs.h (включая Fltkernel.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

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

FSRTL_PER_FILEOBJECT_CONTEXT

FsRtlInitPerFileObjectContext

FsRtlInsertPerFileObjectContext

FsRtlLookupPerFileObjectContext