IRP_MJ_QUERY_INFORMATION(FS 및 필터 드라이버)

보낸 경우

I/O 관리자, 기타 운영 체제 구성 요소 및 기타 커널 모드 드라이버는 IRP_MJ_QUERY_INFORMATION 요청을 보냅니다. 예를 들어 사용자 모드 애플리케이션이 GetFileInformationByHandle 과 같은 Win32 함수를 호출했거나 커널 모드 구성 요소가 ZwQueryInformationFile을 호출한 경우 이 요청을 보낼 수 있습니다.

작업: 파일 시스템 드라이버

파일 시스템 드라이버는 파일 개체를 추출하고 디코딩하여 파일 또는 디렉터리의 사용자 열기를 나타내는지 여부를 결정해야 합니다. 이 경우 드라이버는 쿼리를 처리하고 IRP를 완료해야 합니다. 그렇지 않으면 드라이버는 쿼리를 처리하지 않고 IRP를 적절하게 완료해야 합니다.

쿼리할 수 있는 파일 및 디렉터리 정보의 형식은 파일 시스템에 따라 달라지지만 일반적으로 다음 값이 포함됩니다.

  • FileAllInformation
  • FileAlternateNameInformation
  • FileAttributeTagInformation
  • FileBasicInformation
  • FileCompressionInformation
  • FileEaInformation
  • FileInternalInformation
  • FileNameInformation
  • FileNetworkOpenInformation
  • FilePositionInformation
  • FileStandardInformation
  • FileStreamInformation
  • FileHardLinkInformation

FileAccessInformation, FileAlignmentInformation 및 FileModeInformation 정보 형식도 ZwQueryInformationFile에 매개 변수로 전달할 수 있지만 이 정보는 파일 시스템 독립적입니다. 따라서 ZwQueryInformationFile 은 파일 시스템에 IRP_MJ_QUERY_INFORMATION 요청을 보내지 않고 이 정보를 직접 제공합니다.

가능한 모든 정보 유형 목록은 ntifs.h의 FILE_INFORMATION_CLASS 열거형을 참조하세요.

작업: 네트워크 리렉터 드라이버

FileAllInformation 또는 FileNameInformation에 대한 IRP_MJ_QUERY_INFORMATION 요청을 수신하는 RDBSS 를 기반으로 하지 않는 네트워크 리디렉터 드라이버는 서버 이름 앞에 단일 선행 백슬래시가 있는 파일 이름에 대한 전체 "\server\share\file" 경로로 응답해야 합니다. 이름 정보에 대한 이 형식은 UNC(범용 명명 규칙) 이름( 예:\\server\share\folder\filename.txt) 또는 매핑된 드라이브(예:x:\folder\filename.txt)에 있는 파일에 대해 반환되어야 합니다.

네트워크 미니 리다이렉터 드라이버(rdbss.sys 동적으로 연결하거나 rdbsslib.lib와 정적으로 연결되는 드라이버)의 경우 RDBSS는 FileNameInformation에 대한 IRP_MJ_QUERY_INFORMATION 요청을 처리하고 올바른 이름 정보를 반환합니다. 네트워크 미니 리다이렉터 드라이버의 경우 RDBSS는 요청의 이름 정보 부분에 대한 FileAllInformation에 대한 IRP_MJ_QUERY_INFORMATION 요청을 처리합니다. FileAllInformation 요청의 다른 부분은 네트워크 미니 리다이렉터 드라이버에 별도의 요청으로 전송되어 resolve.

FileAlternateNameInformation에 대한 IRP_MJ_QUERY_INFORMATION 요청을 수신하는 네트워크 리디렉터는 파일에 대한 짧은 이름이 있는 경우 경로 정보 없이 파일에 대한 짧은 이름(8.3자)으로 응답해야 합니다.

작업: 레거시 파일 시스템 필터 드라이버

필터 드라이버는 이 IRP를 스택의 다음 하위 드라이버로 전달해야 합니다.

매개 변수

