FLT_TAG_DATA_BUFFER 구조체(fltkernel.h)

FLT_TAG_DATA_BUFFER 구조체에는 재분석 지점 태그에 대한 정보가 포함됩니다.

구문

typedef struct _FLT_TAG_DATA_BUFFER {
  ULONG  FileTag;
  USHORT TagDataLength;
  USHORT UnparsedNameLength;
  union {
    struct {
      USHORT SubstituteNameOffset;
      USHORT SubstituteNameLength;
      USHORT PrintNameOffset;
      USHORT PrintNameLength;
      ULONG  Flags;
      WCHAR  PathBuffer[1];
    } SymbolicLinkReparseBuffer;
    struct {
      USHORT SubstituteNameOffset;
      USHORT SubstituteNameLength;
      USHORT PrintNameOffset;
      USHORT PrintNameLength;
      WCHAR  PathBuffer[1];
    } MountPointReparseBuffer;
    struct {
      UCHAR DataBuffer[1];
    } GenericReparseBuffer;
    struct {
      GUID  TagGuid;
      UCHAR DataBuffer[1];
    } GenericGUIDReparseBuffer;
  };
} FLT_TAG_DATA_BUFFER, *PFLT_TAG_DATA_BUFFER;

멤버

FileTag

재분석 지점을 고유하게 식별하는 태그입니다. ntifs.h에 정의된 Microsoft 정의 IO_REPARSE_TAG_XXX 값 또는 ISV 정의 값 중 하나일 수 있습니다.

TagDataLength

DataBuffer 멤버가 가리키는 재분석 데이터의 크기(바이트)입니다.

UnparsedNameLength

연결된 파일 개체의 FileName 멤버가 가리키는 파일 이름의 분리되지 않은 부분의 길이(바이트)입니다. FileName 멤버에 대한 자세한 내용은 FILE_OBJECT.

SymbolicLinkReparseBuffer

FileTag가 IO_REPARSE_TAG_SYMLINK 경우 이 구조를 사용하여 페이로드를 해석할 수 있습니다.

SymbolicLinkReparseBuffer.SubstituteNameOffset

PathBuffer 배열에 있는 대체 이름 문자열의 오프셋(바이트)입니다. 배열 인덱스 가져오기를 위해서는 이 오프셋을 sizeof(WCHAR)로 나누어야 합니다.

SymbolicLinkReparseBuffer.SubstituteNameLength

대체 이름 문자열의 길이(바이트)입니다. 이 문자열이 NULL_terminated 경우 SubstituteNameLength 는 UNICODE_NULL 종결자에 대한 공간을 포함하지 않습니다.

SymbolicLinkReparseBuffer.PrintNameOffset

PathBuffer 배열에 있는 인쇄 이름 문자열의 오프셋(바이트)입니다. 배열 인덱스 가져오기를 위해서는 이 오프셋을 sizeof(WCHAR)로 나누어야 합니다.

SymbolicLinkReparseBuffer.PrintNameLength

인쇄 이름 문자열의 길이(바이트)입니다. 이 문자열이 NULL_terminated 경우 PrintNameLength 는 UNICODE_NULL 종결자에 대한 공간을 포함하지 않습니다.

SymbolicLinkReparseBuffer.Flags

기호 링크가 절대 링크인지 상대 링크인지를 나타냅니다. Flags에 SYMLINK_FLAG_RELATIVE 포함된 경우 PathBuffer(오프셋 SubstituteNameOffset)에 포함된 기호 링크가 상대 링크로 처리됩니다. 그렇지 않으면 절대 링크로 처리됩니다.

SymbolicLinkReparseBuffer.PathBuffer[1]

경로 문자열의 첫 번째 문자입니다. 이 문자는 메모리에서 문자열의 나머지 부분 뒤에 잇습니다. 경로 문자열에는 대체 이름 문자열과 인쇄 이름 문자열이 포함됩니다. 대체 이름 및 인쇄 이름 문자열은 PathBuffer에 임의의 순서로 표시할 수 있습니다. PathBuffer에서 대체 이름 및 인쇄 이름 문자열을 찾으려면 SubstituteNameOffset, SubstituteNameLength, PrintNameOffsetPrintNameLength 멤버를 사용합니다.

MountPointReparseBuffer

