IRP 주 함수 코드

모든 IRP에 대한 각 드라이버별 I/O 스택 위치(IO_STACK_LOCATION)에는 I/O 요청을 충족하기 위해 드라이버에 수행해야 하는 작업 또는 기본 디바이스 드라이버를 알려주는 주 함수 코드(IRP_MJ_XXX)가 포함되어 있습니다. 각 커널 모드 드라이버는 지원해야 하는 주요 함수 코드에 대한 디스패치 루틴을 제공해야 합니다.

드라이버가 지정된 IRP_MJ_XXX 코드에 대해 수행하는 특정 작업은 특히 IRP_MJ_DEVICE_CONTROL IRP_MJ_INTERNAL_DEVICE_CONTROL 요청에 대해 기본 디바이스에 따라 달라집니다. 예를 들어 키보드 드라이버로 전송된 요청은 디스크 드라이버로 전송된 요청과는 다소 다릅니다. 그러나 I/O 관리자는 각 시스템 정의 주 함수 코드에 대한 매개 변수 및 I/O 스택 위치 콘텐츠를 정의합니다.

모든 상위 수준 드라이버는 다음 하위 수준 드라이버에 대해 IRP에서 적절한 I/O 스택 위치를 설정하고 각 입력 IRP 또는 드라이버에서 만든 IRP를 사용하여 IoCallDriver를 호출해야 합니다(상위 수준 드라이버가 입력 IRP를 보유하는 경우). 따라서 모든 중간 드라이버는 기본 디바이스 드라이버가 처리하는 각 주요 함수 코드에 대한 디스패치 루틴을 제공해야 합니다. 그렇지 않으면 애플리케이션 또는 상위 수준 드라이버가 I/O 요청을 기본 디바이스 드라이버로 보내려고 할 때마다 새 중간 드라이버가 "체인을 중단"합니다.

파일 시스템 드라이버 및 레거시 파일 시스템 필터 드라이버도 시스템 정의 IRP_MJ_XXX 함수 코드의 필수 하위 집합을 처리하며, 일부는 하위 IRP_MN_XXX 함수 코드를 사용합니다. 이러한 IRP를 처리하는 방법에 대한 자세한 내용은 파일 시스템 드라이버 및 레거시 FS 필터 드라이버에 대한 IRP 주요 함수 코드를 참조하세요.

드라이버는 다음 주요 함수 코드의 일부 또는 전부를 사용하여 설정된 IRP를 처리합니다.

IRP_MJ_CLEANUP

IRP_MJ_CLOSE

IRP_MJ_CREATE

IRP_MJ_DEVICE_CONTROL

IRP_MJ_FILE_SYSTEM_CONTROL

IRP_MJ_FLUSH_BUFFERS

IRP_MJ_INTERNAL_DEVICE_CONTROL

IRP_MJ_PNP

IRP_MJ_POWER

IRP_MJ_QUERY_INFORMATION

IRP_MJ_READ

IRP_MJ_SET_INFORMATION

IRP_MJ_SHUTDOWN

IRP_MJ_SYSTEM_CONTROL

IRP_MJ_WRITE

이 섹션에 설명된 입력 및 출력 매개 변수는 IRP의 함수별 매개 변수입니다.

IRP에 대한 자세한 내용은 IRP 처리를 참조하세요.