파일 시스템 또는 필터 드라이버는 지정된 IRP에 대해 IoGetCurrentIrpStackLocation 을 호출하여 IRP의 자체 스택 위치에 대한 포인터를 가져옵니다. 다음 매개 변수에서 IrpIRP 를 가리키고 IrpSpIO_STACK_LOCATION 가리킵니다. 드라이버는 IRP 및 IRP 스택 위치의 다음 멤버에 설정된 정보를 사용하여 쿼리 파일 정보 요청을 처리할 수 있습니다.

  • DeviceObject 는 대상 디바이스 개체에 대한 포인터입니다.

  • Irp->ASSOCIATedIrp.SystemBuffer 는 파일 또는 디렉터리 정보가 반환될 출력 버퍼를 가리킵니다. 이 정보는 다음 구조 중 하나에 저장됩니다.

  • FILE_ALL_INFORMATION

  • FILE_ATTRIBUTE_TAG_INFORMATION

  • FILE_BASIC_INFORMATION

  • FILE_COMPRESSION_INFORMATION

  • FILE_EA_INFORMATION

  • FILE_INTERNAL_INFORMATION

  • FILE_NAME_INFORMATION

  • FILE_NETWORK_OPEN_INFORMATION

  • FILE_POSITION_INFORMATION

  • FILE_STANDARD_INFORMATION

  • FILE_STREAM_INFORMATION

  • FILE_LINKS_INFORMATION

  • Irp->IoStatus는 최종 완료 상태 수신하는 IO_STATUS_BLOCK 구조와 요청된 작업에 대한 정보를 가리킵니다. 자세한 내용은 ZwQueryInformationFileIoStatusBlock 매개 변수에 대한 설명을 참조하세요. 루틴.

  • Irp->UserBuffer는 I/O 관리자가 I/O를 완료하는 동안 Irp-AssociatedIrp.SystemBuffer>의 콘텐츠가 복사되는 호출자 제공 출력 버퍼에 대한 선택적 포인터입니다. 드라이버는 이 버퍼를 사용하여 요청에 대한 데이터를 반환하지 않습니다.

  • IrpSp->FileObjectDeviceObject와 연결된 파일 개체를 가리킵니다.

    IrpSp-FileObject> 매개 변수에는 relatedFileObject 필드에 대한 포인터가 포함되어 있으며 이는 FILE_OBJECT 구조이기도 합니다. FILE_OBJECT 구조체의 RelatedFileObject 필드는 IRP_MJ_QUERY_INFORMATION 처리하는 동안 유효하지 않으므로 사용하면 안 됩니다.

  • IrpSp->MajorFunction 은 IRP_MJ_QUERY_INFORMATION 설정됩니다.

  • IrpSp->Parameters.QueryFile.FileInformationClass 는 쿼리할 파일 정보의 형식입니다. 이 멤버는 다음 값 중 하나일 수 있습니다.

    의미
    FileAllInformation 파일에 대한 FILE_ALL_INFORMATION 구조를 반환합니다.
    FileAttributeTagInformation 파일에 대한 FILE_ATTRIBUTE_TAG_INFORMATION 구조를 반환합니다.
    FileBasicInformation 파일에 대한 FILE_BASIC_INFORMATION 구조를 반환합니다.
    FileCompressionInformation 파일에 대한 FILE_COMPRESSION_INFORMATION 구조를 반환합니다.
    FileEaInformation 파일에 대한 FILE_EA_INFORMATION 구조를 반환합니다.
    FileInternalInformation 파일에 대한 FILE_INTERNAL_INFORMATION 구조를 반환합니다.
    FileNameInformation 파일에 대한 FILE_NAME_INFORMATION 구조를 반환합니다.
    FileNetworkOpenInformation 파일에 대한 단일 FILE_NETWORK_OPEN_INFORMATION 구조를 반환합니다.
    FilePositionInformation 파일에 대한 단일 FILE_POSITION_INFORMATION 구조를 반환합니다.
    FileStandardInformation 파일에 대한 단일 FILE_STANDARD_INFORMATION 구조를 반환합니다.
    FileStreamInformation 파일에 대한 단일 FILE_STREAM_INFORMATION 구조를 반환합니다.
    FileHardLinkInformation 파일에 대한 FILE_LINKS_INFORMATION 구조를 반환합니다.
  • IrpSp->Parameters.QueryFile.LengthIrp-AssociatedIrp.SystemBuffer가 가리키는 버퍼의 길이(바이트)>입니다.

설명

I/O 관리자는 항상 IRP_MJ_QUERY_INFORMATION 작업을 버퍼링합니다. I/O 관리자는 요청된 파일 또는 디렉터리 정보를 반환하는 데 사용되는 Irp-AssociatedIrp.SystemBuffer>를 페이징되지 않은 풀 메모리에서 할당합니다. 따라서 운영 체제에서 반환된 Irp-AssociatedIrp.SystemBuffer>는 항상 IrpSp-Parameters.QueryFile.Length>에 지정된 길이에 대한 유효한 주소입니다.

Irp-AssociatedIrp.UserBuffer>는 I/O 관리자가 내부적으로 사용하며 파일 시스템 또는 파일 시스템 필터 드라이버에서 사용하면 안 됩니다.

추가 정보

FILE_ALIGNMENT_INFORMATION

FILE_ATTRIBUTE_TAG_INFORMATION

FILE_BASIC_INFORMATION

FILE_INTERNAL_INFORMATION

FILE_NAME_INFORMATION

FILE_NETWORK_OPEN_INFORMATION

FILE_POSITION_INFORMATION

FILE_STANDARD_INFORMATION

FILE_STREAM_INFORMATION

FILE_LINKS_INFORMATION

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoCheckEaBufferValidity

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_SET_INFORMATION

ZwQueryInformationFile