다음을 통해 공유


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 매개 변수에 대한 자세한 내용은 FsRtlNotifyFullReportChangeTargetContext 매개 변수를 참조하세요. 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)

참고 항목

FsRtlNotifyFullReportChange

IRP_MJ_DIRECTORY_CONTROL

SECURITY_SUBJECT_CONTEXT