IRP_MJ_READ(IFS)

보낸 경우

IRP_MJ_READ 요청은 I/O 관리자 또는 파일 시스템 드라이버에 의해 전송됩니다. 예를 들어 사용자 모드 애플리케이션이 ReadFile과 같은 Microsoft Win32 함수를 호출했거나 커널 모드 구성 요소가 ZwReadFile을 호출한 경우 이 요청을 보낼 수 있습니다.

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

파일 시스템 드라이버는 파일 개체를 추출하고 디코딩하여 매개 변수 및 부 함수 코드를 결정해야 합니다.

MDL(메모리 설명자 목록) 읽기 요청의 경우 파일 시스템은 부 함수 코드를 확인하여 요청되는 작업을 결정해야 합니다. 다음은 캐시된 파일 I/O에만 사용할 수 있는 유효한 부 함수 코드입니다.

  • IRP_MN_COMPLETE

  • IRP_MN_COMPLETE_MDL

  • IRP_MN_COMPLETE_MDL_DPC

  • IRP_MN_COMPRESSED

  • IRP_MN_DPC

  • IRP_MN_MDL

  • IRP_MN_MDL_DPC

  • IRP_MN_NORMAL

이 IRP 처리에 대한 자세한 내용은 WDK(Windows Driver Kit)에 포함된 CDFS 및 FASTFAT 샘플을 참조하세요.

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

필터 드라이버는 필요한 모든 처리를 수행해야 하며 필터의 특성에 따라 IRP를 완료하거나 실패하거나 스택의 다음 하위 드라이버로 전달해야 합니다.

매개 변수

파일 시스템 또는 필터 드라이버는 지정된 IRP를 사용하여 IoGetCurrentIrpStackLocation 을 호출하여 IRP의 자체 스택 위치에 대한 포인터를 가져옵니다. IrpSp로 다음 목록에 나와 있습니다. (IRP는 Irp로 표시됩니다.) 드라이버는 읽기 요청을 처리하는 데 IRP 및 IRP 스택 위치의 다음 멤버에 포함된 정보를 사용할 수 있습니다.

DeviceObject

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

Irp-AssociatedIrp.SystemBuffer>

DO_BUFFERED_IO 플래그가 DeviceObject-Flags>에 설정된 경우 중간 시스템 버퍼로 사용할 시스템 제공 버퍼에 대한 포인터입니다. 그렇지 않으면 이 멤버가 NULL로 설정됩니다.

Irp-IoStatus>

요청된 작업에 대한 최종 완료 상태 및 정보를 받는 IO_STATUS_BLOCK 구조체에 대한 포인터입니다. 자세한 내용은 ZwReadFile에 대한 IoStatusBlock 매개 변수에 대한 설명을 참조하세요.

Irp-MdlAddress>

읽을 데이터가 포함된 페이지를 설명하는 MDL(메모리 설명자 목록)의 주소입니다.

Irp-UserBuffer>

파일에서 읽은 데이터를 수신하는 호출자가 제공한 출력 버퍼에 대한 포인터입니다.

IrpSp-FileObject>

DeviceObject와 연결된 파일 개체에 대한 포인터입니다. FO_SYNCHRONOUS_IO 플래그가 IrpSp-FileObject-Flags>>에 설정된 경우 동기 I/O에 대해 파일 개체가 열렸습니다.

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

IrpSp-MajorFunction>

IRP_MJ_READ 지정합니다.

IrpSp-MinorFunction>

요청되는 작업을 지정하고 다음 중 하나를 포함합니다.

  • IRP_MN_COMPLETE

  • IRP_MN_COMPLETE_MDL

  • IRP_MN_COMPLETE_MDL_DPC

  • IRP_MN_COMPRESSED

  • IRP_MN_DPC

  • IRP_MN_MDL

  • IRP_MN_MDL_DPC

  • IRP_MN_NORMAL

IrpSp-Parameters.Read.ByteOffset>

읽을 데이터의 파일 내에서 시작 바이트 오프셋을 지정하는 LARGE_INTEGER 변수입니다.

IrpSp-Parameters.Read.Key>

대상 파일의 바이트 범위 잠금과 연결된 키 값입니다.

IrpSp-Parameters.Read.Length>

읽을 데이터의 길이(바이트)입니다. 읽기 작업이 성공하면 Irp-IoStatus>가 가리키는 IO_STATUS_BLOCK 구조체의 정보 멤버에서 읽은 바이트 수가 반환됩니다.

설명

파일 시스템은 파일 끝에서 쓰기 및 읽기 작업을 기본 파일 스토리지 디바이스의 섹터 크기의 배수까지 반올림합니다. 사전 읽기 또는 사전 쓰기 작업을 처리할 때 할당 및 스왑 버퍼를 사용하는 필터는 할당된 버퍼의 크기를 연결된 디바이스의 섹터 크기의 배수로 반올림해야 합니다. 그렇지 않은 경우 기본 파일 시스템에서 전송되는 데이터의 길이가 버퍼의 할당된 길이를 초과합니다. 버퍼 교환에 대한 자세한 내용은 swapBuffers Minifilter 샘플을 참조하세요.

참고 항목

CcMdlRead

CcMdlReadComplete

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_READ(WDK 커널 참조)

IRP_MJ_WRITE

ZwReadFile