FsRtlNotifyFullChangeDirectory 함수(ntifs.h)
FsRtlNotifyFullChangeDirectory 루틴은 알림 요청에 대한 알림 구조를 만들고 지정된 알림 목록에 추가합니다.
구문
void FsRtlNotifyFullChangeDirectory(
[in] PNOTIFY_SYNC NotifySync,
[in] PLIST_ENTRY NotifyList,
[in] PVOID FsContext,
[in] PSTRING FullDirectoryName,
[in] BOOLEAN WatchTree,
[in] BOOLEAN IgnoreBuffer,
[in] ULONG CompletionFilter,
[in, optional] PIRP NotifyIrp,
[in, optional] PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback,
[in, optional] PSECURITY_SUBJECT_CONTEXT SubjectContext
);
매개 변수
[in] NotifySync
현재 볼륨의 알림 목록에 대한 불투명 동기화 개체에 대한 포인터입니다.
[in] NotifyList
알림 목록의 헤드에 대한 포인터입니다. 목록의 각 요소는 불투명 알림 구조체입니다.
[in] FsContext
특정 파일 개체에 속하는 것으로 만들 알림 구조를 식별하기 위해 파일 시스템에서 할당한 고유 값에 대한 포인터입니다. TraverseCallback 루틴이 제공되면 FsContext가 해당 루틴에 NotifyContext 매개 변수로 전달됩니다.
[in] FullDirectoryName
이 알림 구조와 연결된 디렉터리의 전체 이름을 포함하는 ANSI 또는 유니코드 문자열에 대한 포인터입니다. NotifyIrp이 NULL이면 무시됩니다.
[in] WatchTree
이 디렉터리의 모든 하위 디렉터리도 확인해야 하는 경우 TRUE로 설정합니다. 디렉터리 자체만 감시할 경우 FALSE로 설정합니다. NotifyIrp이 NULL이면 무시됩니다.
[in] IgnoreBuffer
사용자 버퍼를 무시하고 디렉터리를 강제로 다시 열거하려면 TRUE로 설정합니다. 이 작업은 작업의 속도를 빨라줍니다. NotifyIrp이 NULL이면 무시됩니다.
[in] CompletionFilter
보류 중인 알림 IRP의 큐가 완료되도록 해야 하는 파일 또는 하위 디렉터리의 변경 유형을 지정하는 플래그의 비트 마스크입니다. 다음 표에서는 가능한 플래그 값에 대해 설명합니다.
플래그 | 의미 |
---|---|
FILE_NOTIFY_CHANGE_FILE_NAME(0x0001) | 이 디렉터리에서 파일이 추가, 삭제 또는 이름이 변경되었습니다. |
FILE_NOTIFY_CHANGE_DIR_NAME(0x0002) | 하위 디렉터리가 생성, 제거 또는 이름이 변경되었습니다. |
FILE_NOTIFY_CHANGE_NAME(0x0003) | 이 디렉터리의 이름이 변경되었습니다. |
FILE_NOTIFY_CHANGE_ATTRIBUTES(0x0004) | 이 파일의 특성 값(예: 마지막 액세스 시간)이 변경되었습니다. |
FILE_NOTIFY_CHANGE_SIZE(0x0008) | 이 파일의 크기가 변경되었습니다. |
FILE_NOTIFY_CHANGE_LAST_WRITE(0x0010) | 이 파일의 마지막 수정 시간이 변경되었습니다. |
FILE_NOTIFY_CHANGE_LAST_ACCESS(0x0020) | 이 파일의 마지막 액세스 시간이 변경되었습니다. |
FILE_NOTIFY_CHANGE_CREATION(0x0040) | 이 파일의 생성 시간이 변경되었습니다. |
FILE_NOTIFY_CHANGE_EA(0x0080) | 이 파일의 확장 특성이 수정되었습니다. |
FILE_NOTIFY_CHANGE_SECURITY(0x0100) | 이 파일의 보안 정보가 변경되었습니다. |
FILE_NOTIFY_CHANGE_STREAM_NAME(0x0200) | 이 디렉터리에서 파일 스트림이 추가, 삭제 또는 이름이 변경되었습니다. |
FILE_NOTIFY_CHANGE_STREAM_SIZE(0x0400) | 이 파일 스트림의 크기가 변경되었습니다. |
FILE_NOTIFY_CHANGE_STREAM_WRITE(0x0800) | 이 파일 스트림의 데이터가 변경되었습니다. |
NotifyIrp이 NULL인 경우 CompletionFilter는 무시됩니다.
[in, optional] NotifyIrp
알림 변경 시 완료할 IRP에 대한 포인터입니다. NotifyIrp이 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 매개 변수를 참조하세요. NotifyIrp이 NULL인 경우 TraverseCallback은 무시됩니다.
[in, optional] SubjectContext
TraverseCallback에 전달할 SECURITY_SUBJECT_CONTEXT 구조체에 대한 포인터입니다. FsRtlNotifyFullChangeDirectory 는 컨텍스트를 해제하고 사용 후 구조를 해제합니다. NotifyIrp이 NULL이면 무시됩니다. TraverseCallback 루틴이 제공되면 SubjectContext가 해당 루틴에 SubjectContext 매개 변수로 전달됩니다.
반환 값
없음
설명
FsRtlNotifyFullChangeDirectory 는 알림 변경 요청을 받은 파일 시스템에서 호출됩니다. 이 요청은 주 함수 코드 IRP_MJ_DIRECTORY_CONTROL, 부 함수 코드 IRP_MN_NOTIFY_CHANGE_DIRECTORY IRP로 수신됩니다.
NotifyIrp이 NULL인 경우 FsRtlNotifyFullChangeDirectory는 알림 목록에 이 파일 개체를 참조하는 보류 중인 IRP가 포함되어 있는지 확인하고, 있는 경우 STATUS_DELETE_PENDING 사용하여 완료합니다.
NotifyIrp이 NULL이 아닌 경우 FsRtlNotifyFullChangeDirectory는 다음을 수행합니다.
파일 개체가 정리되었는지 여부를 확인합니다. 이 경우 FsRtlNotifyFullChangeDirectory는 상태 STATUS_NOTIFY_CLEANUP 사용하여 IRP에 알림을 완료합니다.
파일 개체가 정리되지 않은 경우 FsRtlNotifyFullChangeDirectory 는 이 볼륨에 대한 알림 목록에 이 변경에 대한 알림 구조가 이미 포함되어 있는지 확인합니다. 이 경우 FsRtlNotifyFullChangeDirectory 는 보류 중인 모든 IRP를 완료합니다. 그렇지 않은 경우 FsRtlNotifyFullChangeDirectory 는 알림 IRP를 보류 중으로 표시하고, 알림 구조를 만들고, 목록에 삽입합니다.
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | 유니버설 |
헤더 | ntifs.h(Ntifs.h 포함) |
라이브러리 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI 규정 준수 규칙 | HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm) |
추가 정보
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기