다음을 통해 공유


PnP 드라이버의 언로드 루틴

PnP 드라이버에는 DriverEntry 루틴에서 만든 메모리, 스레드 및 이벤트와 같은 드라이버별 리소스를 제거하는 언로드 루틴이 있어야 합니다. 제거할 드라이버별 리소스가 없는 경우 드라이버에는 여전히 언로드 루틴이 있어야 하지만 단순히 반환할 수 있습니다.

드라이버의 언로드 루틴은 모든 드라이버의 디바이스가 제거된 후 언제든지 호출할 수 있습니다. PnP 관리자는 IRQL = PASSIVE_LEVEL 시스템 스레드 컨텍스트에서 드라이버의 언로드 루틴을 호출합니다.

PnP 드라이버는 PnP 디바이스 제거 IRP에 대한 응답으로 디바이스별 리소스 및 디바이스 개체를 해제합니다. PnP 관리자는 열거하는 각 PnP 디바이스뿐만 아니라 드라이버가 IoReportDetectedDevice를 사용하여 보고하는 루트 열거형 레거시 디바이스를 대신하여 이러한 IRP를 보냅니다.

따라서 PnP 드라이버의 언로드 루틴은 일반적으로 간단하며 종종 return 문으로만 구성됩니다. 그러나 드라이버가 DriverEntry 루틴에서 드라이버 전체 리소스를 할당한 경우 아직 할당 취소하지 않은 경우 해당 리소스의 언로드 루틴에서 해당 리소스의 할당을 취소해야 합니다. 일반적으로 PnP 드라이버를 언로드하는 프로세스는 동기 작업입니다.

I/O 관리자는 드라이버 개체와 드라이버가 IoAllocateDriverObjectExtension을 사용하여 할당한 모든 드라이버 개체 확장을 해제합니다.