디바이스 공급자
디바이스 공급자는 컴퓨터가 모든 시스템 시작 시 시작하는 등록된 개체입니다. 디바이스 공급자는 일부 이벤트에 대한 응답으로 실행 중인 디바이스를 디바이스 호스트에 등록 및 등록 취소합니다. 이러한 디바이스는 시스템 시작 시 자동으로 시작된 디바이스입니다. 보안상의 이유로 디바이스 공급자는 일반적으로 LocalSystem이 아닌 LocalService로 실행되어야 합니다.
디바이스 공급자는 일시적인 디바이스에 사용할 수 있습니다. 디바이스 공급자를 사용하여 디바이스를 폴링된 미디어에 연결할 수도 있습니다. 예를 들어 디지털 음악 플레이어와 같은 주변 장치는 직렬 포트를 통해 컴퓨터에 연결됩니다. 음악 플레이어를 UPnP 기반 디바이스로 노출하려면 디바이스 제어 개체와 서비스 개체 집합이 필요합니다. 이러한 개체는 UPnP 기반 음악 플레이어 작업을 직렬 명령으로 구현합니다. 그러나 이러한 개체가 등록되기 전에 음악 플레이어를 직렬 포트에 연결하고 제어할 수 있어야 합니다.
직렬 포트는 디바이스가 연결되면 명시적 알림 메커니즘을 제공하지 않으므로 폴링 코드가 필요합니다. 이 코드는 디바이스 공급자 개체, 서비스 또는 독립 실행형 애플리케이션에서 구현할 수 있습니다. 컴퓨터가 시작되면 디바이스 호스트는 디바이스 공급자 개체를 인스턴스화한 다음 Start 메서드를 호출합니다. 디바이스 공급자가 음악 플레이어 디바이스의 존재를 감지하면 적절한 디바이스 컨트롤 개체를 인스턴스화하고 IUPnPRegistrar::RegisterRunningDevice를 호출하여 등록합니다. 이 메서드는 디바이스를 게시하고 UPnP 기반 네트워크에 알릴 수 있습니다.
직렬 포트를 폴링하는 서비스를 구현하여 동일한 기능을 수행할 수도 있습니다. 그러나 디바이스 공급자는 디바이스 공급자가 디바이스 호스트를 사용하여 시작하고 중지하기 때문에 핵심 기능인 폴링만 구현하도록 요구하여 작업을 간소화합니다. 디바이스 공급자를 사용하는 것은 서비스를 구현하는 것보다 간단합니다.
등록 시 및 후속 시스템 시작 시 컴퓨터는 디바이스 공급자 개체를 인스턴스화한 다음 IUPnPDeviceProvider::Start 메서드를 호출하여 등록 중에 지정된 초기화 문자열을 전달합니다.
Start 메서드가 호출되면 디바이스 공급자는 필요한 모든 처리를 수행하고 필요한 경우 디바이스 공급자는 디바이스 호스트에 호스트된 디바이스 등록 섹션에 설명된 대로 IUPnPRegistrar::RegisterRunningDevice를 호출하여 디바이스를 등록합니다.
컴퓨터가 종료되면 디바이스 호스트는 IUPnPDeviceProvider::Stop 메서드를 호출하여 디바이스 공급자가 작업을 종료함을 나타냅니다.