NtQueryDirectoryFile 함수(ntifs.h)

NtQueryDirectoryFile 루틴은 지정된 파일 핸들로 지정된 디렉터리의 파일에 대한 다양한 종류의 정보를 반환합니다.

구문

__kernel_entry NTSYSCALLAPI NTSTATUS NtQueryDirectoryFile(
  [in]           HANDLE                 FileHandle,
  [in, optional] HANDLE                 Event,
  [in, optional] PIO_APC_ROUTINE        ApcRoutine,
  [in, optional] PVOID                  ApcContext,
  [out]          PIO_STATUS_BLOCK       IoStatusBlock,
  [out]          PVOID                  FileInformation,
  [in]           ULONG                  Length,
  [in]           FILE_INFORMATION_CLASS FileInformationClass,
  [in]           BOOLEAN                ReturnSingleEntry,
  [in, optional] PUNICODE_STRING        FileName,
  [in]           BOOLEAN                RestartScan
);

매개 변수

[in] FileHandle

정보가 요청되는 디렉터리를 나타내는 파일 개체에 대해 NtCreateFile 또는 NtOpenFile 에서 반환되는 핸들입니다. 호출자가 Event 또는 ApcRoutine에 대해 NULL이 아닌 값을 지정하는 경우 비동기 I/O에 대해 파일 개체를 열어야 합니다.

[in, optional] Event

호출자가 만든 이벤트에 대한 선택적 핸들입니다. 이 매개 변수를 제공하면 요청된 작업이 완료되고 지정된 이벤트가 신호됨 상태로 설정될 때까지 호출자가 대기 상태로 전환됩니다. 이 매개 변수는 선택 사항이며 NULL일 수 있습니다. 호출자가 FileHandle 이 신호됨 상태로 설정될 때까지 대기하는 경우 NULL이어야 합니다.

[in, optional] ApcRoutine

요청된 작업이 완료될 때 호출할 선택적 호출자 제공 APC 루틴의 주소입니다. 이 매개 변수는 선택 사항이며 NULL일 수 있습니다. 파일 개체와 연결된 I/O 완성 개체가 있는 경우 이 매개 변수는 NULL이어야 합니다.

[in, optional] ApcContext

호출자가 APC를 제공하거나 I/O 완성 개체가 파일 개체와 연결된 경우 호출자가 결정한 컨텍스트 영역에 대한 선택적 포인터입니다. 작업이 완료되면 이 컨텍스트가 지정된 경우 APC에 전달되거나 I/O 관리자가 연결된 I/O 완료 개체에 게시하는 완료 메시지의 일부로 포함됩니다.

이 매개 변수는 선택 사항이며 NULL일 수 있습니다. ApcRoutine이 NULL이고 파일 개체와 연결된 I/O 완성 개체가 없는 경우 NULL이어야 합니다.

[out] IoStatusBlock

최종 완료 상태 및 작업에 대한 정보를 수신하는 IO_STATUS_BLOCK 구조체에 대한 포인터입니다. 데이터를 반환하는 호출이 성공하면 FileInformation 버퍼에 기록된 바이트 수가 구조체의 정보 멤버에 반환됩니다.

[out] FileInformation

파일에 대한 원하는 정보를 수신하는 버퍼에 대한 포인터입니다. 버퍼에 반환된 정보의 구조는 FileInformationClass 매개 변수에 의해 정의됩니다.

[in] Length

FileInformation이 가리키는 버퍼의 크기(바이트)입니다. 호출자는 지정된 FileInformationClass에 따라 이 매개 변수를 설정해야 합니다.

[in] FileInformationClass

디렉터리의 파일에 대해 반환할 정보의 형식입니다. 디렉터리의 파일에 대해 반환할 정보의 유형입니다. 가능한 값 목록은 NtQueryDirectoryFileExFileInformationClass 매개 변수를 참조하세요.

[in] ReturnSingleEntry

단일 항목만 반환해야 하는 경우 TRUE 로 설정하고, 그렇지 않으면 FALSE 로 설정합니다. 이 매개 변수가 TRUE이면 NtQueryDirectoryFile 은 발견된 첫 번째 항목만 반환합니다.

[in, optional] FileName

FileHandle에서 지정한 디렉터리 내에서 파일 이름(또는 와일드카드를 사용하는 경우 여러 파일)을 포함하는 호출자 할당 유니코드 문자열에 대한 선택적 포인터입니다. 이 매개 변수는 선택 사항이며 NULL일 수 있습니다.

FileName이 NULL이 아닌 경우 이름이 FileName 문자열과 일치하는 파일만 디렉터리 검사에 포함됩니다. FileName이 NULL이면 모든 파일이 포함됩니다.

FileName은 검색 식으로 사용되며 지정된 핸들에 대한 NtQueryDirectoryFile에 대한 첫 번째 호출에서 캡처됩니다. NtQueryDirectoryFile에 대한 후속 호출은 첫 번째 호출에서 검색 식 집합을 사용합니다. 후속 호출에 전달된 FileName 매개 변수는 무시됩니다.

[in] RestartScan

디렉터리의 첫 번째 항목에서 검사가 시작되면 TRUE 로 설정합니다. 이전 호출에서 검사를 다시 시작하면 FALSE 로 설정합니다.

특정 핸들에 대해 NtQueryDirectoryFile 루틴을 호출하면 RestartScan 매개 변수는 값에 관계없이 TRUE로 설정된 것처럼 처리됩니다. 후속 NtQueryDirectoryFile 호출에서 RestartScan 매개 변수의 값이 적용됩니다.

