FS_FILTER_CALLBACK_DATA 구조체(ntifs.h)

FS_FILTER_CALLBACK_DATA FS_FILTER_CALLBACKS FS_FILTER_CALLBACK 또는 FS_FILTER_COMPLETION_CALLBACK 작업에 대한 콜백 데이터 구조입니다.

구문

typedef struct _FS_FILTER_CALLBACK_DATA {
  ULONG                 SizeOfFsFilterCallbackData;
  UCHAR                 Operation;
  UCHAR                 Reserved;
  struct _DEVICE_OBJECT *DeviceObject;
  struct _FILE_OBJECT   *FileObject;
  FS_FILTER_PARAMETERS  Parameters;
} FS_FILTER_CALLBACK_DATA, *PFS_FILTER_CALLBACK_DATA;

멤버

SizeOfFsFilterCallbackData

이 구조체의 크기(바이트)입니다. sizeof(FS_FILTER_CALLBACK_DATA)로 설정합니다.

Operation

콜백 루틴을 호출할 파일 시스템 작업입니다. 이 작업은 다음 중 하나일 수 있습니다.

  • FS_FILTER_ACQUIRE_FOR_SECTION_SYNCHRONIZATION
  • FS_FILTER_RELEASE_FOR_SECTION_SYNCHRONIZATION
  • FS_FILTER_ACQUIRE_FOR_MOD_WRITE
  • FS_FILTER_RELEASE_FOR_MOD_WRITE
  • FS_FILTER_ACQUIRE_FOR_CC_FLUSH
  • FS_FILTER_RELEASE_FOR_CC_FLUSH FS_FILTER_QUERY_OPEN

Reserved

시스템에서 사용하도록 예약되었습니다.

DeviceObject

이 작업에 대한 디바이스 개체입니다.

FileObject

이 작업의 파일 개체입니다.

Parameters

작업별 매개 변수를 포함하는 공용 구조체입니다. 설명 부분을 참조하세요.

설명

파일 시스템 또는 필터 드라이버의 DriverEntry 루틴에서 FsRtlRegisterFileSystemFilterCallbacks에 전달되는 FS_FILTER_CALLBACKS 구조체의 멤버입니다.

매개 변수 공용 구조체는 다음과 같이 정의됩니다.


typedef union _FS_FILTER_PARAMETERS {
    //
    //  AcquireForModifiedPageWriter
    //
    struct {
        PLARGE_INTEGER EndingOffset;
        PERESOURCE *ResourceToRelease;
    } AcquireForModifiedPageWriter;

    //
    //  ReleaseForModifiedPageWriter
    //
    struct {
        PERESOURCE ResourceToRelease;
    } ReleaseForModifiedPageWriter;

    //
    //  AcquireForSectionSynchronization
    //
    struct {
        FS_FILTER_SECTION_SYNC_TYPE SyncType;
        ULONG PageProtection;
        PFS_FILTER_SECTION_SYNC_OUTPUT OutputInformation;
        ULONG Flags;
    } AcquireForSectionSynchronization;

    //
    // QueryOpen
    //
    struct {
        PIRP Irp;
        PVOID FileInformation;
        PULONG Length;
        FILE_INFORMATION_CLASS FileInformationClass;
        NTSTATUS CompletionStatus;
    } QueryOpen;

    //
    //  Other
    //
    struct {
        PVOID Argument1;
        PVOID Argument2;
        PVOID Argument3;
        PVOID Argument4;
        PVOID Argument5;
    } Others;
} FS_FILTER_PARAMETERS, *PFS_FILTER_PARAMETERS;

