다음을 통해 공유


스토리지 클래스 드라이버에서 PnP 시작 처리

스토리지 클래스 드라이버는 PnP 관리자가 시작 요청(IRP_MN_START_DEVICE IRP_MJ_PNP)을 사용하여 클래스 드라이버의 DispatchPnP 루틴을 호출할 때 디바이스별 초기화를 수행합니다. 스토리지 클래스 드라이버의 DispatchPnP 루틴은 내부 StartDevice 루틴을 호출하거나 동일한 기능을 인라인으로 구현합니다. FDO로 전송된 시작 요청은 스택에서 가장 낮은 드라이버에 의해 먼저 처리되어야 하므로 스토리지 클래스 드라이버의 DispatchPnP 루틴은 StartDevice를 호출하기 전에 IoCallDriver를 사용하여 다음 하위 드라이버에 요청을 전달합니다. 요청이 PDO로 전송된 경우 드라이버는 요청을 처리하기 전에 전달할 필요가 없습니다.

스토리지 클래스 드라이버의 내부 StartDevice 루틴은 디바이스에 대한 I/O 요청을 관리하기 위해 드라이버 결정 데이터로 FDO의 디바이스 확장을 설정합니다. 자세한 내용은 스토리지 클래스 드라이버의 디바이스 확장 설정을 참조하세요.

StartDevice 루틴은 드라이버가 AddDevice 루틴에 등록한 모든 디바이스 인터페이스를 사용하도록 설정해야 합니다. ( 디바이스 인터페이스 클래스를 참조하세요.) 디바이스 개체에 대한 기호 링크를 만들 수도 있습니다.

하위 디바이스의 시작이 완료된 후 드라이버는 대부분의 용도로 디바이스가 D0 전원 상태(완전 켜기 및 작동)에 있다고 가정할 수 있습니다. 디바이스가 완전히 전원이 공급되지 않으면 포트 드라이버는 디바이스가 준비될 때까지 요청을 큐에 대기합니다. 그러나 드라이버의 StartDevice 루틴이 디스크 드라이브를 스핀업하기 위해 현재 인러시브가 필요한 작업을 수행해야 하는 경우 드라이버는 작업을 수행하기 전에 다음 하위 드라이버에 D0 전원 요청을 보내야 합니다.

FILE_DEVICE_DISK 또는 FILE_DEVICE_MASS_STORAGE 유형의 디바이스 드라이버는 PoRegisterDeviceforIdleDetection 호출에서 보존 및 성능 제한 시간 값을 -1로 지정하여 유휴 검색에 등록하고 디바이스 클래스에 대한 표준 전원 정책 시간 초과를 사용할 수 있습니다.

스토리지 클래스 드라이버의 DispatchPnP 루틴에 대한 자세한 내용은 스토리지 주변 디바이스에 대한 PnP 요청 처리를 참조하세요. PnP 시작 요청을 처리하는 방법에 대한 자세한 내용은 디바이스 시작을 참조하세요.