반환 값

NtQueryDirectoryFile루틴은 STATUS_SUCCESS 또는 적절한 오류 상태를 반환합니다. 반환할 수 있는 오류 상태 값 집합은 파일 시스템별 값입니다. 또한 NtQueryDirectoryFileIoStatusblock정보 멤버에서 지정된 FileInformation 버퍼에 실제로 기록된 바이트 수를 반환합니다. 몇 가지 가능한 오류 코드 목록은 NtQueryDirectoryFileEx 를 참조하세요.

설명

NtQueryDirectoryFile 루틴은 FileHandle이 나타내는 디렉터리에 포함된 파일에 대한 정보를 반환합니다.

제공된 경우 FileName 매개 변수 값은 지정된 FileHandle에 대한 NtQueryDirectoryFile에 대한 모든 후속 호출에 대한 디렉터리 검사에 포함된 항목을 결정합니다.

일치하는 항목이 하나 이상 있는 경우 NtQueryDirectoryFile 은 각 항목에 대해 FILE_XXX_INFORMATION 구조를 만들고 버퍼에 저장합니다.

일치하는 디렉터리 항목이 하나 이상 있다고 가정하면 정보가 반환되는 항목 수는 다음 중 *가장 작은 항목입니다.

  • ReturnSingleEntryTRUE이고 FileName이 NULL인 경우 하나의 항목입니다.
  • FileName이 NULL이 아닌 경우 FileName 문자열과 일치하는 항목 수입니다. (문자열에 와일드카드가 없는 경우 일치하는 항목이 하나 이상 있을 수 있습니다.)
  • 정보가 지정된 버퍼에 맞는 항목의 수입니다.
  • 디렉터리에 포함된 항목 수입니다.

NtQueryDirectoryFile에 대한 첫 번째 호출에서 발견된 첫 번째 항목에 대해 생성된 구조체가 너무 커서 출력 버퍼에 맞지 않는 경우 루틴은 구조체의 고정 부분을 출력 버퍼에 씁니다. 그런 다음 루틴은 출력 버퍼에 적합한 만큼 FileName 문자열을 씁니다. 구조체의 고정 부분은 최종 FileName 문자열을 제외한 모든 필드로 구성됩니다. 첫 번째 호출에서는 후속 호출이 아닌 I/O 시스템에서 버퍼가 적절한 FILE_XXX_INFORMATION 구조체의 고정 부분을 보유할 수 있을 만큼 충분히 큰지 확인합니다. 이 경우 NtQueryDirectoryFile 은 STATUS_BUFFER_OVERFLOW 같은 적절한 상태 값을 반환합니다.

각 호출에서 NtQueryDirectoryFileFileInformation이 가리키는 버퍼에 완전히 포함될 수 있는 만큼의 FILE_XXX_INFORMATION 구조체(디렉터리 항목당 하나)를 반환합니다. 첫 번째 호출에서 NtQueryDirectoryFile 은 출력 버퍼에 하나 이상의 전체 구조가 포함된 경우에만 STATUS_SUCCESS 반환합니다. 후속 호출에서 출력 버퍼에 구조가 없는 경우 NtQueryDirectoryFile은 STATUS_SUCCESS 반환하지만 IoStatusblock-Information> = 0을 설정하여 호출자에게 이 조건을 알립니다. 이 경우 호출자는 더 큰 버퍼를 할당하고 NtQueryDirectoryFile 을 다시 호출해야 합니다. 나머지 항목에 대한 정보는 보고되지 않습니다. 따라서 위에 나열된 항목이 하나만 반환되는 경우를 제외하고 NtQueryDirectoryFile 을 두 번 이상 호출하여 전체 디렉터리의 콘텐츠를 열거해야 합니다.

NtQueryDirectoryFile을 호출할 때 NtQueryDirectoryFile 호출과 병렬로 발생하는 디렉터리에 대한 변경 내용이 표시 될 수 있습니다. 이 동작은 기본 파일 시스템의 구현에 따라 달라집니다.

NtQueryDirectoryFile에 대한 마지막 호출은 빈 출력 버퍼를 반환하고 STATUS_NO_MORE_FILES 같은 적절한 상태 값을 보고합니다.

NtQueryDirectoryFile이 동일한 디렉터리에서 여러 번 호출되고 다른 작업에서 해당 디렉터리의 내용을 변경하는 경우 작업 타이밍에 따라 변경 내용이 표시되거나 표시되지 않을 수 있습니다.

NtQueryDirectoryFile은 파일 시스템에서 지원하지 않는 FILE_XXX_INFORMATION 구조체의 모든 멤버에서 0을 반환합니다.

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

다른 파일 정보 쿼리 루틴에 대한 자세한 내용은 파일 개체를 참조하세요.

참고

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

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

요구 사항

   
지원되는 최소 클라이언트 Windows XP
대상 플랫폼 유니버설
헤더 ntifs.h(Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL(주의 섹션 참조)
DDI 규정 준수 규칙 HwStorPortProhibitedDDIs, PowerIrpDDis

참고 항목

FILE_BOTH_DIR_INFORMATION

FILE_DIRECTORY_INFORMATION

FILE_FULL_DIR_INFORMATION

FILE_ID_BOTH_DIR_INFORMATION

FILE_ID_FULL_DIR_INFORMATION

FILE_NAMES_INFORMATION

FILE_OBJECTID_INFORMATION

FILE_REPARSE_POINT_INFORMATION

IO_STATUS_BLOCK

UNICODE_STRING

NtCreateFile

NtOpenFile