FS_FILTER_PARAMETERS 공용 구조체의 구조체 멤버는 다음과 같이 설명됩니다.

  • AcquireForModifiedPageWriter

    • EndOffset: 작성 중인 마지막 바이트의 오프셋과 1개.
    • ResourceToRelease: 릴리스할 리소스입니다. 이 매개 변수에는 NULL 값이 없어야 합니다.
  • ReleaseForModifiedPageWriter

    • ResourceToRelease: 릴리스할 리소스입니다. 이 매개 변수에는 NULL 값이 없어야 합니다.
  • AcquireForSectionSynchronization

    • SyncType: 섹션에 대해 요청된 동기화 유형입니다. 섹션을 만드는 경우 SyncTypeCreateSection 으로 설정합니다. SyncType이면 이 고, 그렇지 않으면 입니다.

    • PageProtection: 섹션에 대해 요청된 페이지 보호의 유형입니다. SyncType이SyncTypeOther인 경우 0이어야 합니다. 그렇지 않으면 다음 플래그 중 하나일 수 있으며 PAGE_NOCACHE 사용할 수 있습니다.

      • PAGE_NOACCESS
      • PAGE_READONLY
      • PAGE_READWRITE
      • PAGE_WRITECOPY
      • PAGE_EXECUTE
      • PAGE_EXECUTE_READ
      • PAGE_EXECUTE_READWRITE
      • PAGE_EXECUTE_WRITECOPY
      • PAGE_GUARD
      • PAGE_NOCACHE
      • PAGE_WRITECOMBINE
    • OutputInformation: 섹션에 대한 확장 출력 정보를 포함하는 FS_FILTER_SECTION_SYNC_OUTPUT 구조체입니다.

    • Flags: SyncTypeSyncTypeCreateSection인 경우 Flags 는 다음 값 중 하나일 수 있습니다.

      • FS_FILTER_SECTION_SYNC_IN_FLAG_DONT_UPDATE_LAST_ACCESS(0x00000001): 파일 시스템은 생성되는 섹션을 통해 파일에 액세스하기 위한 마지막 액세스 시간을 업데이트해서는 안 됩니다.
      • FS_FILTER_SECTION_SYNC_IN_FLAG_DONT_UPDATE_LAST_WRITE(0x00000002): 파일 시스템은 생성되는 섹션을 통해 파일을 수정하기 위한 마지막 쓰기 시간을 업데이트해서는 안 됩니다.
  • QueryOpen

    • Irp: 이 작업과 연결된 IRP에 대한 포인터입니다.

    • FileInformation: 루틴이 파일 개체에 대해 요청된 정보를 쓰는 호출자가 할당한 버퍼에 대한 포인터입니다. FileInformationClass 멤버는 호출자가 요청하는 정보의 유형을 지정합니다.

    • 길이: FileInformation에서 가리키는 버퍼의 크기(바이트)입니다.

    • CompletionStatus: 최종 완료 상태 및 작업에 대한 정보를 수신하는 NTSTATUS 값입니다. PostQueryOpen 콜백에서 CompletionStatus를 설정하여 작업에 실패할 수 있습니다. 사후 콜백에는 반환 값이 없기 때문에 이 작업이 실패합니다. 이는 주로 사용되므로 PostQueryOpen 콜백은 느린 경로에 대한 대체를 요청하는 STATUS_FLT_DISALLOW_FSFILTER_IO 반환할 수 있습니다. 이렇게 하면 I/O 관리자가 파일의 열기/쿼리/닫기를 수행하여 요청을 서비스합니다. 마찬가지로 PreQueryOpen 콜백은 STATUS_FLT_DISALLOW_FSFILTER_IO 반환하여 느린 경로에 대한 대체를 요청할 수 있습니다.

    • FileInformationClass: FileInformation 이 가리키는 버퍼에서 파일에 대해 반환할 정보의 형식입니다. 디바이스 및 중간 드라이버는 다음 FILE_INFORMATION_CLASS 값을 지정할 수 있습니다. 다른 값으로 인해 호출이 실패하고 PreQueryOpen/PostQueryOpen 호출에 전달되지 않아야 합니다.

    FILE_INFORMATION_CLASS 값 반환된 정보 유형
    FileStatInformation FILE_STAT_INFORMATION 구조체입니다. 이 구조체에는 액세스 마스크가 포함되어 있습니다. 액세스 마스크에 대한 자세한 내용은 ACCESS_MASK 참조하세요.
    FileStatLxInformation FILE_STAT_LX_INFORMATION 구조체입니다. 이 구조체에는 액세스 마스크가 포함되어 있습니다. 액세스 마스크에 대한 자세한 내용은 ACCESS_MASK 참조하세요.
    FileCaseSensitiveInformation FILE_CASE_SENSITIVE_INFORMATION 구조체입니다.
  • 기타

    • Argument1: 나중에 사용할 수 있습니다.
    • Argument2: 나중에 사용할 수 있습니다.
    • 인수3: 나중에 사용할 수 있습니다.
    • Argument4: 나중에 사용할 수 있습니다.
    • 인수5: 나중에 사용할 수 있습니다.

요구 사항

요구 사항
헤더 ntifs.h

추가 정보

FS_FILTER_CALLBACKS

FsRtlRegisterFileSystemFilterCallbacks