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

I/O 작업을 나타내는 FLT_CALLBACK_DATA 콜백 데이터에 대한 포인터입니다.

[in] InfoClass

반환할 파일 정보의 형식을 나타내는 플래그입니다. 플래그는 결합할 수 없습니다. 다음 값 중 하나일 수 있습니다.

플래그 의미
QoCFileStatInformation (0x00000001) 파일 시스템은 QUERY_ON_CREATE_FILE_STAT_INFORMATION 구조에서 파일 통계 정보를 반환합니다.
QoCFileLxInformation (0x00000002) 파일 시스템은 확장된 Linux와 유사한 정보를 QUERY_ON_CREATE_FILE_LX_INFORMATION 구조로 반환합니다.
QoCFileEaInformation (0x00000004) 파일 시스템은 QUERY_ON_CREATE_EA_INFORMATION 구조에서 EA(확장 특성)를 반환합니다.

[out] RetInfoSize

RetInfoBuffer가 가리키는 버퍼의 크기(바이트)를 수신하는 ULONG에 대한 포인터입니다.

[out] RetInfoBuffer

요청된 InfoClass 구조체에 대한 포인터를 받습니다. 파일 시스템에서 요청을 처리할 수 있지만 요청된 파일 정보를 찾을 수 없는 경우 이 매개 변수는 NULL로 설정됩니다.

반환 값

반환 코드 설명
STATUS_SUCCESS 파일 시스템에서 요청된 파일 정보를 성공적으로 반환했습니다.
STATUS_NOT_FOUND 파일 시스템에서 요청을 처리했지만 요청된 정보가 파일에 없거나 파일 시스템에서 InfoClass의 정보 요청을 인식하지 못합니다. 호출자는 기존 파일 시스템 API를 사용하여 정보를 요청해서는 안 됩니다.
STATUS_NOT_SUPPORTED 파일 시스템에서 요청된 정보를 검색할 수 없습니다. 이 오류는 파일 시스템이 정보 요청 또는 관련 ECP를 지원하지 않거나 파일을 미리 만드는 동안 FltRequestFileInfoOnCreateCompletion 이 호출되지 않았기 때문에 발생합니다. 대신 호출자는 기존 파일 시스템 API를 사용하여 정보를 다시 요청해야 합니다.
STATUS_UNSUCCESSFUL 요청된 정보를 검색하는 동안 파일 시스템에서 오류가 발생했습니다. 호출자는 일반 파일 시스템 API를 통해 정보를 요청할 수 있지만 실패할 수 있습니다.

설명

FltRequestFileInfoOnCreateCompletionFltRetrieveFileInfoOnCreateCompletionEx 를 사용하면 미니필터가 파일을 만드는 동안 파일에 대한 정보를 가져올 수 있으므로 스택 통과가 필요한 이후 쿼리의 성능 비용을 방지할 수 있습니다.

  • 미리 만들기에서 미니필터는 요청된 정보를 식별하는 입력 InfoClassFlags의 조합으로 FltRequestFileInfoOnCreateCompletion을 한 번 호출합니다.
  • 파일 시스템은 적절한 구조를 할당하고 요청된 정보를 작성을 처리하는 동안 지원되는 경우 채웁니다.
  • 사후 만들기에서 미니필터는 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