FltNotifyFilterChangeDirectory 함수(fltkernel.h)
FltNotifyFilterChangeDirectory 루틴은 IRP_MN_NOTIFY_CHANGE_DIRECTORY 작업에 대한 알림 구조를 만들고 지정된 알림 목록에 추가합니다.
구문
VOID FLTAPI FltNotifyFilterChangeDirectory(
[in, out] PNOTIFY_SYNC NotifySync,
[in, out] PLIST_ENTRY NotifyList,
[in] PVOID FsContext,
[in] PSTRING FullDirectoryName,
[in] BOOLEAN WatchTree,
[in] BOOLEAN IgnoreBuffer,
[in] ULONG CompletionFilter,
[in] PFLT_CALLBACK_DATA NotifyCallbackData,
[in, optional] PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback,
[in, optional] PSECURITY_SUBJECT_CONTEXT SubjectContext,
[in, optional] PFILTER_REPORT_CHANGE FilterCallback
);
매개 변수
[in, out] NotifySync
NotifyList 매개 변수가 가리키는 변경 디렉터리 알림 목록에 대한 불투명 동기화 개체에 대한 포인터입니다.
[in, out] NotifyList
현재 볼륨에 대한 변경 디렉터리 알림 목록의 헤드에 대한 포인터입니다. 목록의 각 요소는 불투명 알림 구조체입니다.
[in] FsContext
생성할 알림 구조를 식별하기 위해 호출자가 할당한 고유 값에 대한 포인터입니다. TraverseCallback 매개 변수에 콜백 루틴이 제공되면 FsContext가 해당 루틴에 NotifyContext 매개 변수로 전달됩니다.
[in] FullDirectoryName
이 알림 구조와 연결된 디렉터리의 전체 이름을 포함하는 ANSI 또는 유니코드 문자열에 대한 포인터입니다.
[in] WatchTree
FullDirectoryName 매개 변수로 지정된 디렉터리의 모든 하위 디렉터리도 감시해야 하는 경우 TRUE로 설정합니다. 디렉터리 자체만 감시할 경우 FALSE 로 설정합니다.
[in] IgnoreBuffer
사용자 버퍼를 무시하고 디렉터리를 강제로 다시 열거하려면 TRUE 로 설정합니다. 이 작업은 작업의 속도를 향상합니다.
[in] CompletionFilter
알림 목록의 콜백 데이터 구조를 완료해야 하는 파일 또는 디렉터리에 대한 변경 유형을 지정하는 플래그의 비트 마스크입니다. 가능한 플래그 값은 다음 표에 설명되어 있습니다.
플래그 | 의미 |
---|---|
FILE_NOTIFY_CHANGE_FILE_NAME | 파일이 이 디렉터리에서 추가, 삭제 또는 이름이 바뀌었습니다. |
FILE_NOTIFY_CHANGE_DIR_NAME | 하위 디렉터리가 생성, 제거 또는 이름이 변경되었습니다. |
FILE_NOTIFY_CHANGE_NAME | 이 디렉터리의 이름이 변경되었습니다. |
FILE_NOTIFY_CHANGE_ATTRIBUTES | 이 파일의 특성 값(예: 마지막 액세스 시간)이 변경되었습니다. |
FILE_NOTIFY_CHANGE_SIZE | 이 파일의 크기가 변경되었습니다. |
FILE_NOTIFY_CHANGE_LAST_WRITE | 이 파일의 마지막 수정 시간이 변경되었습니다. |
FILE_NOTIFY_CHANGE_LAST_ACCESS | 이 파일의 마지막 액세스 시간이 변경되었습니다. |
FILE_NOTIFY_CHANGE_CREATION | 이 파일의 생성 시간이 변경되었습니다. |
FILE_NOTIFY_CHANGE_EA | 이 파일의 확장 특성이 수정되었습니다. |
FILE_NOTIFY_CHANGE_SECURITY | 이 파일의 보안 정보가 변경되었습니다. |
FILE_NOTIFY_CHANGE_STREAM_NAME | 이 디렉터리에서 파일 스트림이 추가, 삭제 또는 이름이 변경되었습니다. |
FILE_NOTIFY_CHANGE_STREAM_SIZE | 이 파일 스트림의 크기가 변경되었습니다. |
FILE_NOTIFY_CHANGE_STREAM_WRITE | 이 파일 스트림의 데이터가 변경되었습니다. |
[in] NotifyCallbackData
알림 목록에 추가할 작업의 콜백 데이터 구조에 대한 포인터입니다. 이 매개 변수는 필수이며 NULL일 수 없습니다.
[in, optional] TraverseCallback
디렉터리 트리에서 감시 중인 하위 디렉터리에서 변경이 발생할 때 호출할 콜백 루틴에 대한 선택적 포인터입니다. 이 포인터를 사용하면 파일 시스템에서 감시자가 해당 디렉터리에 대한 액세스 권한을 트래버스하는지 여부를 검사 수 있습니다. 이러한 호출자 제공 루틴은 다음과 같이 선언됩니다.
NTSTATUS
(*PCHECK_FOR_TRAVERSE_ACCESS) (
IN PVOID NotifyContext, // FsContext
IN PVOID TargetContext, // Context pointer
IN PSECURITY_SUBJECT_CONTEXT SubjectContext // SubjectContext
);
TargetContext 매개 변수에 대한 자세한 내용은 FsRtlNotifyFullReportChange 루틴의 TargetContext 매개 변수를 참조하세요.
[in, optional] SubjectContext
TraverseCallback에 전달할 컨텍스트 구조체에 대한 포인터입니다. FltNotifyFilterChangeDirectory 는 컨텍스트를 해제하고 사용한 후 구조를 해제합니다. TraverseCallback 루틴이 제공되면 SubjectContext가 해당 루틴에 SubjectContext 매개 변수로 전달됩니다.
[in, optional] FilterCallback
디렉터리 변경이 발생할 때 호출할 콜백 루틴에 대한 선택적 포인터입니다. 이 콜백 루틴이 TRUE를 반환하면 FsRtlNotifyFilterReportChange 는 알림 목록에서 보류 중인 IRP_MN_NOTIFY_CHANGE_DIRECTORY 작업을 완료합니다. 그렇지 않으면 그렇지 않습니다. 이러한 호출자 제공 루틴은 다음과 같이 선언됩니다.
BOOLEAN
(*PFILTER_REPORT_CHANGE) (
IN PVOID NotifyContext, // FsContext
IN PVOID FilterContext // Context pointer
);
반환 값
없음
설명
미니필터 드라이버는 변경 디렉터리 작업을 알리기 위해 등록한 PFLT_PRE_OPERATION_CALLBACK(사전 운용 콜백 루틴)에서 FltNotifyFilterChangeDirectory를 호출할 수 있습니다. 이러한 작업에는 IRP_MJ_DIRECTORY_CONTROL 주 함수 코드와 IRP_MN_NOTIFY_CHANGE_DIRECTORY 부 함수 코드가 있습니다.
미니필터 드라이버는 FltNotifyFilterChangeDirectory 를 호출하여 작업에 대한 콜백 데이터 구조를 보관하고 현재 볼륨의 알림 목록에 알림 구조를 추가하는 알림 구조를 만듭니다.
FltNotifyFilterChangeDirectory 는 다음을 수행합니다.
- 작업의 파일 개체가 정리되었는지 여부를 확인합니다. 이 경우 FltNotifyFilterChangeDirectory는 상태 STATUS_NOTIFY_CLEANUP 사용하여 작업을 완료하고 알림 목록에 추가하지 않습니다.
- 작업의 파일 개체가 정리되지 않은 경우 FltNotifyFilterChangeDirectory 는 알림 목록에 지정된 FsContext 값에 대한 알림 구조가 이미 포함되어 있는지 확인합니다. 이러한 알림 구조가 발견되고 보고서에 보류 중인 변경 내용이 있는 경우 FltNotifyFilterChangeDirectory 는 NotifyCallbackData 매개 변수가 가리키는 콜백 데이터 구조를 완료합니다. 알림 구조체를 찾았지만 보고 보류 중인 변경 내용이 없는 경우 FltNotifyFilterChangeDirectory 는 알림 구조에 작업을 추가합니다. 이러한 알림 구조가 없으면 FltNotifyFilterChangeDirectory 는 작업에 대한 알림 구조를 만들어 목록에 삽입합니다.
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | 유니버설 |
헤더 | fltkernel.h(Fltkernel.h 포함) |
라이브러리 | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL |