netlistmgr.idl 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440
  1. /*
  2. * Copyright 2014 Hans Leidekker for CodeWeavers
  3. *
  4. * This library is free software; you can redistribute it and/or
  5. * modify it under the terms of the GNU Lesser General Public
  6. * License as published by the Free Software Foundation; either
  7. * version 2.1 of the License, or (at your option) any later version.
  8. *
  9. * This library is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12. * Lesser General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU Lesser General Public
  15. * License along with this library; if not, write to the Free Software
  16. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  17. */
  18. import "oaidl.idl";
  19. import "objidl.idl";
  20. #ifndef __WIDL__
  21. #define threading(model)
  22. #endif
  23. interface IEnumNetworks;
  24. interface IEnumNetworkConnections;
  25. interface INetwork;
  26. interface INetworkConnection;
  27. interface INetworkConnectionEvents;
  28. interface INetworkCostManager;
  29. interface INetworkEvents;
  30. interface INetworkListManager;
  31. interface INetworkListManagerEvents;
  32. typedef [v1_enum] enum NLM_NETWORK_CLASS
  33. {
  34. NLM_NETWORK_IDENTIFYING = 0x01,
  35. NLM_NETWORK_IDENTIFIED = 0x02,
  36. NLM_NETWORK_UNIDENTIFIED = 0x03
  37. } NLM_NETWORK_CLASS;
  38. typedef [v1_enum] enum NLM_INTERNET_CONNECTIVITY
  39. {
  40. NLM_INTERNET_CONNECTIVITY_WEBHIJACK = 0x01,
  41. NLM_INTERNET_CONNECTIVITY_PROXIED = 0x02,
  42. NLM_INTERNET_CONNECTIVITY_CORPORATE = 0x04
  43. } NLM_INTERNET_CONNECTIVITY;
  44. typedef [v1_enum] enum NLM_CONNECTIVITY
  45. {
  46. NLM_CONNECTIVITY_DISCONNECTED = 0x0000,
  47. NLM_CONNECTIVITY_IPV4_NOTRAFFIC = 0x0001,
  48. NLM_CONNECTIVITY_IPV6_NOTRAFFIC = 0x0002,
  49. NLM_CONNECTIVITY_IPV4_SUBNET = 0x0010,
  50. NLM_CONNECTIVITY_IPV4_LOCALNETWORK = 0x0020,
  51. NLM_CONNECTIVITY_IPV4_INTERNET = 0x0040,
  52. NLM_CONNECTIVITY_IPV6_SUBNET = 0x0100,
  53. NLM_CONNECTIVITY_IPV6_LOCALNETWORK = 0x0200,
  54. NLM_CONNECTIVITY_IPV6_INTERNET = 0x0400
  55. } NLM_CONNECTIVITY;
  56. typedef [v1_enum] enum NLM_DOMAIN_TYPE
  57. {
  58. NLM_DOMAIN_TYPE_NON_DOMAIN_NETWORK = 0x00,
  59. NLM_DOMAIN_TYPE_DOMAIN_NETWORK = 0x01,
  60. NLM_DOMAIN_TYPE_DOMAIN_AUTHENTICATED = 0x02
  61. } NLM_DOMAIN_TYPE;
  62. typedef [v1_enum] enum NLM_ENUM_NETWORK
  63. {
  64. NLM_ENUM_NETWORK_CONNECTED = 0x01,
  65. NLM_ENUM_NETWORK_DISCONNECTED = 0x02,
  66. NLM_ENUM_NETWORK_ALL = 0x03
  67. } NLM_ENUM_NETWORK;
  68. typedef [v1_enum] enum NLM_CONNECTION_COST
  69. {
  70. NLM_CONNECTION_COST_UNKNOWN = 0x0,
  71. NLM_CONNECTION_COST_UNRESTRICTED = 0x1,
  72. NLM_CONNECTION_COST_FIXED = 0x2,
  73. NLM_CONNECTION_COST_VARIABLE = 0x4,
  74. NLM_CONNECTION_COST_OVERDATALIMIT = 0x10000,
  75. NLM_CONNECTION_COST_CONGESTED = 0x20000,
  76. NLM_CONNECTION_COST_ROAMING = 0x40000,
  77. NLM_CONNECTION_COST_APPROACHINGDATALIMIT = 0x80000
  78. } NLM_CONNECTION_COST;
  79. typedef struct NLM_SOCKADDR
  80. {
  81. BYTE data[128];
  82. } NLM_SOCKADDR;
  83. const UINT32 NLM_UNKNOWN_DATAPLAN_STATUS = 0xffffffff;
  84. typedef struct NLM_USAGE_DATA
  85. {
  86. DWORD UsageInMegabytes;
  87. FILETIME LastSyncTime;
  88. } NLM_USAGE_DATA;
  89. typedef struct NLM_DATAPLAN_STATUS
  90. {
  91. GUID InterfaceGuid;
  92. NLM_USAGE_DATA UsageData;
  93. DWORD DataLimitInMegabytes;
  94. DWORD InboundBandwidthInKbps;
  95. DWORD OutboundBandwidthInKbps;
  96. FILETIME NextBillingCycle;
  97. DWORD MaxTransferSizeInMegabytes;
  98. DWORD Reserved;
  99. } NLM_DATAPLAN_STATUS;
  100. [
  101. object,
  102. pointer_default(unique),
  103. uuid(dcb00008-570f-4a9b-8d69-199fdba5723b)
  104. ]
  105. interface INetworkCostManager : IUnknown
  106. {
  107. HRESULT GetCost(
  108. [out] DWORD *pCost,
  109. [in, unique] NLM_SOCKADDR *pDestIPAddr);
  110. HRESULT GetDataPlanStatus(
  111. [out] NLM_DATAPLAN_STATUS *pDataPlanStatus,
  112. [in, unique] NLM_SOCKADDR *pDestIPAddr);
  113. HRESULT SetDestinationAddresses(
  114. [in] UINT32 length,
  115. [in, unique, size_is(length)] NLM_SOCKADDR *pDestIPAddrList,
  116. [in] VARIANT_BOOL bAppend);
  117. }
  118. [
  119. object,
  120. pointer_default(unique),
  121. uuid(dcb0000a-570f-4a9b-8d69-199fdba5723b)
  122. ]
  123. interface INetworkConnectionCost : IUnknown
  124. {
  125. HRESULT GetCost(
  126. [out] DWORD *pCost);
  127. HRESULT GetDataPlanStatus(
  128. [out] NLM_DATAPLAN_STATUS *pDataPlanStatus);
  129. }
  130. [
  131. object,
  132. pointer_default(unique),
  133. uuid(dcb00009-570f-4a9b-8d69-199fdba5723b)
  134. ]
  135. interface INetworkCostManagerEvents : IUnknown
  136. {
  137. HRESULT CostChanged(
  138. [in] DWORD newCost,
  139. [in, unique] NLM_SOCKADDR *pDestAddr);
  140. HRESULT DataPlanStatusChanged(
  141. [in, unique] NLM_SOCKADDR *pDestAddr);
  142. }
  143. [
  144. object,
  145. oleautomation,
  146. pointer_default(unique),
  147. dual,
  148. uuid(dcb00003-570f-4a9b-8d69-199fdba5723b)
  149. ]
  150. interface IEnumNetworks : IDispatch
  151. {
  152. [id(DISPID_NEWENUM), propget, hidden, restricted]
  153. HRESULT _NewEnum(
  154. [out, retval] IEnumVARIANT **ppEnumVar);
  155. [id(1)]
  156. HRESULT Next(
  157. [in] ULONG celt,
  158. [out, size_is(celt), length_is(*pceltFetched)] INetwork **rgelt,
  159. [in, out] ULONG *pceltFetched);
  160. [id(2)]
  161. HRESULT Skip(
  162. [in] ULONG celt);
  163. [id(3)]
  164. HRESULT Reset();
  165. [id(4)]
  166. HRESULT Clone(
  167. [out, retval] IEnumNetworks **ppEnumNetwork);
  168. }
  169. [
  170. object,
  171. oleautomation,
  172. pointer_default(unique),
  173. dual,
  174. uuid(dcb00006-570f-4a9b-8d69-199fdba5723b)
  175. ]
  176. interface IEnumNetworkConnections : IDispatch
  177. {
  178. [id(DISPID_NEWENUM), propget, hidden, restricted]
  179. HRESULT _NewEnum(
  180. [out, retval] IEnumVARIANT **ppEnumVar);
  181. [id(1)]
  182. HRESULT Next(
  183. [in] ULONG celt,
  184. [out, size_is(celt), length_is(*pceltFetched)] INetworkConnection **rgelt,
  185. [in, out] ULONG *pceltFetched);
  186. [id(2)]
  187. HRESULT Skip(
  188. [in] ULONG celt);
  189. [id(3)]
  190. HRESULT Reset();
  191. [id(4)]
  192. HRESULT Clone(
  193. [out, retval] IEnumNetworkConnections **ppEnumNetwork);
  194. }
  195. [
  196. dual,
  197. object,
  198. oleautomation,
  199. pointer_default(unique),
  200. uuid(dcb00000-570f-4a9b-8d69-199fdba5723b)
  201. ]
  202. interface INetworkListManager : IDispatch
  203. {
  204. HRESULT GetNetworks(
  205. [in] NLM_ENUM_NETWORK Flags,
  206. [out, retval] IEnumNetworks **ppEnumNetwork);
  207. HRESULT GetNetwork(
  208. [in] GUID gdNetworkId,
  209. [out, retval] INetwork **ppNetwork);
  210. HRESULT GetNetworkConnections(
  211. [out, retval] IEnumNetworkConnections **ppEnum);
  212. HRESULT GetNetworkConnection(
  213. [in] GUID gdNetworkConnectionId,
  214. [out, retval] INetworkConnection **ppNetworkConnection);
  215. HRESULT IsConnectedToInternet(
  216. [out, retval] VARIANT_BOOL *pbIsConnected);
  217. HRESULT IsConnected(
  218. [out, retval] VARIANT_BOOL *pbIsConnected);
  219. HRESULT GetConnectivity(
  220. [out, retval] NLM_CONNECTIVITY *pConnectivity);
  221. }
  222. [
  223. threading(both),
  224. uuid(dcb00c01-570f-4a9b-8d69-199fdba5723b)
  225. ]
  226. coclass NetworkListManager { interface INetworkListManager; }
  227. [
  228. object,
  229. oleautomation,
  230. pointer_default(unique),
  231. uuid(DCB00001-570F-4A9B-8D69-199FDBA5723B)
  232. ]
  233. interface INetworkListManagerEvents : IUnknown
  234. {
  235. HRESULT ConnectivityChanged(
  236. [in] NLM_CONNECTIVITY newConnectivity);
  237. }
  238. [
  239. object,
  240. oleautomation,
  241. pointer_default(unique),
  242. uuid(dcb00007-570f-4a9b-8d69-199fdba5723b)
  243. ]
  244. interface INetworkConnectionEvents : IUnknown
  245. {
  246. typedef enum NLM_CONNECTION_PROPERTY_CHANGE
  247. {
  248. NLM_CONNECTION_PROPERTY_CHANGE_AUTHENTICATION = 1
  249. } NLM_CONNECTION_PROPERTY_CHANGE;
  250. HRESULT NetworkConnectionConnectivityChanged(
  251. [in] GUID connectionId,
  252. [in] NLM_CONNECTIVITY newConnectivity);
  253. HRESULT NetworkConnectionPropertyChanged(
  254. [in] GUID connectionId,
  255. [in] NLM_CONNECTION_PROPERTY_CHANGE flags);
  256. }
  257. [
  258. object,
  259. oleautomation,
  260. pointer_default(unique),
  261. dual,
  262. uuid(dcb00005-570f-4a9b-8d69-199fdba5723b)
  263. ]
  264. interface INetworkConnection : IDispatch
  265. {
  266. [id(1)]
  267. HRESULT GetNetwork(
  268. [out, retval] INetwork **ppNetwork);
  269. [propget, id(2)]
  270. HRESULT IsConnectedToInternet(
  271. [out, retval] VARIANT_BOOL *pbIsConnected);
  272. [propget, id(3)]
  273. HRESULT IsConnected(
  274. [out, retval] VARIANT_BOOL *pbIsConnected);
  275. [id(4)]
  276. HRESULT GetConnectivity(
  277. [out, retval] NLM_CONNECTIVITY *pConnectivity);
  278. [id(5)]
  279. HRESULT GetConnectionId(
  280. [out, retval] GUID *pgdConnectionId);
  281. [id(6)]
  282. HRESULT GetAdapterId(
  283. [out, retval] GUID *pgdAdapterId);
  284. [id(7)]
  285. HRESULT GetDomainType(
  286. [out, retval] NLM_DOMAIN_TYPE *pDomainType);
  287. }
  288. [
  289. object,
  290. oleautomation,
  291. pointer_default(unique),
  292. dual,
  293. uuid(dcb00002-570f-4a9b-8d69-199fdba5723b)
  294. ]
  295. interface INetwork : IDispatch
  296. {
  297. typedef enum NLM_NETWORK_CATEGORY
  298. {
  299. NLM_NETWORK_CATEGORY_PUBLIC = 0x00,
  300. NLM_NETWORK_CATEGORY_PRIVATE = 0x01,
  301. NLM_NETWORK_CATEGORY_DOMAIN_AUTHENTICATED = 0x02
  302. } NLM_NETWORK_CATEGORY;
  303. [id(1)]
  304. HRESULT GetName(
  305. [out, string, retval] BSTR *pszNetworkName);
  306. [id(2)]
  307. HRESULT SetName(
  308. [in, string] BSTR szNetworkNewName);
  309. [id(3)]
  310. HRESULT GetDescription(
  311. [out, string, retval] BSTR *pszDescription);
  312. [id(4)]
  313. HRESULT SetDescription(
  314. [in, string] BSTR szDescription);
  315. [id(5)]
  316. HRESULT GetNetworkId(
  317. [out, retval] GUID *pgdGuidNetworkId);
  318. [id(6)]
  319. HRESULT GetDomainType(
  320. [out, retval] NLM_DOMAIN_TYPE *pNetworkType);
  321. [id(7)]
  322. HRESULT GetNetworkConnections(
  323. [out, retval] IEnumNetworkConnections **ppEnumNetworkConnection);
  324. [id(8)]
  325. HRESULT GetTimeCreatedAndConnected(
  326. [out] DWORD *pdwLowDateTimeCreated,
  327. [out] DWORD *pdwHighDateTimeCreated,
  328. [out] DWORD *pdwLowDateTimeConnected,
  329. [out] DWORD *pdwHighDateTimeConnected);
  330. [propget, id(9)]
  331. HRESULT IsConnectedToInternet(
  332. [out, retval] VARIANT_BOOL *pbIsConnected);
  333. [propget, id(10)]
  334. HRESULT IsConnected(
  335. [out, retval] VARIANT_BOOL *pbIsConnected);
  336. [id(11)]
  337. HRESULT GetConnectivity(
  338. [out, retval] NLM_CONNECTIVITY *pConnectivity);
  339. [id(12)]
  340. HRESULT GetCategory(
  341. [out, retval] NLM_NETWORK_CATEGORY *pCategory);
  342. [id(13)]
  343. HRESULT SetCategory(
  344. [in] NLM_NETWORK_CATEGORY NewCategory);
  345. }
  346. [
  347. object,
  348. oleautomation,
  349. pointer_default(unique),
  350. uuid(dcb00004-570f-4a9b-8d69-199fdba5723b)
  351. ]
  352. interface INetworkEvents : IUnknown
  353. {
  354. typedef enum NLM_NETWORK_PROPERTY_CHANGE
  355. {
  356. NLM_NETWORK_PROPERTY_CHANGE_CONNECTION = 0x01,
  357. NLM_NETWORK_PROPERTY_CHANGE_DESCRIPTION = 0x02,
  358. NLM_NETWORK_PROPERTY_CHANGE_NAME = 0x04,
  359. NLM_NETWORK_PROPERTY_CHANGE_ICON = 0x08,
  360. NLM_NETWORK_PROPERTY_CHANGE_CATEGORY_VALUE = 0x10
  361. } NLM_NETWORK_PROPERTY_CHANGE;
  362. HRESULT NetworkAdded (
  363. [in] GUID networkId);
  364. HRESULT NetworkDeleted (
  365. [in] GUID networkId);
  366. HRESULT NetworkConnectivityChanged (
  367. [in] GUID networkId,
  368. [in] NLM_CONNECTIVITY newConnectivity);
  369. HRESULT NetworkPropertyChanged(
  370. [in] GUID networkId,
  371. [in] NLM_NETWORK_PROPERTY_CHANGE flags);
  372. }