다음을 통해 공유


FS_FILTER_CALLBACKS 구조체(ntifs.h)

FS_FILTER_CALLBACKS 구조에는 호출자가 제공한 알림 콜백 루틴의 진입점이 포함됩니다.

구문

typedef struct _FS_FILTER_CALLBACKS {
  ULONG                          SizeOfFsFilterCallbacks;
  ULONG                          Reserved;
  PFS_FILTER_CALLBACK            PreAcquireForSectionSynchronization;
  PFS_FILTER_COMPLETION_CALLBACK PostAcquireForSectionSynchronization;
  PFS_FILTER_CALLBACK            PreReleaseForSectionSynchronization;
  PFS_FILTER_COMPLETION_CALLBACK PostReleaseForSectionSynchronization;
  PFS_FILTER_CALLBACK            PreAcquireForCcFlush;
  PFS_FILTER_COMPLETION_CALLBACK PostAcquireForCcFlush;
  PFS_FILTER_CALLBACK            PreReleaseForCcFlush;
  PFS_FILTER_COMPLETION_CALLBACK PostReleaseForCcFlush;
  PFS_FILTER_CALLBACK            PreAcquireForModifiedPageWriter;
  PFS_FILTER_COMPLETION_CALLBACK PostAcquireForModifiedPageWriter;
  PFS_FILTER_CALLBACK            PreReleaseForModifiedPageWriter;
  PFS_FILTER_COMPLETION_CALLBACK PostReleaseForModifiedPageWriter;
  PFS_FILTER_CALLBACK            PreQueryOpen;
  PFS_FILTER_COMPLETION_CALLBACK PostQueryOpen;
} FS_FILTER_CALLBACKS, *PFS_FILTER_CALLBACKS;

멤버

SizeOfFsFilterCallbacks

이 구조체의 크기(바이트)입니다. sizeof(FS_FILTER_CALLBACKS)로 설정합니다. SizeOfFsFilterCallbacks를 0으로 설정하면 안 됩니다.

Reserved

예약되어 있습니다. 사용하지 마십시오.

PreAcquireForSectionSynchronization

FS_FILTER_CALLBACK PreAcquireForSectionSynchronization 루틴에 대한 포인터입니다.

PostAcquireForSectionSynchronization

FS_FILTER_CALLBACK PostAcquireForSectionSynchronization 루틴에 대한 포인터입니다.

PreReleaseForSectionSynchronization

FS_FILTER_CALLBACK PreReleaseForSectionSynchronization 루틴에 대한 포인터입니다.

PostReleaseForSectionSynchronization

FS_FILTER_CALLBACK PostReleaseForSectionSynchronization 루틴에 대한 포인터입니다.

PreAcquireForCcFlush

FS_FILTER_CALLBACK PreAcquireForCcFlush 루틴에 대한 포인터입니다.

PostAcquireForCcFlush

FS_FILTER_CALLBACK PostAcquireForCcFlush 루틴에 대한 포인터입니다.

PreReleaseForCcFlush

FS_FILTER_CALLBACK PreReleaseForCcFlush 루틴에 대한 포인터입니다.

PostReleaseForCcFlush

FS_FILTER_CALLBACK PostReleaseForCcFlush 루틴에 대한 포인터입니다.

PreAcquireForModifiedPageWriter

FS_FILTER_CALLBACK PreAcquireForModifiedPageWriter 루틴에 대한 포인터입니다.

PostAcquireForModifiedPageWriter

FS_FILTER_CALLBACK PostAcquireForModifiedPageWriter 루틴에 대한 포인터입니다.

PreReleaseForModifiedPageWriter

FS_FILTER_CALLBACK PreReleaseForModifiedPageWriter 루틴에 대한 포인터입니다.

PostReleaseForModifiedPageWriter

FS_FILTER_CALLBACK PostReleaseForModifiedPageWriter 루틴에 대한 포인터입니다.

PreQueryOpen

FS_FILTER_CALLBACK PreQueryOpen 루틴에 대한 포인터입니다.

PostQueryOpen

FS_FILTER_CALLBACK PostQueryOpen 루틴에 대한 포인터입니다.

설명

파일 시스템 필터 드라이버 및 파일 시스템은 FsRtlRegisterFileSystemFilterCallbacks 루틴을 호출하여 기본 파일 시스템이 특정 작업을 수행할 때 호출할 알림 콜백 루틴을 등록합니다.

모든 콜백 진입점은 선택 사항이며 NULL일 수 있습니다.

FS_FILTER_CALLBACK 필터 콜백 루틴 및 해당 매개 변수는 다음과 같이 정의됩니다.


typedef
NTSTATUS (*PFS_FILTER_CALLBACK) (
    IN PFS_FILTER_CALLBACK_DATA Data,
    OUT PVOID *CompletionContext
);

매개 변수 의미
데이터 이 작업의 FS_FILTER_CALLBACK_DATA 구조체에 대한 포인터입니다.
CompletionContext 필터 완성 콜백 루틴에 전달할 컨텍스트 정보입니다. 컨텍스트 정보를 전달하지 않거나 해당 필터 완성 콜백 루틴이 없는 경우 NULL 로 설정합니다.

