Функция FltRetrieveFileInfoOnCreateCompletionEx (fltkernel.h)
FltRetrieveFileInfoOnCreateCompletionEx запрашивает указанные сведения о файле после завершения создания файла.
Синтаксис
NTSTATUS FLTAPI FltRetrieveFileInfoOnCreateCompletionEx(
[in] PFLT_FILTER Filter,
[in] PFLT_CALLBACK_DATA Data,
[in] ULONG InfoClass,
[out] PULONG RetInfoSize,
[out] PVOID *RetInfoBuffer
);
Параметры
[in] Filter
Указатель непрозрачного фильтра, который однозначно идентифицирует драйвер минифильтра. Он возвращается FltRegisterFilter и остается неизменным до тех пор, пока загружен драйвер минифильтра.
[in] Data
Указатель на данные обратного вызова FLT_CALLBACK_DATA , представляющие операцию ввода-вывода.
[in] InfoClass
Флаг, указывающий тип возвращаемых сведений о файле. Обратите внимание, что флаги нельзя объединять. Может иметь одно из следующих значений:
Flag | Значение |
---|---|
QoCFileStatInformation (0x00000001) | Файловая система вернет сведения о статистике файла в QUERY_ON_CREATE_FILE_STAT_INFORMATION структуре. |
QoCFileLxInformation (0x00000002) | Файловая система будет возвращать расширенные сведения, подобные Linux, в QUERY_ON_CREATE_FILE_LX_INFORMATION структуре. |
QoCFileEaInformation (0x00000004) | Файловая система будет возвращать расширенные атрибуты (EA) в QUERY_ON_CREATE_EA_INFORMATION структуре. |
[out] RetInfoSize
Указатель на ULONG, получающий размер (в байтах) буфера, на который указывает RetInfoBuffer .
[out] RetInfoBuffer
Получает указатель на запрошенную структуру InfoClass . Если файловая система может обработать запрос, но не может найти сведения о запрошенных файлах, этот параметр имеет значение NULL.
Возвращаемое значение
Код возврата | Описание |
---|---|
STATUS_SUCCESS | Файловая система успешно вернула запрошенные сведения о файле. |
STATUS_NOT_FOUND | Файловая система обработала запрос, но запрошенная информация не присутствовала в файле, или файловая система не распознает запрос информации в InfoClass. Вызывающий объект не должен использовать традиционные API файловой системы для запроса информации. |
STATUS_NOT_SUPPORTED | Файловой системе не удалось получить запрошенные сведения. Эта ошибка возникает, когда файловая система не поддерживает запрос сведений или связанный ecp или потому, что fltRequestFileInfoOnCreateCompletion не был вызван во время предварительного создания файла. Вместо этого вызывающий объект должен использовать традиционные API файловой системы для повторного запроса сведений. |
STATUS_UNSUCCESSFUL | Файловая система получила ошибку при попытке получить запрошенные сведения. Вызывающий объект может попытаться запросить сведения с помощью обычных API файловой системы, но это, скорее всего, завершится ошибкой. |
Комментарии
FltRequestFileInfoOnCreateCompletion и FltRetrieveFileInfoOnCreateCompletionEx позволяют минифильтру получать сведения о файле во время создания файла, что позволяет избежать затрат на производительность последующего запроса, требующего обхода стека.
- При предварительном создании минифильтр выполняет один вызов FltRequestFileInfoOnCreateCompletion с сочетанием входных infoClassFlags , которые идентифицируют запрошенные сведения.
- Файловая система выделяет соответствующие структуры и заполняет запрошенные сведения, если это поддерживается, при обработке создания.
- В случае после создания минифильтр вызывает FltRetrieveFileInfoOnCreateCompletionEx , чтобы получить сведения, запрошенные в вызове перед созданием. Если минифильтр запросил несколько типов сведений, он должен вызывать FltRetrieveFileInfoOnCreateCompletionEx один раз для каждого типа сведений. Пример:
// Pre-create:
NTSTATUS status;
status = FltRequestFileInfoOnCreateCompletion( Filter,
CallbackData,
QoCFileStatInformation | QoCFileLxInformation | QoCFileEaInformation );
// Post-create:
NTSTATUS status;
ULONG fileStatSize, fileLxSize, fileEaSize;
QUERY_ON_CREATE_FILE_STAT_INFORMATION* fileStatInfo;
QUERY_ON_CREATE_FILE_LX_INFORMATION* fileLxInfo;
QUERY_ON_CREATE_EA_INFORMATION* fileEaInfo;
status = FltRetrieveFileInfoOnCreateCompletionEx( Filter,
CallbackData,
QoCFileStatInformation,
&fileStatSize,
&fileStatInfo );
status = FltRetrieveFileInfoOnCreateCompletionEx( Filter,
CallbackData,
QoCFileLxInformation,
&fileLxSize,
&fileLxInfo );
status = FltRetrieveFileInfoOnCreateCompletionEx( Filter,
CallbackData,
QoCFileEaInformation,
&fileEaSize,
&fileEaInfo );
После возврата FltRetrieveFileInfoOnCreateCompletionEx минифильтр может записывать данные в буфер, на который указывает RetInfoBuffer . Все фильтры выше этого минифильтра будут видеть изменения, если они вызывают FltRetrieveFileInfoOnCreateCompletionEx для измененного типа информации.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 10, версия 1809 |
Верхняя часть | fltkernel.h |
См. также раздел
FltRequestFileInfoOnCreateCompletion
QUERY_ON_CREATE_EA_INFORMATION
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по