FLT_FILE_NAME_INFORMATION 구조체(fltkernel.h)

FLT_FILE_NAME_INFORMATION 구조에는 파일 이름 정보가 포함됩니다.

구문

typedef struct _FLT_FILE_NAME_INFORMATION {
  USHORT                     Size;
  FLT_FILE_NAME_PARSED_FLAGS NamesParsed;
  FLT_FILE_NAME_OPTIONS      Format;
  UNICODE_STRING             Name;
  UNICODE_STRING             Volume;
  UNICODE_STRING             Share;
  UNICODE_STRING             Extension;
  UNICODE_STRING             Stream;
  UNICODE_STRING             FinalComponent;
  UNICODE_STRING             ParentDir;
} FLT_FILE_NAME_INFORMATION, *PFLT_FILE_NAME_INFORMATION;

멤버

Size

FLT_FILE_NAME_INFORMATION 구조체의 크기(바이트)입니다.

NamesParsed

FltParseFileNameInformation에 의해 이름 문자열에서 구문 분석된 이름 구성 요소를 나타내는 플래그의 비트 마스크입니다. Name 문자열을 구문 분석할 때 FltParseFileNameInformation은 구성 요소가 문자열에 있는지 여부에 관계없이 각 구성 요소에 대해 이 플래그를 설정합니다. 이러한 값은 OR 연산자를 사용하여 결합할 수 있습니다.

플래그 구성 요소
FLTFL_FILE_NAME_PARSED_FINAL_COMPONENT FinalComponent
FLTFL_FILE_NAME_PARSED_EXTENSION 내선 번호
FLTFL_FILE_NAME_PARSED_STREAM 스트림
FLTFL_FILE_NAME_PARSED_PARENT_DIR ParentDir

Format

이름 멤버에 저장된 이름 정보의 형식입니다. 이 멤버는 다음 값 중 하나일 수 있습니다. (이러한 형식에 대한 설명은 다음 설명 섹션을 참조하세요.)

의미
FLT_FILE_NAME_NORMALIZED Name 멤버에는 파일의 정규화된 이름이 포함됩니다.
FLT_FILE_NAME_OPENED Name 멤버에는 파일을 열 때 사용된 이름이 포함됩니다. 이 이름 문자열은 정규화되지 않습니다.
FLT_FILE_NAME_SHORT Name 멤버는 파일의 짧은 이름(8.3)을 포함합니다. 파일의 짧은 이름에는 볼륨 이름, 디렉터리 경로 또는 스트림 이름이 포함되지 않습니다. 이 이름 문자열은 정규화되지 않습니다.

Name

형식멤버에서 지정한 대로 형식이 지정된 파일 이름 문자열을 포함하는 UNICODE_STRING 구조체입니다.

Volume

이름 문자열에서 구문 분석된 볼륨 이름을 포함하는 UNICODE_STRING 구조체입니다. Format이 FLT_FILE_NAME_SHORT 경우 Volume.Length는 0입니다.

Share

원격 파일의 이름 문자열에서 구문 분석된 네트워크 공유 이름을 포함하는 UNICODE_STRING 구조체입니다. Format이 FLT_FILE_NAME_SHORT 경우 Share.Length는 0입니다.

Extension

이름 문자열에서 구문 분석된 확장을 포함하는 구조체를 UNICODE_STRING. 확장이 없으면 FltParseFileNameInformationExtension.Length 를 0으로 설정합니다.

Stream

UNICODE_STRING 문자열에서 구문 분석된 스트림 이름을 포함하는 구조체입니다. 스트림 이름을 찾을 수 없거나 Format이 FLT_FILE_NAME_SHORT 경우 FltParseFileNameInformationStream 설정합니다. 길이를 0으로 설정합니다.

FinalComponent

이름 문자열에서 구문 분석된 최종 이름 구성 요소가 포함된 UNICODE_STRING 구조체입니다. 최종 구성 요소 이름을 찾을 수 없거나 Format 이 FLT_FILE_NAME_SHORT 경우 FltParseFileNameInformationFinalComponent.Length 를 0으로 설정합니다.

ParentDir

이름 문자열에서FltParseFileNameInformation으로 구문 분석된 부모 디렉터리 이름을 포함하는 UNICODE_STRING 구조체입니다. 부모 디렉터리 이름을 찾을 수 없거나 Format 이 FLT_FILE_NAME_SHORT 경우 FltParseFileNameInformationParentDir.Length 를 0으로 설정합니다.

설명

Name 멤버에는 다음 중 하나가 포함됩니다.

  • 파일의 정규화된 이름
  • 파일의 열린 이름
  • 파일의 짧은 이름
다음이 모두 true인 경우 파일 이름은 정규화된 것으로 간주됩니다.
  • 사용자가 파일 ID로 파일을 열었지만 전체 경로에 대한 트래버스 권한이 없는 한 볼륨 이름을 포함하여 파일에 대한 전체 디렉터리 경로를 포함합니다. (자세한 내용은 FltGetFileNameInformation을 참조하세요.)
  • 볼륨 이름은 볼륨의 존재하지 않는 디바이스 개체 이름입니다(예: "\Device\HarddiskVolume1").
  • 모든 짧은 이름은 해당하는 긴 이름으로 확장됩니다.
  • 모든 후행 ":$DATA" 또는 "::$DATA" 문자열은 스트림 이름에서 제거됩니다.
  • 모든 탑재 지점이 확인됩니다.
