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 값에 대한 알림 구조가 이미 포함되어 있는지 확인합니다. 이러한 알림 구조가 발견되고 보고서에 보류 중인 변경 내용이 있는 경우 FltNotifyFilterChangeDirectoryNotifyCallbackData 매개 변수가 가리키는 콜백 데이터 구조를 완료합니다. 알림 구조가 발견되었지만 보고서에 보류 중인 변경 내용이 없는 경우 FltNotifyFilterChangeDirectory 알림 구조에 작업을 추가합니다. 이러한 알림 구조가 없으면 FltNotifyFilterChangeDirectory 작업에 대한 알림 구조를 만들어 목록에 삽입합니다.
요구 사항
요구 | 값 |
---|---|
대상 플랫폼 | 보편적 |
헤더 | fltkernel.h(Fltkernel.h 포함) |
라이브러리 | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL |