ZwQueryInformationFile 함수(wdm.h)

ZwQueryInformationFile 루틴은 파일 개체에 대한 다양한 종류의 정보를 반환합니다.

구문

NTSYSAPI NTSTATUS ZwQueryInformationFile(
  [in]  HANDLE                 FileHandle,
  [out] PIO_STATUS_BLOCK       IoStatusBlock,
  [out] PVOID                  FileInformation,
  [in]  ULONG                  Length,
  [in]  FILE_INFORMATION_CLASS FileInformationClass
);

매개 변수

[in] FileHandle

파일 개체에 대한 핸들입니다. 핸들은 ZwCreateFile 또는 ZwOpenFile 을 성공적으로 호출하여 만들어 집니다.

[out] IoStatusBlock

최종 완료 상태 받는 IO_STATUS_BLOCK 구조체 및 작업에 대한 정보를 가리키는 포인터입니다. 정보 멤버는 이 루틴이 실제로 FileInformation 버퍼에 쓰는 바이트 수를 받습니다.

[out] FileInformation

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

[in] Length

FileInformation이 가리키는 버퍼의 크기(바이트)입니다.

[in] FileInformationClass

FileInformation이 가리키는 버퍼에서 파일에 대해 반환할 정보의 형식을 지정합니다. 디바이스 및 중간 드라이버는 다음 FILE_INFORMATION_CLASS 값을 지정할 수 있습니다.

