如何使用IUPnPRegistrar :: GetUniqueDeviceName?

时间:2012-06-07 07:28:56

标签: windows delphi upnp

我正在测试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”。为了检索方法中的第三个值,我应该传递给第一个和第二个参数什么值?

1 个答案:

答案 0 :(得分: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中有一些背景,所以知道在哪里挖掘信息。