FileTag가 IO_REPARSE_TAG_MOUNT_POINT 경우 이 구조를 사용하여 페이로드를 해석할 수 있습니다.

MountPointReparseBuffer.SubstituteNameOffset

PathBuffer 배열에 있는 대체 이름 문자열의 오프셋(바이트)입니다. 배열 인덱스 가져오기를 위해서는 이 오프셋을 sizeof(WCHAR)로 나누어야 합니다.

MountPointReparseBuffer.SubstituteNameLength

대체 이름 문자열의 길이(바이트)입니다. 이 문자열이 NULL_terminated 경우 SubstituteNameLength 는 UNICODE_NULL 종결자에 대한 공간을 포함하지 않습니다.

MountPointReparseBuffer.PrintNameOffset

PathBuffer 배열에 있는 인쇄 이름 문자열의 오프셋(바이트)입니다. 배열 인덱스 가져오기를 위해서는 이 오프셋을 sizeof(WCHAR)로 나누어야 합니다.

MountPointReparseBuffer.PrintNameLength

인쇄 이름 문자열의 길이(바이트)입니다. 이 문자열이 NULL_terminated 경우 PrintNameLength 는 UNICODE_NULL 종결자에 대한 공간을 포함하지 않습니다.

MountPointReparseBuffer.PathBuffer[1]

경로 문자열의 첫 번째 문자입니다. 이 문자는 메모리에서 문자열의 나머지 부분 뒤에 잇습니다. 경로 문자열에는 대체 이름 문자열과 인쇄 이름 문자열이 포함됩니다. 대체 이름 및 인쇄 이름 문자열은 PathBuffer에 임의의 순서로 표시할 수 있습니다. PathBuffer에서 대체 이름 및 인쇄 이름 문자열을 찾으려면 SubstituteNameOffset, SubstituteNameLength, PrintNameOffsetPrintNameLength 멤버를 사용합니다.

GenericReparseBuffer

이 구조를 사용하여 Microsoft 정의 IO_REPARSE_TAG_XXX 태그에 대한 페이로드를 해석할 수 있습니다.

GenericReparseBuffer.DataBuffer[1]

재분석 지점에 대한 사용자 정의 데이터가 포함된 버퍼에 대한 포인터입니다.

GenericGUIDReparseBuffer

이 구조를 사용하여 IO_REPARSE_TAG_XXX 태그에 대한 페이로드를 해석할 수 있습니다.

GenericGUIDReparseBuffer.TagGuid

재분석 지점의 유형을 식별하는 GUID(Globally Unique Identifier)입니다. FileTag가 Microsoft 태그가 아닌 경우 이 멤버는 NULL일 수 없습니다.

GenericGUIDReparseBuffer.DataBuffer[1]

재분석 지점에 대한 사용자 정의 데이터가 포함된 버퍼에 대한 포인터입니다.

설명

미니 필터는 FLT_TAG_DATA_BUFFER 구조를 사용하여 재분석 지점 태그에 대한 정보를 저장할 수 있습니다.

공용 구조체에서 GenericGUIDReparseBuffer 구조를 사용하여 IO_REPARSE_TAG_XXX 태그에 대한 페이로드를 해석하거나 필요에 따라 공용 구조체 내의 다른 구조체 중 하나를 다음과 같이 사용할 수 있습니다.

  • Microsoft 정의 IO_REPARSE_TAG_XXX 태그에 GenericReparseBuffer 구조를 사용합니다.

  • FileTag가 IO_REPARSE_TAG_SYMLINK 때 SymbolicLinkReparseBuffer 구조를 사용합니다.

  • FileTag가 IO_REPARSE_TAG_MOUNT_POINT 경우 MountPointReparseBuffer 구조를 사용합니다.

작업에 대한 재분석 지점 태그 데이터를 포함하는 FLT_TAG_DATA_BUFFER 구조체에 대한 포인터는 작업에 대한 FLT_CALLBACK_DATA 구조체의 TagData 멤버에 저장됩니다.

FLT_TAG_DATA_BUFFER_HEADER_SIZE 매크로는 FLT_TAG_DATA_BUFFER 구조체의 고정 부분의 크기를 반환합니다.

요구 사항

요구 사항
헤더 fltkernel.h(FltKernel.h 포함)

추가 정보

FILE_OBJECT

FLT_CALLBACK_DATA

FltTagFile

FltTagFileEx

FltUntagFile