대부분의 드라이버 디스패치 루틴은 다음과 같은 예외를 제외하고 IRQL = PASSIVE_LEVEL 임의의 스레드 컨텍스트에서 호출됩니다.
가장 높은 수준의 드라이버 디스패치 루틴은 일반적으로 사용자 모드 애플리케이션 스레드인 I/O 요청을 시작한 스레드의 컨텍스트에서 호출됩니다.
즉, 파일 시스템 드라이버 및 기타 최고 수준의 드라이버의 디스패치 루틴은 IRQL = PASSIVE_LEVEL 비임의 스레드 컨텍스트에서 호출됩니다.
가장 낮은 수준의 디바이스 드라이버 및 시스템 페이징 경로에서 계층화된 중간 드라이버의 DispatchRead, DispatchWrite 및 DispatchDeviceControl 루틴은 IRQL = APC_LEVEL 및 임의의 스레드 컨텍스트에서 호출할 수 있습니다.
DispatchRead 및/또는 DispatchWrite 루틴과 이러한 최저 수준 디바이스 또는 중간 드라이버에서 읽기 및/또는 쓰기 요청을 처리하는 다른 루틴은 항상 상주해야 합니다. 이러한 드라이버 루틴은 페이저블하거나 드라이버의 페이저블 이미지 섹션의 일부가 되어서는 안 됩니다. 어떠한 페이지 가능한 메모리에도 접근해서는 안 됩니다. 또한 차단 호출(예: 0이 아닌 시간 제한인 KeWaitForSingleObject )에 의존해서는 안 됩니다.
드라이버의 최대 절전 모드 및/또는 페이징 경로에 있는 DispatchPower 루틴은 IRQL = DISPATCH_LEVEL에서 호출될 수 있습니다. 이러한 드라이버의 DispatchPnP 루틴은 PnP IRP_MN_DEVICE_USAGE_NOTIFICATION 요청을 처리하도록 준비해야 합니다.
시작 시 전원이 필요한 드라이버의 DispatchPower 루틴은 IRQL = DISPATCH_LEVEL 호출할 수 있습니다.
자세한 내용은 하드웨어 우선 순위 관리를 참조하세요.