다음을 통해 공유


FILE_STREAM_INFORMATION 구조체(ntifs.h)

FILE_STREAM_INFORMATION 구조체는 파일의 스트림을 열거하는 데 사용됩니다.

구문

typedef struct _FILE_STREAM_INFORMATION {
  ULONG         NextEntryOffset;
  ULONG         StreamNameLength;
  LARGE_INTEGER StreamSize;
  LARGE_INTEGER StreamAllocationSize;
  WCHAR         StreamName[1];
} FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;

멤버

NextEntryOffset

다음 FILE_STREAM_INFORMATION 항목의 오프셋입니다. 이 멤버를 따르는 다른 항목이 없으면 이 멤버는 0입니다.

StreamNameLength

StreamName 문자열의 길이(바이트)입니다.

StreamSize

스트림의 크기(바이트)입니다.

StreamAllocationSize

파일 스트림 할당 크기(바이트)입니다. 일반적으로 이 값은 기본 물리적 디바이스의 섹터 또는 클러스터 크기의 배수입니다.

StreamName[1]

스트림의 이름을 포함하는 유니코드 문자열입니다.

설명

FILE_STREAM_INFORMATION 구조체는 파일의 스트림을 열거하는 데 사용됩니다. 이 작업은 다음 방법 중 하나로 수행할 수 있습니다.

  • FltQueryInformationFile 또는 ZwQueryInformationFile을 호출하고 FileInformationClass 매개 변수에 FileStreamInformation을 지정합니다. 반환되는 경우 FileInformation 버퍼에는 각 파일 스트림에 대한 FILE_STREAM_INFORMATION 구조가 포함됩니다.

  • 파일 시스템에 IRP_MJ_QUERY_INFORMATION 요청을 보내고 FileInformationClass 매개 변수에 FileStreamInformation 을 지정합니다. 반환될 때 Irp-AssociatedIrp.SystemBuffer>에는 각 파일 스트림에 대한 FILE_STREAM_INFORMATION 구조가 포함됩니다.

이 정보를 쿼리하는 데 특정 액세스 권한이 필요하지 않습니다. 따라서 파일이 열려 있는 한 이 정보를 사용할 수 있습니다.

스트림 열거형에 대한 지원은 파일 시스템에 종속됩니다. 파일 시스템에서 스트림 열거형을 지원하지 않는 경우 이러한 요청에 대한 STATUS_INVALID_PARAMETER 또는 STATUS_NOT_IMPLEMENTED 반환해야 합니다.

파일 시스템에서 스트림 열거형을 지원하지만 파일에 명명되지 않은 기본 데이터 스트림 이외의 스트림이 없는 경우 파일 시스템은 "::$DATA" 또는 길이가 0인 유니코드 문자열을 StreamName으로 포함하는 단일 FILE_STREAM_INFORMATION 구조를 반환해야 합니다.

NTFS는 기본 데이터 스트림에 대한 StreamName 으로 "::$DATA"을 반환합니다.

명명된 데이터 스트림의 경우 NTFS는 스트림 이름에 ":$DATA"을 추가합니다. 예를 들어 이름이 "Authors"인 사용자 데이터 스트림의 경우 NTFS는 ":Authors:$DATA"를 StreamName으로 반환합니다.

ZwCreateFile과 같은 루틴을 호출하여 명명된 파일 스트림을 열 때 이름의 ":$DATA" 부분을 생략할 수 있습니다. 예를 들어 "Book"이라는 파일의 "Authors" 스트림을 열려면 호출자는 "Book:Authors" 또는 "Book:Authors:$DATA"를 스트림 이름으로 지정할 수 있습니다. 두 이름 모두 동일합니다.

FileInformation 매개 변수에서 FltQueryInformationFile 또는 ZwQueryInformationFile에 전달된 버퍼의 크기는 적어도 sizeof(FILE_STREAM_INFORMATION)여야 합니다. 이 버퍼가 각 파일 스트림에 대한 FILE_STREAM_INFORMATION 구조를 보유할 만큼 크지 않은 경우 FltQueryInformationFile 또는 ZwQueryInformationFile 은 STATUS_BUFFER_OVERFLOW 또는 STATUS_BUFFER_TOO_SMALL 반환합니다. FltQueryInformationFile 또는 ZwQueryInformationFile에 대한 이러한 실패한 호출은 필요한 버퍼 크기를 반환하지 않으므로 필터 드라이버는 버퍼가 충분히 커질 때까지 각 호출에서 더 큰 버퍼를 전달하는 FltQueryInformationFile 또는 ZwQueryInformationFile에 대해 하나 이상의 추가 호출을 수행해야 합니다.

명명된 데이터 스트림에 대한 지원은 파일 시스템별입니다. 파일 시스템 필터 드라이버는 파일 시스템이 다음 방법 중 하나로 명명된 스트림을 지원하는지 여부를 확인할 수 있습니다.

  • FltQueryVolumeInformation 또는 ZwQueryVolumeInformationFile을 호출하고 FsInformationClass 매개 변수에 FileFsAttributeInformation을 지정합니다. 반환할 때 FsInformation 버퍼에는 FILE_FS_ATTRIBUTE_INFORMATION 구조체가 포함됩니다. 이 구조체의 FileSystemAttributes 멤버에 FILE_NAMED_STREAMS 비트가 설정된 경우 파일 시스템은 명명된 스트림을 지원합니다.

  • 파일 시스템에 IRP_MJ_QUERY_VOLUME_INFORMATION 요청을 보내고 FsInformationClass 매개 변수에 FileFsAttributeInformation을 지정합니다. 반환되는 경우 Irp-AssociatedIrp.SystemBuffer>에는 FILE_FS_ATTRIBUTE_INFORMATION 구조체가 포함됩니다. 이 구조체의 FileSystemAttributes 멤버에 FILE_NAMED_STREAMS 비트가 설정된 경우 파일 시스템은 명명된 스트림을 지원합니다.

FILE_STREAM_INFORMATION 구조체는 LONGLONG(8 바이트) 경계에 맞춰야 합니다. 버퍼에 이러한 구조체가 두 개 이상 포함된 경우 마지막을 제외한 각 항목의 NextEntryOffset 값은 8 바이트 경계에 해당합니다.

요구 사항

요구 사항
헤더 ntifs.h(Ntifs.h, Fltkernel.h 포함)

추가 정보

FltQueryInformationFile

FltQueryVolumeInformation

IRP_MJ_QUERY_INFORMATION

IRP_MJ_QUERY_VOLUME_INFORMATION

ZwCreateFile

ZwQueryInformationFile

ZwQueryVolumeInformationFile