클래스 드라이버의 AddDevice 루틴 Storage

PnP 관리자는 해당 드라이버에서 제어하는 디바이스를 감지할 때 스토리지 클래스 드라이버의 AddDevice 루틴을 호출합니다. 스토리지 클래스 드라이버의 AddDevice 루틴:

  • Storage 클래스 드라이버의 ClaimDevice 루틴에 설명된 대로 디바이스를 클레임하거나 드라이버가 디바이스를 클레임할 수 없는 경우 STATUS_SUCCESS 반환합니다.

  • 드라이버가 디바이스를 성공적으로 클레임하는 경우 FDO(디바이스 개체)를 만듭니다.

  • 애플리케이션 및 기타 시스템 디바이스에서 사용할 수 있는 디바이스 인터페이스를 등록합니다. 클래스 드라이버는 PnP 시작 요청을 받을 때 이러한 인터페이스를 사용하도록 설정합니다.

  • AddDevice 루틴 작성에 설명된 대로 시작 요청을 처리하도록 디바이스 개체를 준비합니다.

  • 입력 PDO를 사용하여 IoAttachDeviceToDeviceStack 을 호출하여 디바이스 개체를 디바이스 스택에 연결합니다.

  • 디바이스가 알려진 전원 상태에서 시작되면 PoSetPowerState를 호출합니다.

  • 새 디바이스 개체의 DO_DEVICE_INITIALIZING 플래그를 지웁니다.

스토리지 클래스 드라이버는 IoAttachDeviceToDeviceStack 에서 반환된 포인터를 새로 클레임된 디바이스를 나타내는 자체 FDO(디바이스 개체)의 디바이스 확장에 저장하며, 클래스 드라이버가 다음 하위 드라이버로 보내는 모든 후속 요청에서 이 포인터를 사용해야 합니다. 또한 드라이버는 디바이스 확장에 입력 PDO에 대한 포인터를 저장하지만, IoAttachDeviceToDeviceStack이 반환된 후 드라이버는 이러한 포인터를 매개 변수로 사용하는 PnP IoXxx 루틴에 대한 호출에서 만 입력 PDO에 대한 포인터를 사용해야 합니다.

자세한 내용은 AddDevice 루틴 작성을 참조하세요.