다음을 통해 공유


디바이스 시작에 대한 디자인 지침

  • PnP 관리자는 IRP_MN_START_DEVICE IRP가 완료될 때까지 디바이스에 대한 요청 만들기에 실패하여 디바이스의 모든 드라이버가 시작 작업을 수행했음을 나타냅니다.

  • DispatchPnP 루틴은 IRQL PASSIVE_LEVEL 시스템 스레드의 컨텍스트에서 실행되기 때문에 초기화 중에 독점적으로 사용하기 위해 ExAllocatePoolWithTag와 함께 할당된 모든 메모리는 드라이버가 시스템 페이지 파일을 보유하는 디바이스를 제어하지 않는 한 페이징 풀에서 사용할 수 있습니다. 이러한 메모리 할당은 DispatchPnP 루틴이 컨트롤을 반환하기 전에 ExFreePool을 사용하여 해제해야 합니다.

  • WDM 디바이스 드라이버의 ISR은 디바이스를 시작하는 동안에도 가짜 인터럽트로 호출되었는지 여부를 확인할 수 있어야 합니다. IRP_MN_START_DEVICE 처리하는 코드 경로에서 IoConnectInterrupt에 대한 호출에서 반환되면 디바이스에서 인터럽트를 사용하도록 설정하면 ISR을 즉시 호출할 수 있습니다.