다음을 통해 공유


디바이스 설치 중 자동 구성

다음 그림은 디바이스가 설치될 때 자동 구성의 데이터 흐름을 보여줍니다.

디바이스가 설치될 때 자동 구성의 데이터 흐름을 보여 주는 다이어그램

  1. 프린터가 설치되면 스풀러는 호출에서 PRINTER_EVENT_INITIALIZE 호출 DrvPrinterEvent 하고 전달하여 드라이버를 초기화합니다.

  2. 드라이버는 bidi 통신 인터페이스 를 사용하여 \Printer.Configuration.DuplexUnit:Installed 및 \Printer.Configuration.HardDisk:Installed와 같은 설치 가능한 옵션 값을 포함하여 관심 있는 데이터를 가져옵니다.

  3. bidi 통신 인터페이스는 포트 모니터에서 이러한 특성의 값을 쿼리합니다. 포트 모니터에는 캐시에 요청된 일부 데이터가 있을 수 있습니다. 다음 단계의 설명을 위해 \Printer.Configuration.HardDisk:Installed 값이 포트 모니터의 캐시에 있지만 \Printer.Configuration.DuplexUnit:Installed 값은 그렇지 않다고 가정합니다.

  4. 포트 모니터에 캐시가 있고 요청된 값 중 하나 이상을 저장한 경우 포트 모니터는 이러한 값을 bidi 통신 인터페이스에 반환합니다. 캐시에 없는 값의 경우 포트 모니터는 ERROR_NO_DATA 반환합니다. 포트 모니터가 캐시를 구현하지만 캐시가 비어 있으면 bidi 쿼리가 실패할 수 있습니다. 이 문제를 방지하려면 포트 모니터가 캐시가 채워질 때 bidi 통신 인터페이스에 알려야 합니다.

  5. bidi 통신 인터페이스는 포트 모니터에서 받은 정보를 드라이버에 전달합니다. 비디 통신 인터페이스에서 포트 모니터로의 호출로 인해 어떤 이유로든 오류가 발생하는 경우 드라이버는 이러한 특성에 대한 기본값을 설정해야 합니다. 포트 모니터가 요청된 특성에 대한 정보를 수신하는 즉시 이 정보가 포함된 알림을 bidi 통신 인터페이스로 보내야 합니다.

    드라이버는 \Printer.Configuration.HardDisk:Installed(포트 모니터의 캐시에서 가져온)의 값과 \Printer.Configuration.DuplexUnit:Installed의 기본값으로 레지스트리를 업데이트합니다.

  6. 포트 모니터는 캐시된 값(\Printer.Configuration.HardDisk:Installed)을 포함하여 두 값을 모두 디바이스에 쿼리합니다.

  7. 디바이스는 쿼리된 특성에 대한 값을 포트 모니터로 보냅니다. 값이 캐시에 아직 없거나 캐시의 값과 다른 특성의 경우 포트 모니터는 새 값을 캐시에 배치합니다.

  8. 포트 모니터는 이전에 캐시에 없거나 변경된 값이 포함된 알림을 스풀러에 보냅니다. 이 예제에서 포트 모니터는 \Printer.Configuration.DuplexUnit:Installed에 대한 새 값에 대한 알림을 스풀러에 보냅니다. 캐시된 값이 디바이스에서 받은 새 값과 동일한 경우 포트 모니터는 스풀러에 알림을 보내지 않습니다.

  9. 스풀러는 호출에서 변경된 모든 값에 대한 정보 외에도 PRINTER_EVENT_CONFIGURATION_UPDATE 전달하여 DrvPrinterEvent포트 모니터의 알림에 응답합니다. 이 작업은 두 가지 용도로 사용됩니다. 이 예제에서는 값이 처음으로 캐시에 배치되었거나 값이 변경된 특성의 값(\Printer.Configuration.DuplexUnit:Installed)을 드라이버에 알립니다. 레지스트리를 업데이트합니다. 각 프린터에 대해 스풀러는 드라이버가 스레드로부터 안전할 필요가 없도록 에 대한 호출 DrvPrinterEvent을 직렬화합니다.

    디바이스 정보는 레지스트리에 저장되므로 드라이버는 물리적 디바이스와 직접 통신할 필요 없이 UI 또는 디바이스 기능 정보를 업데이트하는 호출을 충족할 수 있습니다. 변경 알림은 드라이버가 디바이스를 쿼리하고 디바이스 구성 상태를 업데이트하도록 트리거하기 때문에 드라이버가 레지스트리에 저장된 정보가 올바른지 확인할 수 있습니다.

  10. 드라이버는 최신 구성에 따라 UI를 업데이트합니다.

    알림 메시지에 변경된 값이 전달되기 때문에 드라이버에서 디바이스 설치 중에 변경이 발생한 시기를 확인할 수 있습니다. 그러나 알림 메커니즘을 통해 알림을 보내기에는 너무 큰 경우 알림에는 하나 이상의 ReducedSchema 인스턴스가 있으며, 각 인스턴스는 디바이스 특성이 변경되었지만 새 값에 대한 세부 정보가 없음을 나타냅니다.