设备提供程序是计算机在每个系统启动时启动的已注册对象。 设备提供程序向设备主机注册并注销正在运行的设备,以响应某些事件。 这些设备是在系统启动时自动启动的设备。 出于安全原因,设备提供程序通常应作为 localService 运行,而不是 LocalSystem。
设备提供程序可用于暂时性设备。 设备提供程序还可用于将设备桥接到已轮询媒体。 例如,外围设备(如数字音乐播放器)通过串行端口连接到计算机。 若要将音乐播放器公开为基于 UPnP 的设备,需要设备控制对象和一组服务对象。 这些对象以串行命令的形式实现基于 UPnP 的音乐播放器作。 但是,音乐播放器必须插入串行端口并可用于控制,然后才能注册这些对象。
由于串行端口在设备连接时不提供显式通知机制,因此需要轮询代码。 此代码可以在设备提供程序对象、服务或独立应用程序中实现。 启动计算机后,设备主机实例化设备提供程序对象,然后调用其 Start 方法。 当设备提供程序检测到音乐播放器设备是否存在时,它会实例化相应的设备控制对象,并通过调用 IUPnPRegistrar::RegisterRunningDevice来注册它。 此方法发布设备并将其报给基于 UPnP 的网络。
也可以通过实现轮询串行端口的服务来实现相同的功能。 但是,设备提供程序只需实现核心功能(轮询)即可简化作,因为设备提供程序依赖设备主机来启动和停止它们。 使用设备提供程序比实现服务更简单。
在注册时和每次后续的系统启动时,计算机实例化设备提供程序对象,然后调用其 IUPnPDeviceProvider::Start 方法,向其传递注册期间指定的初始化字符串。
调用 Start 方法后,设备提供程序将执行任何必要的处理,并在必要时通过调用 IUPnPRegistrar::RegisterRunningDevice注册设备来注册设备,如 向设备主机注册托管设备部分所述。
关闭计算机后,设备主机调用 IUPnPDeviceProvider::Stop 方法以指示设备提供程序终止其作。