Функция 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

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

ECP_LIST

FLT_CALLBACK_DATA

FltRequestFileInfoOnCreateCompletion

QUERY_ON_CREATE_EA_INFORMATION

QUERY_ON_CREATE_FILE_STAT_INFORMATION

QUERY_ON_CREATE_FILE_LX_INFORMATION