0

我正在测试 uPNP API。有一个方法:IUPnPRegistrar::GetUniqueDeviceName。我如何使用它来获取唯一的设备名称。这是该方法的参数:

HRESULT GetUniqueDeviceName(
  [in]   BSTR bstrDeviceIdentifier,
  [in]   BSTR bstrTemplateUDN,
  [out]  BSTR *pbstrUDN
);

在我的主机中,有一个媒体播放器设备:

IsRootDevice=-1
UniqueDeviceName=uuid:a0a07e13-cc50-4db0-97b3-2a4b93ef0736
FriendlyName=VISITOR
type_=urn:schemas-upnp-org:device:MediaRenderer:1
PresentationURL=
ManufacturerName=Microsoft Corporation
ManufacturerURL=http://www.microsoft.com/
ModelName=Windows Media Player
ModelNumber=12
Description=Windows Media Player Renderer
ModelURL=http://go.microsoft.com/fwlink/?LinkId=105927
UPC=
SerialNumber={DCD14EBE-CEAE-421F-87DE-2C10780E99E2}
Service=urn:upnp-org:serviceId:RenderingControl
ServiceTypeIdentifier=urn:schemas-upnp-org:service:RenderingControl:1

我认为我设备的 UniqueDeviceName 是“uuid:a0a07e13-cc50-4db0-97b3-2a4b93ef0736”。为了检索方法中的第三个值,我应该将什么值传递给第一个和第二个参数?

4

1 回答 1

0

GetUniqueDeviceName只是 Win32 C API 调用UpnpGetUDN的包装器。那个明确说pszTemplateUDN(即GetUniqueDeviceName中的bstrTemplateUDN)可能为 NULL,在这种情况下,您将返回根设备的 UDN。我不明白微软所说的“设备描述模板”是什么意思。更好的说法是,我知道 UPnP 中的设备描述模板是什么意思,但它不包含任何特定的 UDN。是模板吧?因此,可能只是UPNPDEVICEINFO结构的一个令人困惑的名称,您应该在系统重新启动时保留它。这是 UPnP 所要求的,但 Windows upnphost 不适合您。

所以回答你的问题:

  • strDeviceIdentifier您应该从 RegisterDevice 获得
  • bstrTemplateUDN只要您的测试设备中没有嵌入式设备,您就可以安全使用 NULL(我仍然需要查看此类设备)
  • pbstrUDN是您返回的指定设备的 UDN

免责声明:我不知道 upnphost 也不知道 iupnpregistrar,我只是碰巧有一些 UPnP 和 Win32 API 的背景,所以知道在哪里挖掘信息。

于 2012-06-07T11:27:15.683 回答