다음을 통해 공유


표준 드라이버 루틴 요구 사항

커널 모드 드라이버를 디자인할 때 다음 사항에 유의하세요.

  • 각 드라이버에는 드라이버 전체 데이터 구조 및 리소스를 초기화하는 DriverEntry 루틴이 있어야 합니다. I/O 관리자는 드라이버를 로드할 때 DriverEntry 루틴을 호출합니다.

  • 모든 드라이버에는 I/O 요청 패킷(IRP)을 수신하고 처리하는 하나 이상의 디스패치 루틴이 있어야 합니다. 각 드라이버는 드라이버가 받을 수 있는 각 IRP 주요 함수 코드에 대해 DRIVER_OBJECT 구조에 디스패치 루틴의 진입점을 배치해야 합니다. 드라이버에는 각 IRP 주요 함수 코드에 대해 별도의 디스패치 루틴이 있거나 여러 함수 코드를 처리하는 하나 이상의 디스패치 루틴이 있을 수 있습니다.

  • 모든 WDM 드라이버에는 언로드 루틴이 있어야 합니다. 드라이버는 드라이버의 드라이버 개체에 Unload 루틴의 진입점을 배치해야 합니다. PnP 드라이버의 언로드 루틴에 대한 책임은 최소화되지만 PnP가 아닌 드라이버의 언로드 루틴은 드라이버가 사용하는 모든 시스템 리소스를 해제해야 합니다.

  • 모든 WDM 드라이버에는 AddDevice 루틴이 있어야 하며 드라이버 개체의 드라이버 확장 에서 해당 진입점을 정의해야 합니다. AddDevice 루틴은 드라이버가 제어하는 각 PnP 디바이스에 대한 디바이스 개체를 만들고 초기화하는 작업을 담당합니다.

  • 드라이버에는 I/O 관리자가 호출하여 드라이버가 시스템 제공 IRP 큐에 큐에 대기한 IRP에 대한 I/O 작업을 시작하기 위해 호출하는 StartIo 루틴이 있을 수 있습니다. StartIo 루틴이 없는 드라이버는 수신하는 IRP에 대한 내부 큐를 설정하고 관리하거나 디스패치 루틴 내의 모든 IRP를 완료해야 합니다. 상위 수준 드라이버는 단순히 디스패치 루틴에서 직접 하위 수준 드라이버에 IRP를 전달하는 경우 StartIo 루틴이 없을 수 있습니다.

  • 특정 미니포트 드라이버는 이전 요구 사항에 대한 예외입니다. 미니포트 드라이버 요구 사항에 대한 자세한 내용은 WDK(Windows 드라이버 키트)의 디바이스 유형별 설명서를 참조하세요.

  • 드라이버에 다른 종류의 표준 루틴이 있는지 여부는 해당 기능과 해당 드라이버가 시스템에 맞는 방식(예: 시스템 제공 드라이버와 상호 운용되는지 여부)에 따라 달라집니다. 자세한 내용은 WDK의 디바이스 유형별 설명서를 참조하세요.