FILE_INFORMATION_CLASS 값 반환된 정보 유형
FileBasicInformation (4) FILE_BASIC_INFORMATION 구조체입니다. 호출자가 DesiredAccess 매개 변수에 지정된 FILE_READ_ATTRIBUTES 플래그를 사용하여 파일을 열었어야 합니다.
FileStandardInformation (5) FILE_STANDARD_INFORMATION 구조체입니다. 호출자는 DesiredAccess에 대한 특정 요구 사항 없이 파일이 열려 있는 한 이 정보를 쿼리할 수 있습니다.
FileInternalInformation (6) FILE_INTERNAL_INFORMATION 구조체입니다. 이 구조체는 NTFS에서 파일을 고유하게 식별하는 64비트 파일 ID를 지정합니다. 다른 파일 시스템에서는 이 파일 ID가 고유하지 않습니다.
FileEaInformation (7) FILE_EA_INFORMATION 구조체입니다. 이 구조체는 파일과 연결된 확장 특성 블록의 크기를 지정합니다.
FileAccessInformation (8) FILE_ACCESS_INFORMATION 구조체입니다. 이 구조체에는 액세스 마스크가 포함되어 있습니다. 액세스 마스크에 대한 자세한 내용은 ACCESS_MASK 참조하세요.
FileNameInformation (9) FILE_NAME_INFORMATION 구조체입니다. 구조체는 파일의 전체 경로 또는 일부만 포함할 수 있습니다. 호출자는 DesiredAccess에 대한 특정 요구 사항 없이 파일이 열려 있는 한 이 정보를 쿼리할 수 있습니다. 파일 이름 구문에 대한 자세한 내용은 이 항목의 뒷부분에 있는 설명 섹션을 참조하세요.
FilePositionInformation (14) FILE_POSITION_INFORMATION 구조체입니다. 호출자는 DesiredAccess 매개 변수에 지정된 DesiredAccess FILE_READ_DATA 또는 FILE_WRITE_DATA 플래그와 CreateOptions 매개 변수에 지정된 FILE_SYNCHRONOUS_IO_ALERT 또는 FILE_SYNCHRONOUS_IO_NONALERT 플래그를 사용하여 파일을 열어야 합니다.
FileModeInformation (16) FILE_MODE_INFORMATION 구조체입니다. 이 구조체에는 파일에 액세스할 수 있는 모드를 지정하는 플래그 집합이 포함되어 있습니다. 이러한 플래그는 IoCreateFile 루틴의 CreateOptions 매개 변수에 지정할 수 있는 옵션의 하위 집합입니다.
FileAlignmentInformation (17) FILE_ALIGNMENT_INFORMATION 구조체입니다. 호출자는 DesiredAccess[**에 대한 특정 요구 사항 없이 파일이 열려 있는 한 이 정보를 쿼리할 수 있습니다. 이 정보는 CreateOptions 매개 변수에 지정된 FILE_NO_INTERMEDIATE_BUFFERING 플래그를 사용하여 파일을 연 경우에 유용합니다.
FileAllInformation (18) FILE_ALL_INFORMATION 구조체입니다. 여러 파일 정보 구조를 단일 구조로 결합하여 FILE_ALL_INFORMATION 파일에 대한 정보를 가져오는 데 필요한 쿼리 수를 줄입니다.
FileNetworkOpenInformation (34) FILE_NETWORK_OPEN_INFORMATION 구조체입니다. 호출자가 DesiredAccess 매개 변수에 지정된 FILE_READ_ATTRIBUTES 플래그를 사용하여 파일을 열었어야 합니다.
FileAttributeTagInformation (35) FILE_ATTRIBUTE_TAG_INFORMATION 구조체입니다. 호출자가 DesiredAccess 매개 변수에 지정된 FILE_READ_ATTRIBUTES 플래그를 사용하여 파일을 열었어야 합니다.
FileIoPriorityHintInformation (43) FILE_IO_PRIORITY_HINT_INFORMATION 구조체입니다. 호출자가 DesiredAccess 매개 변수에 지정된 FILE_READ_DATA 플래그로 파일을 열었어야 합니다.
FileIsRemoteDeviceInformation (51) FILE_IS_REMOTE_DEVICE_INFORMATION 구조체입니다. 호출자는 DesiredAccess에 대한 특정 요구 사항 없이 파일이 열려 있는 한 이 정보를 쿼리할 수 있습니다.
FileKnownFolderInformation (76) FILE_KNOWN_FOLDER_INFORMATION 구조체입니다. Windows Server 2022부터 사용할 수 있습니다.

반환 값

ZwQueryInformationFile은 STATUS_SUCCESS 또는 적절한 NTSTATUS 오류 코드를 반환합니다.

설명

ZwQueryInformationFile 은 지정된 파일 개체에 대한 정보를 반환합니다. 특정 디바이스 또는 파일 시스템에서 지원하지 않는 FILE_XXX_INFORMATION 구조체의 모든 멤버에서 0을 반환합니다.

FileInformationClass = FileNameInformation이면 파일 이름이 FILE_NAME_INFORMATION 구조에 반환됩니다. 파일 이름의 정확한 구문은 다음과 같은 여러 요인에 따라 달라집니다.

  • ZwCreateFile에 대한 전체 경로를 제출하여 파일을 연 경우 ZwQueryInformationFile은 해당 전체 경로를 반환합니다.

  • ObjectAttributes-RootDirectory> 핸들이 ZwCreateFile 호출에서 이름으로 열렸고 이후에 이 루트 디렉터리 핸들을 기준으로 ZwCreateFile에서 파일을 연 경우 ZwQueryInformationFile은 전체 경로를 반환합니다.

  • ZwCreateFile 호출에서 ObjectAttributes-RootDirectory> 핸들을 파일 ID(FILE_OPEN_BY_FILE_ID 플래그 사용)로 연 다음 이 루트 디렉터리 핸들을 기준으로 ZwCreateFile에서 파일을 연 경우 ZwQueryInformationFile은 상대 경로를 반환합니다.

  • 그러나 사용자에게 SeChangeNotifyPrivilege가 있는 경우 ZwQueryInformationFile 은 모든 경우에 전체 경로를 반환합니다.

  • 상대 경로만 반환되는 경우 파일 이름 문자열은 백슬래시로 시작되지 않습니다.

  • 전체 경로 및 파일 이름이 반환되면 문자열은 위치에 관계없이 단일 백슬래시로 시작됩니다. 따라서 파일 C:\dir1\dir2\filename.ext는 \dir1\dir2\filename.ext로 표시되며 파일 \server\share\dir1\dir2\filename.ext는 \server\share\dir1\dir2\filename.ext로 표시됩니다.

버퍼 오버플로로 인해 ZwQueryInformationFile이 실패하는 경우 FileNameInformation을 구현하는 드라이버는 버퍼에 맞는 만큼 파일 이름의 WCHAR 문자를 반환하고 FILE_NAME_INFORMATION 구조체의 FileNameLength 매개 변수에 필요한 전체 길이를 지정해야 합니다. 전체 파일 이름을 검색할 수 있도록 파일 이름 길이를 사용하여 쿼리를 다시 시작해야 합니다. 이 패턴을 따르지 않는 드라이버는 전체 파일 이름을 검색할 때까지 점진적으로 길이를 늘려야 할 수 있습니다. 파일 작업에 대한 자세한 내용은 드라이버에서 파일 사용을 참조하세요.

ZwQueryInformationFile의 호출자는 IRQL = PASSIVE_LEVEL 및 특수 커널 APC를 사용하도록 설정된 상태에서 실행되어야 합니다.

이 함수에 대한 호출이 사용자 모드에서 발생하는 경우 "ZwQueryInformationFile" 대신 "NtQueryInformationFile" 이름을 사용해야 합니다.

커널 모드 드라이버에서 호출하는 경우 Windows 네이티브 시스템 서비스 루틴의 NtXxxZwXxx 버전은 입력 매개 변수를 처리하고 해석하는 방식으로 다르게 동작할 수 있습니다. 루틴의 NtXxx****와 ZwXxx**** 버전 간의 관계에 대한 자세한 내용은 네이티브 시스템 서비스 루틴의 Nt 및 Zw 버전 사용을 참조하세요.

요구 사항

요구 사항
대상 플랫폼 유니버설
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL(설명 섹션 참조)
DDI 규정 준수 규칙 HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm)

추가 정보

FILE_ACCESS_INFORMATION

FILE_ALIGNMENT_INFORMATION

FILE_ALL_INFORMATION

FILE_ATTRIBUTE_TAG_INFORMATION

FILE_BASIC_INFORMATION

FILE_EA_INFORMATION

FILE_INTERNAL_INFORMATION

FILE_IO_PRIORITY_HINT_INFORMATION

FILE_IS_REMOTE_DEVICE_INFORMATION

FILE_MODE_INFORMATION

FILE_NAME_INFORMATION

FILE_NETWORK_OPEN_INFORMATION

FILE_POSITION_INFORMATION

FILE_STANDARD_INFORMATION

ZwCreateFile

ZwSetInformationFile