드라이버 개체 소개

I/O 관리자는 설치 및 로드된 각 드라이버에 대한 드라이버 개체 를 만듭니다. 드라이버 개체는 DRIVER_OBJECT 구조를 사용하여 정의됩니다.

I/O 관리자가 드라이버의 DriverEntry 루틴을 호출하면 드라이버의 드라이버 개체 주소를 제공합니다. 드라이버 개체에는 많은 드라이버의 표준 루틴에 대한 진입점에 대한 스토리지가 포함되어 있습니다. 드라이버는 이러한 진입점을 채울 책임이 있습니다.

다음 그림에서는 가장 낮은 수준 및 상위 수준 드라이버가 가질 수 있거나 가져야 하는 시스템 정의 표준 루틴 집합이 있는 드라이버 개체를 보여 줍니다.

이름 옆에 별표가 있는 각 표준 루틴은 IRP(I/O 요청 패킷)를 입력으로 받습니다. 이러한 각 표준 루틴은 I/O 요청에 대한 대상 디바이스 개체에 대한 포인터도 받습니다.

드라이버 개체를 보여 주는 다이어그램

I/O 관리자는 드라이버 개체 형식을 정의하고 드라이버 개체를 사용하여 드라이버의 로드된 이미지에 대한 정보를 등록하고 추적합니다. 드라이버 개체의 디스패치 진입점(DDDispatchXxx ~ DDDispatchYyy)은 IRP의 I/O 스택 위치에 전달되는 주 함수 코드(IRP_MJ_XXX)에 해당합니다.

I/O 관리자는 각 IRP를 먼저 드라이버 제공 디스패치 루틴으로 라우팅합니다. 가장 낮은 수준의 드라이버 디스패치 루틴은 일반적으로 I/O 지원 루틴(IoStartPacket)을 호출하여 드라이버의 StartIo 루틴에 유효한 인수가 있는 각 IRP를 큐에 대기(또는 전달)합니다. StartIo 루틴은 특정 디바이스에서 요청된 I/O 작업을 시작합니다. 상위 수준의 드라이버에는 일반적으로 StartIo 루틴이 없지만 가능합니다.