Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

553 lines
17 KiB

  1. //+---------------------------------------------------------------------------
  2. //
  3. // Microsoft Windows
  4. // Copyright (C) Microsoft Corporation, 1997.
  5. //
  6. // File: H O S T P . I D L
  7. //
  8. // Contents: Private objects for the UPnP Device Host
  9. //
  10. // Notes:
  11. //
  12. // Author: danielwe 7 Aug 2000
  13. //
  14. //----------------------------------------------------------------------------
  15. cpp_quote("//+-------------------------------------------------------------------------")
  16. cpp_quote("//")
  17. cpp_quote("// Microsoft Windows")
  18. cpp_quote("// Copyright (C) Microsoft Corporation, 1992-2000.")
  19. cpp_quote("//")
  20. cpp_quote("//--------------------------------------------------------------------------")
  21. cpp_quote("#if ( _MSC_VER >= 800 )")
  22. cpp_quote("#pragma warning(disable:4201)")
  23. cpp_quote("#endif")
  24. #ifndef DO_NO_IMPORTS
  25. import "ocidl.idl";
  26. #endif
  27. // We want to be a proxy/stub DLL for all of the interfaces in
  28. // the following IDL files. Therefore we #include them instead of importing
  29. // them.
  30. //
  31. //#define DO_NO_IMPORTS
  32. import "upnphost.idl";
  33. // Reserved GUIDS for our use
  34. //
  35. // 6d8ff8d0-730d-11d4-bf42-00b0d0118b56
  36. // 6d8ff8d1-730d-11d4-bf42-00b0d0118b56 IID_IUPnPEventingManager
  37. // 6d8ff8d2-730d-11d4-bf42-00b0d0118b56 CLSID_UPnPEventingManager
  38. // 6d8ff8d3-730d-11d4-bf42-00b0d0118b56 IID_IUPnPContainer
  39. // 6d8ff8d4-730d-11d4-bf42-00b0d0118b56 IID_IUPnPContainerManager
  40. // 6d8ff8d5-730d-11d4-bf42-00b0d0118b56 IID_IUPnPDynamicContentProvider
  41. // 6d8ff8d6-730d-11d4-bf42-00b0d0118b56 IID_IUPnPDynamicContentSource
  42. // 6d8ff8d7-730d-11d4-bf42-00b0d0118b56 IID_IUPnPDescriptionManager
  43. // 6d8ff8d8-730d-11d4-bf42-00b0d0118b56 IID_IUPnPAutomationProxy
  44. // 6d8ff8d9-730d-11d4-bf42-00b0d0118b56 IID_IUPnPDevicePersistenceManager
  45. // 6d8ff8da-730d-11d4-bf42-00b0d0118b56 IID_IUPnPRegistrarLookup
  46. // 6d8ff8db-730d-11d4-bf42-00b0d0118b56 IID_IUPnPRegistrarPrivate
  47. // 6d8ff8dc-730d-11d4-bf42-00b0d0118b56 CLSID_UPnPDynamicContentSource
  48. // 6d8ff8dd-730d-11d4-bf42-00b0d0118b56 CLSID_UPnPDescriptionManager
  49. // 6d8ff8de-730d-11d4-bf42-00b0d0118b56 IID_IUPnPRegistrarICSSupport
  50. // 6d8ff8df-730d-11d4-bf42-00b0d0118b56 CLSID_UPnPDevicePersistenceManager
  51. // 6d8ff8e0-730d-11d4-bf42-00b0d0118b56 CLSID_UPnPContainer
  52. // 6d8ff8e1-730d-11d4-bf42-00b0d0118b56 CLSID_UPnPContainerManager
  53. // 6d8ff8e2-730d-11d4-bf42-00b0d0118b56 CLSID_UPnPEventingManagerDiag (obsoleted)
  54. // 6d8ff8e4-730d-11d4-bf42-00b0d0118b56 IID_IUPnPValidationManager
  55. // 6d8ff8e5-730d-11d4-bf42-00b0d0118b56 CLSID_UPnPValidationManager
  56. // 6d8ff8e6-730d-11d4-bf42-00b0d0118b56
  57. // 6d8ff8e7-730d-11d4-bf42-00b0d0118b56
  58. // 6d8ff8e8-730d-11d4-bf42-00b0d0118b56
  59. // 6d8ff8e9-730d-11d4-bf42-00b0d0118b56
  60. // ...
  61. // 6d8ffcb0-730d-11d4-bf42-00b0d0118b56
  62. // 6d8ffcb1-730d-11d4-bf42-00b0d0118b56
  63. cpp_quote("EXTERN_C const CLSID CLSID_UPnPEventingManager;")
  64. cpp_quote("EXTERN_C const CLSID CLSID_UPnPAutomationProxy;")
  65. cpp_quote("EXTERN_C const CLSID CLSID_UPnPDynamicContentSource;")
  66. cpp_quote("EXTERN_C const CLSID CLSID_UPnPDescriptionManager;")
  67. cpp_quote("EXTERN_C const CLSID CLSID_UPnPRegistrar;")
  68. cpp_quote("EXTERN_C const CLSID CLSID_UPnPDevicePersistenceManager;")
  69. cpp_quote("EXTERN_C const CLSID CLSID_UPnPContainer;")
  70. cpp_quote("EXTERN_C const CLSID CLSID_UPnPContainerManager;")
  71. cpp_quote("EXTERN_C const CLSID CLSID_UPnPValidationManager;")
  72. ////////////////////////////////////
  73. // Error definitions
  74. cpp_quote("#define UPNP_E_INVALID_CONTENT_TYPE MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xA200)")
  75. cpp_quote("#define UPNP_E_MISSING_SOAP_ACTION MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xA201)")
  76. cpp_quote("#define UPNP_E_MISSING_CONTENT_LENGTH MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xA202)")
  77. cpp_quote("#define UPNP_E_METHOD_NOT_IMPLEMENTED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xA203)")
  78. cpp_quote("#define UPNP_E_METHOD_NOT_ALLOWED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xA204)")
  79. cpp_quote("#define UPNP_E_BAD_REQUEST MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xA205)")
  80. ////////////////////////////////////////
  81. // Interface forward declarations
  82. interface IUPnPEventingManager;
  83. interface IUPnPContainer;
  84. interface IUPnPContainerManager;
  85. interface IUPnPDynamicContentProvider;
  86. interface IUPnPDynamicContentSource;
  87. interface IUPnPDescriptionManager;
  88. interface IUPnPDevicePersistenceManager;
  89. interface IUPnPRegistrarLookup;
  90. interface IUPnPRegistrarPrivate;
  91. interface IUPnPAutomationProxy;
  92. interface IUPnPServiceDescriptionInfo;
  93. interface IUPnPRegistrarICSSupport;
  94. ////////////////////////////////////////
  95. // Interface definitions
  96. [
  97. uuid(6d8ff8d1-730d-11d4-bf42-00b0d0118b56),
  98. pointer_default(unique)
  99. ]
  100. interface IUPnPEventingManager : IUnknown
  101. {
  102. [helpstring("method Initialize")]
  103. HRESULT Initialize(
  104. [in] LPCWSTR szUdn,
  105. [in] LPCWSTR szSid,
  106. [in] IUPnPAutomationProxy * puap,
  107. [in] IUnknown * punkSvc,
  108. [in] BOOL bRunning);
  109. [helpstring("method AddSubscriber")]
  110. HRESULT AddSubscriber(
  111. [in] DWORD cszUrl,
  112. [in, size_is(cszUrl)] LPCWSTR * rgszCallbackUrl,
  113. [in] DWORD dwIpAddr,
  114. [in, out] DWORD * pcsecTimeout,
  115. [out] LPWSTR * pszSid);
  116. [helpstring("method RenewSubscriber")]
  117. HRESULT RenewSubscriber(
  118. [in, out] DWORD * pcsecTimeout,
  119. [in] LPWSTR szSid);
  120. [helpstring("method RemoveSubscriber")]
  121. HRESULT RemoveSubscriber(
  122. [in] LPWSTR szSid);
  123. [helpstring("method Shutdown")]
  124. HRESULT Shutdown();
  125. }
  126. [
  127. uuid(6d8ff8d3-730d-11d4-bf42-00b0d0118b56),
  128. pointer_default(unique)
  129. ]
  130. interface IUPnPContainer : IUnknown
  131. {
  132. HRESULT CreateInstance(
  133. [in] REFCLSID clsid,
  134. [in] REFIID riid,
  135. [out, iid_is(riid)] void ** ppv);
  136. HRESULT Shutdown();
  137. HRESULT SetParent(
  138. [in] DWORD pid);
  139. }
  140. [
  141. uuid(6d8ff8d4-730d-11d4-bf42-00b0d0118b56),
  142. pointer_default(unique)
  143. ]
  144. interface IUPnPContainerManager : IUnknown
  145. {
  146. HRESULT ReferenceContainer(
  147. [in, string] const wchar_t * szContainer);
  148. HRESULT UnreferenceContainer(
  149. [in, string] const wchar_t * szContainer);
  150. HRESULT CreateInstance(
  151. [in, string] const wchar_t * szContainer,
  152. [in] REFCLSID clsid,
  153. [in] REFIID riid,
  154. [out, iid_is(riid)] void ** ppv);
  155. HRESULT CreateInstanceWithProgId(
  156. [in, string] const wchar_t * szContainer,
  157. [in, string] const wchar_t * szProgId,
  158. [in] REFIID riid,
  159. [out, iid_is(riid)] void ** ppv);
  160. HRESULT Shutdown();
  161. }
  162. [
  163. uuid(6d8ff8d5-730d-11d4-bf42-00b0d0118b56),
  164. pointer_default(unique)
  165. ]
  166. interface IUPnPDynamicContentProvider : IUnknown
  167. {
  168. HRESULT GetContent(
  169. [in] REFGUID guidContent,
  170. [out] long * pnHeaderCount,
  171. [out, string, size_is(,*pnHeaderCount,)] wchar_t *** parszHeaders,
  172. [out] long * pnBytes,
  173. [out, size_is(,*pnBytes)] byte ** parBytes);
  174. }
  175. [
  176. uuid(6d8ff8d6-730d-11d4-bf42-00b0d0118b56),
  177. pointer_default(unique)
  178. ]
  179. interface IUPnPDynamicContentSource : IUnknown
  180. {
  181. HRESULT GetContent(
  182. [in] REFGUID guidContent,
  183. [out] long * pnHeaderCount,
  184. [out, string, size_is(,*pnHeaderCount,)] wchar_t *** parszHeaders,
  185. [out] long * pnBytes,
  186. [out, size_is(,*pnBytes)] byte ** parBytes);
  187. HRESULT RegisterProvider(
  188. [in] IUPnPDynamicContentProvider * pProvider);
  189. HRESULT UnregisterProvider(
  190. [in] IUPnPDynamicContentProvider * pProvider);
  191. }
  192. [
  193. uuid(6d8ff8d7-730d-11d4-bf42-00b0d0118b56),
  194. pointer_default(unique)
  195. ]
  196. interface IUPnPDescriptionManager : IUnknown
  197. {
  198. HRESULT ProcessDescriptionTemplate(
  199. [in] BSTR bstrTemplate,
  200. [in, string] const wchar_t * szResourcePath,
  201. [in, out] GUID * pguidPhysicalDeviceIdentifier,
  202. [in] BOOL bPersist,
  203. [in] BOOL bReregister);
  204. HRESULT PublishDescription(
  205. [in] REFGUID guidPhysicalDeviceIdentifier,
  206. [in] long nLifeTime);
  207. HRESULT LoadDescription(
  208. [in] REFGUID guidPhysicalDeviceIdentifier);
  209. HRESULT RemoveDescription(
  210. [in] REFGUID guidPhysicalDeviceIdentifier,
  211. [in] BOOL bPermanent);
  212. HRESULT GetDescriptionText(
  213. [in] REFGUID guidPhysicalDeviceIdentifier,
  214. [out] BSTR * pbstrDescriptionDocument);
  215. HRESULT GetUDNs(
  216. [in] REFGUID guidPhysicalDeviceIdentifier,
  217. [out] long * pnUDNCount,
  218. [out, size_is(,*pnUDNCount,), string]
  219. wchar_t *** parszUDNs);
  220. HRESULT GetUniqueDeviceName(
  221. [in] REFGUID guidPhysicalDeviceIdentifier,
  222. [in, string] const wchar_t * szTemplateUDN,
  223. [out, string] wchar_t ** pszUDN);
  224. HRESULT GetSCPDText(
  225. [in] REFGUID guidPhysicalDeviceIdentifier,
  226. [in, string] const wchar_t * szUDN,
  227. [in, string] const wchar_t * szServiceId,
  228. [out, string] wchar_t ** pszSCPDText,
  229. [out, string] wchar_t ** pszServiceType);
  230. }
  231. [
  232. uuid(6d8ff8d9-730d-11d4-bf42-00b0d0118b56),
  233. pointer_default(unique)
  234. ]
  235. interface IUPnPDevicePersistenceManager : IUnknown
  236. {
  237. HRESULT SavePhyisicalDevice(
  238. [in] REFGUID guidPhysicalDeviceIdentifier,
  239. [in, string] const wchar_t * szProgIdDeviceControlClass,
  240. [in, string] const wchar_t * szInitString,
  241. [in, string] const wchar_t * szContainerId,
  242. [in, string] const wchar_t * szResourcePath,
  243. [in] long nLifeTime);
  244. HRESULT LookupPhysicalDevice(
  245. [in] REFGUID guidPhysicalDeviceIdentifier,
  246. [out, string] wchar_t ** pszProgIdDeviceControlClass,
  247. [out, string] wchar_t ** pszInitString,
  248. [out, string] wchar_t ** pszContainerId,
  249. [out, string] wchar_t ** pszResourcePath,
  250. [out] long * pnLifeTime);
  251. HRESULT RemovePhysicalDevice(
  252. [in] REFGUID guidPhysicalDeviceIdentifier);
  253. HRESULT GetPhysicalDevices(
  254. [out] long * pnDevices,
  255. [out, size_is(,*pnDevices)]
  256. GUID ** parguidPhysicalDeviceIdentifiers);
  257. HRESULT SaveDeviceProvider(
  258. [in, string] const wchar_t * szProviderName,
  259. [in, string] const wchar_t * szProgIdProviderClass,
  260. [in, string] const wchar_t * szInitString,
  261. [in, string] const wchar_t * szContainerId);
  262. HRESULT LookupDeviceProvider(
  263. [in, string] const wchar_t * szProviderName,
  264. [out, string] wchar_t ** pszProgIdProviderClass,
  265. [out, string] wchar_t ** pszInitString,
  266. [out, string] wchar_t ** pszContainerId);
  267. HRESULT RemoveDeviceProvider(
  268. [in, string] const wchar_t * szProviderName);
  269. HRESULT GetDeviceProviders(
  270. [out] long * pnProviders,
  271. [out, string, size_is(,*pnProviders,)]
  272. wchar_t *** parszProviderNames);
  273. }
  274. [
  275. uuid(6d8ff8da-730d-11d4-bf42-00b0d0118b56),
  276. pointer_default(unique)
  277. ]
  278. interface IUPnPRegistrarLookup : IUnknown
  279. {
  280. HRESULT GetEventingManager(
  281. [in, string] const wchar_t * szUDN,
  282. [in, string] const wchar_t * szServiceId,
  283. [out] IUPnPEventingManager ** ppEventingManager);
  284. HRESULT GetAutomationProxy(
  285. [in, string] const wchar_t * szUDN,
  286. [in, string] const wchar_t * szServiceId,
  287. [out] IUPnPAutomationProxy ** ppAutomationProxy);
  288. }
  289. [
  290. uuid(6d8ff8db-730d-11d4-bf42-00b0d0118b56),
  291. pointer_default(unique)
  292. ]
  293. interface IUPnPRegistrarPrivate : IUnknown
  294. {
  295. HRESULT Initialize();
  296. HRESULT Shutdown();
  297. HRESULT GetSCPDText(
  298. [in] REFGUID guidPhysicalDeviceIdentifier,
  299. [in, string] const wchar_t * szUDN,
  300. [in, string] const wchar_t * szServiceId,
  301. [out, string] wchar_t ** pszSCPDText,
  302. [out, string] wchar_t ** pszServerType);
  303. HRESULT GetDescriptionText(
  304. [in] REFGUID guidPhysicalDeviceIdentifier,
  305. [out] BSTR * pbstrDescriptionDocument);
  306. }
  307. typedef struct tagUPNP_CONTROL_REQUEST
  308. {
  309. BSTR bstrActionName;
  310. DWORD cInputArgs;
  311. [size_is(cInputArgs)] VARIANT * rgvarInputArgs;
  312. } UPNP_CONTROL_REQUEST;
  313. typedef [switch_type(BOOL)] union tagUPNP_CONTROL_RESPONSE_DATA
  314. {
  315. [case(TRUE)] struct
  316. {
  317. DWORD cOutputArgs;
  318. [size_is(cOutputArgs)] VARIANT * rgvarOutputArgs;
  319. } Success;
  320. [case(FALSE)] struct
  321. {
  322. BSTR bstrFaultCode;
  323. BSTR bstrFaultString;
  324. BSTR bstrUPnPErrorCode;
  325. BSTR bstrUPnPErrorString;
  326. } Fault;
  327. [default];
  328. } UPNP_CONTROL_RESPONSE_DATA;
  329. typedef struct tagUPNP_CONTROL_RESPONSE
  330. {
  331. BSTR bstrActionName;
  332. BOOL fSucceeded;
  333. [switch_is(fSucceeded)] UPNP_CONTROL_RESPONSE_DATA ucrData;
  334. } UPNP_CONTROL_RESPONSE;
  335. [
  336. uuid(c4ab1fea-d0dd-44fd-96cb-41b41b5f718a),
  337. helpstring("IUPnPAutomationProxy Interface"),
  338. pointer_default(unique)
  339. ]
  340. interface IUPnPAutomationProxy : IUnknown
  341. {
  342. [helpstring("method Initialize")]
  343. HRESULT Initialize(
  344. [in] IUnknown * punkSvcObject,
  345. [in] LPWSTR pszSvcDescription,
  346. [in] LPWSTR pszSvcType,
  347. [in] BOOL bRunning);
  348. [helpstring("method GetDispIdsOfEventedVariables")]
  349. HRESULT GetDispIdsOfEventedVariables(
  350. [out] DWORD * pcEventedVars,
  351. [out, size_is(, *pcEventedVars)] DISPID ** prgdispidEventedVars);
  352. [helpstring("method QueryStateVariablesByDispId")]
  353. HRESULT QueryStateVariablesByDispIds(
  354. [in] DWORD cDispIds,
  355. [in, size_is(cDispIds)] DISPID * rgDispIds,
  356. [out] DWORD * pcVariables,
  357. [out, size_is(, *pcVariables)] LPWSTR ** prgszVariableNames,
  358. [out, size_is(, *pcVariables)] VARIANT ** prgvarVariableValues,
  359. [out, size_is(, *pcVariables)] LPWSTR ** prgszVariableDataTypes);
  360. [helpstring("method ExecuteRequest")]
  361. HRESULT ExecuteRequest(
  362. [in] UPNP_CONTROL_REQUEST * pucreq,
  363. [out] UPNP_CONTROL_RESPONSE * pucresp);
  364. [helpstring("method GetServiceType")]
  365. HRESULT GetServiceType(
  366. [out] LPWSTR * pszSvcType);
  367. };
  368. [
  369. uuid(f5b63656-069d-4e80-b4fd-9e0db16604d8),
  370. helpstring("IUPnPServiceDescriptionInfo Interface"),
  371. pointer_default(unique)
  372. ]
  373. interface IUPnPServiceDescriptionInfo : IUnknown
  374. {
  375. [helpstring("method GetVariableType")]
  376. HRESULT GetVariableType(
  377. [in] LPWSTR pszVarName,
  378. [out] BSTR * pbstrType);
  379. [helpstring("method GetInputArgumentNamesAndTypes")]
  380. HRESULT GetInputArgumentNamesAndTypes(
  381. [in] LPWSTR pszActionName,
  382. [out] DWORD * pcInArguments,
  383. [out, size_is(, *pcInArguments)] BSTR ** prgbstrNames,
  384. [out, size_is(, *pcInArguments)] BSTR ** prgbstrTypes);
  385. [helpstring("method GetOutputArgumentNamesAndTypes")]
  386. HRESULT GetOutputArgumentNamesAndTypes(
  387. [in] LPWSTR pszActionName,
  388. [out] DWORD * pcOutArguments,
  389. [out, size_is(, *pcOutArguments)] BSTR ** prgbstrNames,
  390. [out, size_is(, *pcOutArguments)] BSTR ** prgbstrTypes);
  391. };
  392. //
  393. // Debug only
  394. //
  395. typedef struct _UDH_SUBSCRIBER_INFO {
  396. [string] LPWSTR szDestUrl;
  397. FILETIME ftTimeout;
  398. DWORD csecTimeout;
  399. DWORD iSeq;
  400. [string] LPWSTR szSid;
  401. } UDH_SUBSCRIBER_INFO;
  402. typedef struct _UDH_EVTSRC_INFO {
  403. [string] LPWSTR szEsid;
  404. DWORD cSubs;
  405. [size_is(cSubs)] UDH_SUBSCRIBER_INFO *rgSubs;
  406. } UDH_EVTSRC_INFO;
  407. [
  408. uuid(6d8ff8e4-730d-11d4-bf42-00b0d0118b56),
  409. pointer_default(unique)
  410. ]
  411. interface IUPnPValidationManager : IUnknown
  412. {
  413. HRESULT ValidateDescriptionDocument(
  414. [in] BSTR bstrTemplate,
  415. [out, string] wchar_t ** pszErrorString);
  416. HRESULT ValidateServiceDescription(
  417. [in, string] const wchar_t * szFullPath,
  418. [out, string] wchar_t ** pszErrorString);
  419. HRESULT ValidateDescriptionDocumentAndReferences(
  420. [in] BSTR bstrTemplate,
  421. [in, string] const wchar_t * szResourcePath,
  422. [out, string] wchar_t ** pszErrorString);
  423. }
  424. [
  425. uuid(6d8ff8de-730d-11d4-bf42-00b0d0118b56),
  426. pointer_default(unique)
  427. ]
  428. interface IUPnPRegistrarICSSupport : IUnknown
  429. {
  430. HRESULT SetICSInterfaces([in] long nCount, [in, size_is(nCount)] GUID * arPrivateInterfaceGuids);
  431. HRESULT SetICSOff();
  432. }
  433. ///////////////////////////////////////////
  434. // coclasses
  435. [
  436. uuid(6d8ff8d2-730d-11d4-bf42-00b0d0118b56),
  437. helpstring("UPnPEventingManagerClass")
  438. ]
  439. coclass UPnPEventingManager
  440. {
  441. [default] interface IUPnPEventingManager;
  442. interface IUPnPEventSink;
  443. };
  444. [
  445. uuid(0fb40f0d-1021-4022-8da0-aab0588dfc8b),
  446. helpstring("UPnPAutomationProxy Class")
  447. ]
  448. coclass UPnPAutomationProxy
  449. {
  450. [default] interface IUPnPAutomationProxy;
  451. interface IUPnPServiceDescriptionInfo;
  452. };
  453. [
  454. uuid(6d8ff8dc-730d-11d4-bf42-00b0d0118b56)
  455. ]
  456. coclass UPnPDynamicContentSource
  457. {
  458. [default] interface IUnknown;
  459. };
  460. [
  461. uuid(6d8ff8dd-730d-11d4-bf42-00b0d0118b56)
  462. ]
  463. coclass UPnPDescriptionManager
  464. {
  465. [default] interface IUnknown;
  466. };
  467. [
  468. uuid(6d8ff8df-730d-11d4-bf42-00b0d0118b56)
  469. ]
  470. coclass UPnPDevicePersistenceManager
  471. {
  472. [default] interface IUnknown;
  473. };
  474. [
  475. uuid(6d8ff8e0-730d-11d4-bf42-00b0d0118b56)
  476. ]
  477. coclass UPnPContainer
  478. {
  479. [default] interface IUnknown;
  480. }
  481. [
  482. uuid(6d8ff8e1-730d-11d4-bf42-00b0d0118b56)
  483. ]
  484. coclass UPnPContainerManager
  485. {
  486. [default] interface IUnknown;
  487. }
  488. [
  489. uuid(6d8ff8e5-730d-11d4-bf42-00b0d0118b56)
  490. ]
  491. coclass UPnPValidationManager
  492. {
  493. [default] interface IUnknown;
  494. }