IRP_MJ_FILE_SYSTEM_CONTROL(IFS)
보낸 경우
IRP_MJ_FILE_SYSTEM_CONTROL 요청은 I/O 관리자 및 기타 운영 체제 구성 요소뿐만 아니라 다른 커널 모드 드라이버에서도 전송됩니다. 예를 들어 사용자 모드 애플리케이션이 Microsoft Win32 DeviceIoControl 함수를 호출하여 파일 시스템 I/O 컨트롤(FSCTL) 요청을 보내는 경우 전송할 수 있습니다.
작업: 파일 시스템 드라이버
파일 시스템 드라이버 또는 인식기는 부 함수 코드를 확인하여 요청된 파일 시스템 제어 작업을 결정해야 합니다.
파일 시스템 드라이버는 다음과 같은 부 함수 코드를 처리해야 합니다.
| 코드 | Description |
|---|---|
IRP_MN_KERNEL_CALL |
이 요청은 요청의 원본이 신뢰할 수 있는 커널 구성 요소라는 점을 제외하고 IRP_MN_USER_FS_REQUEST(다음에 설명됨)와 동일합니다. |
IRP_MN_MOUNT_VOLUME |
볼륨 탑재 요청을 나타냅니다. 파일 시스템 드라이버가 파일 시스템의 형식과 일치하지 않는 볼륨에 대해 이 IRP를 수신하는 경우 파일 시스템 드라이버는 STATUS_UNRECOGNIZED_VOLUME 반환해야 합니다. |
IRP_MN_USER_FS_REQUEST |
Microsoft Win32 DeviceIoControl 함수를 호출한 사용자 모드 애플리케이션을 대신하여 또는 ZwDeviceIoControlFile 또는 IoBuildDeviceIoControlRequest를 호출한 커널 모드 구성 요소를 대신하여 FSCTL 요청을 나타냅니다. FSCTL 요청에 대한 자세한 내용은 Microsoft Windows SDK 설명서의 "디바이스 입력 및 출력 제어 코드"를 참조하세요. |
IRP_MN_VERIFY_VOLUME |
볼륨 확인 요청을 나타냅니다. 이동식 미디어의 경우 파일 시스템은 미디어가 제거되고 반환된 것을 감지할 때 볼륨을 확인하여 파일 시스템이 이전에 작업했던 볼륨과 동일한지 확인해야 합니다. 볼륨이 변경된 경우 파일 시스템에서 처리 중인 핸들을 모두 무효화해야 합니다. 이 새 미디어의 파일 시스템이 변경된 경우에도 오류가 반환됩니다. 이 요청은 플로피 드라이브에 가장 자주 사용됩니다. |
파일 시스템 인식기는 다음 부 함수 코드를 처리해야 합니다.
| 코드 | Description |
|---|---|
IRP_MN_LOAD_FILE_SYSTEM |
로드 파일 시스템 요청을 나타냅니다. |
요청된 작업을 수행한 후 파일 시스템 드라이버 또는 인식기가 IRP를 완료해야 합니다.
작업: 파일 시스템 필터 드라이버
필터 드라이버는 이 IRP를 스택의 다음 하위 드라이버로 전달해야 합니다.
매개 변수
파일 시스템 또는 필터 드라이버는 지정된 IRP를 사용하여 IoGetCurrentIrpStackLocation 을 호출하여 IRP의 자체 스택 위치에 대한 포인터를 가져옵니다. 이 포인터는 다음 목록에 IrpSp로 표시됩니다. (IRP는 Irp로 표시됩니다.) 드라이버는 파일 시스템 제어 요청을 처리할 때 IRP 및 IRP 스택 위치의 다음 멤버에 설정된 정보를 사용할 수 있습니다.
DeviceObject
대상 디바이스 개체에 대한 포인터입니다.
Irp-AssociatedIrp.SystemBuffer>
대상 볼륨에 대한 파일 시스템 또는 파일 시스템 필터 드라이버에 전달할 시스템 제공 입력 버퍼에 대한 포인터입니다. METHOD_BUFFERED 또는 METHOD_DIRECT I/O에 사용됩니다. 이 매개 변수가 필요한지 여부는 특정 파일 시스템 제어 코드에 따라 달라집니다.
Irp-IoStatus>
요청된 작업에 대한 최종 완료 상태 및 정보를 받는 IO_STATUS_BLOCK 구조체에 대한 포인터입니다.
Irp-MdlAddress>
대상 볼륨에 대한 파일 시스템 또는 파일 시스템 필터 드라이버에 전달할 출력 버퍼를 설명하는 MDL(메모리 설명자 목록)의 주소입니다. METHOD_DIRECT I/O에 사용됩니다. 이 매개 변수가 필요한지 여부는 특정 I/O 제어 코드에 따라 달라집니다.
Irp-UserBuffer>
대상 볼륨에 대한 파일 시스템 또는 파일 시스템 필터 드라이버에 전달할 호출자 제공 출력 버퍼에 대한 포인터입니다. METHOD_BUFFERED 또는 METHOD_NEITHER I/O에 사용됩니다. 이 매개 변수가 선택 사항인지 필수인지 여부는 특정 I/O 제어 코드에 따라 달라집니다.
IrpSp-FileObject>
DeviceObject와 연결된 파일 개체에 대한 포인터입니다.
IrpSp-FileObject> 매개 변수에는 FILE_OBJECT 구조인 RelatedFileObject 필드에 대한 포인터가 포함되어 있습니다. FILE_OBJECT 구조체의 RelatedFileObject 필드는 IRP_MJ_FILE_SYSTEM_CONTROL 처리하는 동안 유효하지 않으므로 사용하면 안 됩니다.
IrpSp-Flags>
IRP_MN_VERIFY_VOLUME 대해 다음 플래그를 설정할 수 있습니다.
SL_ALLOW_RAW_MOUNT
IrpSp-MajorFunction>
IRP_MJ_FILE_SYSTEM_CONTROL 지정합니다.
- IRP_MN_KERNEL_CALL
- IRP_MN_LOAD_FILE_SYSTEM
- IRP_MN_MOUNT_VOLUME
- IRP_MN_USER_FS_REQUEST
- IRP_MN_VERIFY_VOLUME
IrpSp-Parameters.FileSystemControl.FsControlCode>
대상 볼륨에 대한 파일 시스템 또는 파일 시스템 필터 드라이버에 전달할 FSCTL 함수 코드입니다. IRP_MN_USER_FS_REQUEST만 사용합니다.
IOCTL 및 FSCTL 요청에 대한 자세한 내용은 커널 모드 아키텍처 가이드의 I/O 제어 코드 사용 및 Microsoft Windows SDK 설명서의 "디바이스 입력 및 출력 제어 코드"를 참조하세요.
IrpSp-Parameters.FileSystemControl.InputBufferLength>
Irp-AssociatedIrp.SystemBuffer>가 가리키는 버퍼의 크기(바이트)입니다.
IrpSp-Parameters.FileSystemControl.OutputBufferLength>
Irp-UserBuffer가 가리키는 버퍼의 크기(바이트 )>입니다.
IrpSp-Parameters.FileSystemControl.Type3InputBuffer>
METHOD_NEITHER 사용하는 커널 모드 요청에 대한 입력 버퍼입니다.
IrpSp-Parameters.MountVolume.DeviceObject>
볼륨을 탑재할 실제 디바이스의 디바이스 개체에 대한 포인터입니다. 파일 시스템 필터 드라이버는 이 매개 변수를 사용하면 안 됩니다.
IrpSp-Parameters.MountVolume.Vpb>
탑재할 볼륨의 VPB(볼륨 매개 변수 블록)에 대한 포인터입니다. 이동식 미디어를 지원하는 파일 시스템은 이전에 사용한 VPB를 이 매개 변수에 전달된 VPB로 대체할 수 있습니다. 이러한 파일 시스템에서 볼륨이 탑재된 후 이 포인터는 더 이상 유효한 것으로 간주할 수 없습니다. 이러한 파일 시스템을 필터링하는 파일 시스템 필터 드라이버는 다음과 같이 이 매개 변수를 사용해야 합니다. IRP를 하위 수준 드라이버로 보내기 전에 필터는 IrpSp-Parameters.MountVolume.Vpb-RealDevice>> 값을 저장해야 합니다. 볼륨이 성공적으로 탑재된 후 필터는 스토리지 디바이스 개체에 대한 이 포인터를 사용하여 올바른 VPB 포인터를 가져올 수 있습니다.
IrpSp-Parameters.VerifyVolume.DeviceObject>
확인할 볼륨에 대한 디바이스 개체에 대한 포인터입니다.
IrpSp-Parameters.VerifyVolume.Vpb>
확인할 볼륨의 VPB에 대한 포인터입니다.