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 로 설정됩니다. |
콜백 루틴은 다음 작업에 대해 정의됩니다.
작업 | 알림 콜백 루틴 |
---|---|
메모리 관리자는 파일의 일부에 대한 메모리 매핑 섹션을 만들기 전에 단독으로 파일을 가져옵니다. 이 작업의 경우 SyncType 이 SyncTypeCreateSection으로 설정됩니다. | 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 |