스토리지 클래스 드라이버의 RemoveDevice 루틴
디바이스를 제거하려고 하면 PnP 관리자는 먼저 PnP 쿼리 제거 요청(IRP_MJ_PNP IRP_MN_QUERY_REMOVE_DEVICE 사용하여 클래스 드라이버의 DispatchPnP루틴을 호출합니다. 스토리지 클래스 드라이버는 다음 경우 중 하나라도 쿼리 제거 요청에 실패해야 합니다.
디바이스에 시스템 페이징 파일 또는 최대 절전 모드 파일이 포함되어 있습니다.
드라이버가 취소해서는 안 되는 긴 작업을 실행하고 있습니다(예: 테이프 되장 또는 서식 지정).
디바이스에 대한 미해결 핸들(CREATE)이 있습니다.
이러한 디바이스를 제거하면 크래시 덤프가 비활성화되므로 디바이스가 크래시 덤프에 대해 클레임되는 경우 스토리지 클래스 드라이버가 쿼리 제거 요청에 실패할 수도 있습니다.
스토리지 클래스 드라이버가 쿼리 제거 요청에 대한 응답으로 STATUS_SUCCESS 반환하는 경우 PnP 관리자는 PnP 제거 요청(IRP_MN_REMOVE_DEVICE IRP_MJ_PNP)을 사용하여 클래스 드라이버의 DispatchPnP 루틴을 호출합니다. 스토리지 클래스 드라이버의 DispatchPnP 루틴은 내부 RemoveDevice 루틴을 호출하거나 동일한 기능을 인라인으로 구현합니다.
스토리지 클래스 드라이버의 RemoveDevice 루틴은 다음을 수행해야 합니다.
드라이버에서 할당한 메모리 또는 이벤트와 같은 미해결 리소스를 해제합니다.
드라이버에서 만든 기호 링크(있는 경우)를 삭제합니다.
디바이스 개체(FDO)를 삭제합니다.
요청을 다음 하위 드라이버로 전달합니다.
스토리지 클래스 드라이버가 시작 시 PDO를 만든 경우(예: 분할된 미디어 디바이스의 파티션을 나타내기 위해) PnP 관리자가 스토리지 클래스 드라이버에 제거 요청을 보낼 때 이러한 PDO가 이미 제거되었습니다.
디바이스 개체가 삭제된 후에도 0이 아닌 참조 수가 있는 경우 참조 수가 0에 도달할 때까지 디바이스 개체가 시스템에서 유지되고 자동으로 사라집니다. 스토리지 클래스 드라이버는 디바이스 개체가 삭제된 후 디바이스 개체 포인터를 사용하려고 시도해서는 안됩니다.
제거 요청 처리에 대한 자세한 내용은 디바이스 제거를 참조하세요.