다음은 로컬 파일의 정규화된 파일 이름의 예입니다.
\Device\HarddiskVolume1\Documents and Settings\MyUser\My Documents\Test Results.txt:stream1

다음은 원격 파일의 정규화된 파일 이름의 예입니다.

\Device\LanManRedirector\MyServer\MyShare\Documents and Settings\MyUser\My Documents\Test Results.txt:stream1

파일의 열린 이름은 파일을 열 때 사용한 이름입니다. 정규화된 이름과 마찬가지로 볼륨 이름을 포함하여 파일의 전체 디렉터리 경로를 포함합니다. 다음과 같은 방법으로 정규화된 이름과 다릅니다.

  • 파일의 디렉터리 경로에는 짧은 이름과 긴 이름이 포함될 수 있습니다.
  • 후행 ":$DATA" 및 "::$DATA" 문자열은 스트림 이름에서 제거되지 않습니다.
  • 탑재 지점이 확인되지 않습니다.
다음은 로컬 파일에 대해 열린 파일 이름의 예입니다.
\Device\HarddiskVolume1\Docume~1\MyUser\MYDOCU~1\Test Results.txt:stream1:$DATA

다음은 원격 파일에 대해 열린 파일 이름의 예입니다.

\Device\LanManRedirector\MyServer\MyShare\Documents and Settings\MyUser\My Documents\Test Results.txt:stream1

파일의 짧은 이름은 파일 이름의 최종 구성 요소에 대한 짧은(8.3) 이름입니다. 파일이 열릴 때 생성되므로 미개봉된 파일 개체에는 짧은 이름을 사용할 수 없으며 만들기 디스패치("미리 만들기") 경로에서 사용할 수 없습니다. NTFS 스트림 파일 개체에도 사용할 수 없습니다. 열려 있는 모든 파일에 짧은 파일 이름이 있는 것은 아닙니다. 예를 들어 짧은 파일 이름 생성이 비활성화된 NTFS 파티션에서는 짧은 파일 이름이 없는 파일이 없습니다.

다음은 파일에 대한 짧은 이름의 예입니다.

TestRe~1.txt

파일에 대한 FLT_FILE_NAME_INFORMATION 구조를 가져오려면 FltGetFileNameInformation, FltGetFileNameInformationUnsafe 또는 FltGetDestinationFileNameInformation을 호출합니다. 이러한 루틴은 모든 미니필터가 공유하는 필터 관리자 소유의 FLT_FILE_NAME_INFORMATION 구조체에 대한 포인터를 반환합니다.

참고 이러한 구조체는 필터 관리자에 의해 캐시되므로 모든 미니필터가 사용할 수 있으므로 FLT_FILE_NAME_INFORMATION 구조체의 내용을 수정하지 마세요. 미니필터가 어떤 식으로든 이 정보를 수정해야 하는 경우 먼저 정보를 다른 버퍼에 복사해야 합니다.
 
NTFS 및 FAT와 같은 파일 시스템은 볼륨별 터널 캐시를 사용하여 이름을 바꾸거나 연결하거나 삭제하는 파일에 대한 파일 이름 및 기타 메타데이터를 간략하게 보존합니다. 이 파일 이름 터널링으로 인해 FltGetFileNameInformation, FltGetFileNameInformationUnsafe 또는 FltGetDestinationFileNameInformation에 대한 사전 운용 호출에서 반환된 정규화된 파일 이름 정보의 최종 구성 요소가 무효화될 수 있습니다. 미니필터가 만들기, 하드 링크 또는 이름 바꾸기 작업에 대한 사전 작업 콜백(PFLT_PRE_OPERATION_CALLBACK) 루틴에서 정규화된 파일 이름 정보를 검색하는 경우 파일에 대한 올바른 파일 이름 정보를 검색하려면 해당 PFLT_POST_OPERATION_CALLBACK(사후 콜백) 루틴에서 FltGetTunneledName을 호출해야 합니다.

여러 UNICODE_STRING 구조체가 포함되어 있지만 FLT_FILE_NAME_INFORMATION 구조체의 모든 UNICODE_STRING 구조체가 단일 버퍼를 공유하므로 FLT_FILE_NAME_INFORMATION 구조체는 메모리의 많은 공간을 차지하지 않습니다.

이름 문자열의 내용을 구문 분석하려면 FltParseFileNameInformation을 호출합니다. 이 루틴은 이 구조체의 Extension, Stream, FinalComponent, ParentDirNamesParsed 멤버의 값을 설정합니다.

미니필터는 FltReleaseFileNameInformation 을 호출하여 더 이상 필요하지 않은 FLT_FILE_NAME_INFORMATION 구조를 해제합니다.

요구 사항

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

추가 정보

FLT_FILE_NAME_OPTIONS

FltGetDestinationFileNameInformation

FltGetFileNameInformation

FltGetFileNameInformationUnsafe

FltGetTunneledName

FltParseFileName

FltParseFileNameInformation

FltReferenceFileNameInformation

FltReleaseFileNameInformation

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK

UNICODE_STRING