FS_FILTER_COMPLETION_CALLBACK 필터 완성 콜백 루틴 및 해당 매개 변수는 다음과 같이 정의됩니다.


typedef
VOID (*PFS_FILTER_COMPLETION_CALLBACK) (
    IN PFS_FILTER_CALLBACK_DATA Data,
    IN NTSTATUS OperationStatus,
    IN PVOID CompletionContext
);

매개 변수 의미
데이터 이 작업의 FS_FILTER_CALLBACK_DATA 구조체에 대한 포인터입니다.
OperationStatus 작업의 상태입니다. 파일 시스템이 작업을 성공적으로 수행하면 이 매개 변수가 STATUS_SUCCESS 설정됩니다. 그렇지 않으면 적절한 오류 상태 값으로 설정됩니다.
CompletionContext 필터 콜백 루틴에 설정된 컨텍스트 정보입니다. 정보가 전달되지 않거나 해당 필터 콜백 루틴이 없는 경우 NULL 로 설정됩니다.

콜백 루틴은 다음 작업에 대해 정의됩니다.

작업 알림 콜백 루틴
메모리 관리자는 파일의 일부에 대한 메모리 매핑 섹션을 만들기 전에 단독으로 파일을 가져옵니다. 이 작업의 경우 SyncTypeSyncTypeCreateSection으로 설정됩니다. PreAcquireForSectionSynchronization, PostAcquireForSectionSynchronization
메모리 관리자는 파일의 일부에 대한 메모리 매핑 섹션을 만든 후 파일을 해제합니다. PreReleaseForSectionSynchronization, PostReleaseForSectionSynchronization
커널 구성 요소(예: 캐시 관리자)는 파일의 일부에 대해 섹션 만들기를 일시적으로 사용하지 않도록 설정하기 전에 파일을 단독으로 획득합니다. 이 작업의 경우 SyncType 이 SyncTypeOther로 설정됩니다. PreAcquireForSectionSynchronization, PostAcquireForSectionSynchronization. PreAcquireForSectionSynchronization은 항상 이 작업에 대한 성공 상태 코드(예: STATUS_SUCCESS)를 반환해야 합니다.
커널 구성 요소(예: 캐시 관리자)는 파일의 일부에 대해 섹션 만들기를 일시적으로 비활성화한 후 파일을 해제합니다. PreReleaseForSectionSynchronization, PostReleaseForSectionSynchronization
캐시 관리자는 캐시에서 파일의 일부를 플러시하기 전에 단독으로 파일을 가져옵니다. PreAcquireForCcFlush, PostAcquireForCcFlush
캐시 관리자는 캐시에서 파일의 일부를 플러시한 후 파일을 해제합니다. PreReleaseForCcFlush, PostReleaseForCcFlush
수정된 페이지 작성기는 파일의 일부를 디스크에 쓰기 전에 단독으로 파일을 가져옵니다. PreAcquireForModifiedPageWriter, PostAcquireForModifiedPageWriter
수정된 페이지 작성기는 파일의 일부를 디스크에 쓴 후 파일을 해제합니다. PreReleaseForModifiedPageWriter, PostReleaseForModifiedPageWriter
구성 요소는 파일을 열지 않고 이름으로 파일 정보를 쿼리합니다. 리디렉션자는 이 쿼리를 사용하여 호출되지 않으므로 PreQueryOpen 또는 PostQueryOpen 콜백을 구현할 필요가 없습니다. PreQueryOpen, PostQueryOpen

필터 알림 콜백 루틴은 작업 요청이 하위 수준 필터 드라이버 및 기본 파일 시스템에 전달되기 전에 호출됩니다. 콜백 루틴에서 필터 드라이버는 필요한 모든 처리를 수행하고 즉시 STATUS_SUCCESS 반환해야 합니다. 필터 드라이버의 콜백 루틴이 STATUS_SUCCESS 이외의 상태 값을 반환하면 작업 요청이 실패합니다. 잠금 요청과 같은 특정 요청이 반복적으로 실패하면 시스템 진행이 중단됩니다. 따라서 필터 드라이버는 절대적으로 필요한 경우에만 이러한 요청에 실패해야 합니다. 이러한 요청을 실패할 때 필터 드라이버는 오류를 최대한 완전하고 정확하게 설명하는 오류 상태 값을 반환해야 합니다.

참고

필터 드라이버의 알림 콜백 루틴은 파일 시스템 리소스를 해제하는 요청에 실패할 수 없습니다. 필터 드라이버가 다음 알림 콜백 루틴에서 STATUS_SUCCESS 이외의 상태 값을 반환하는 경우 상태 값은 무시됩니다.

  • PreReleaseForSectionSynchronization
  • PreReleaseForCcFlush
  • PreReleaseForModifiedPageWriter

필터 완성 콜백 루틴은 작업 요청이 하위 수준 필터 드라이버 및 기본 파일 시스템에 전달된 후에 호출됩니다. 완료 콜백 루틴에서 필터 드라이버는 필요한 처리를 수행하고 즉시 반환해야 합니다.

요구 사항

요구 사항
헤더 ntifs.h

추가 정보

FS_FILTER_CALLBACK_DATA

FsRtlRegisterFileSystemFilterCallbacks