| /* |
| * Copyright 2014 Hans Leidekker for CodeWeavers |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA |
| */ |
| |
| import "oaidl.idl"; |
| import "objidl.idl"; |
| |
| #ifndef __WIDL__ |
| #define threading(model) |
| #endif |
| |
| interface IEnumNetworks; |
| interface IEnumNetworkConnections; |
| interface INetwork; |
| interface INetworkConnection; |
| interface INetworkCostManager; |
| interface INetworkListManager; |
| interface INetworkListManagerEvents; |
| |
| typedef [v1_enum] enum NLM_CONNECTIVITY |
| { |
| NLM_CONNECTIVITY_DISCONNECTED = 0x0000, |
| NLM_CONNECTIVITY_IPV4_NOTRAFFIC = 0x0001, |
| NLM_CONNECTIVITY_IPV6_NOTRAFFIC = 0x0002, |
| NLM_CONNECTIVITY_IPV4_SUBNET = 0x0010, |
| NLM_CONNECTIVITY_IPV4_LOCALNETWORK = 0x0020, |
| NLM_CONNECTIVITY_IPV4_INTERNET = 0x0040, |
| NLM_CONNECTIVITY_IPV6_SUBNET = 0x0100, |
| NLM_CONNECTIVITY_IPV6_LOCALNETWORK = 0x0200, |
| NLM_CONNECTIVITY_IPV6_INTERNET = 0x0400 |
| } NLM_CONNECTIVITY; |
| |
| typedef [v1_enum] enum NLM_DOMAIN_TYPE |
| { |
| NLM_DOMAIN_TYPE_NON_DOMAIN_NETWORK = 0x00, |
| NLM_DOMAIN_TYPE_DOMAIN_NETWORK = 0x01, |
| NLM_DOMAIN_TYPE_DOMAIN_AUTHENTICATED = 0x02 |
| } NLM_DOMAIN_TYPE; |
| |
| typedef [v1_enum] enum NLM_ENUM_NETWORK |
| { |
| NLM_ENUM_NETWORK_CONNECTED = 0x01, |
| NLM_ENUM_NETWORK_DISCONNECTED = 0x02, |
| NLM_ENUM_NETWORK_ALL = 0x03 |
| } NLM_ENUM_NETWORK; |
| |
| typedef [v1_enum] enum NLM_CONNECTION_COST |
| { |
| NLM_CONNECTION_COST_UNKNOWN = 0x0, |
| NLM_CONNECTION_COST_UNRESTRICTED = 0x1, |
| NLM_CONNECTION_COST_FIXED = 0x2, |
| NLM_CONNECTION_COST_VARIABLE = 0x4, |
| NLM_CONNECTION_COST_OVERDATALIMIT = 0x10000, |
| NLM_CONNECTION_COST_CONGESTED = 0x20000, |
| NLM_CONNECTION_COST_ROAMING = 0x40000, |
| NLM_CONNECTION_COST_APPROACHINGDATALIMIT = 0x80000 |
| } NLM_CONNECTION_COST; |
| |
| typedef struct NLM_SOCKADDR |
| { |
| BYTE data[128]; |
| } NLM_SOCKADDR; |
| |
| const UINT32 NLM_UNKNOWN_DATAPLAN_STATUS = 0xffffffff; |
| |
| typedef struct NLM_USAGE_DATA |
| { |
| DWORD UsageInMegabytes; |
| FILETIME LastSyncTime; |
| } NLM_USAGE_DATA; |
| |
| typedef struct NLM_DATAPLAN_STATUS |
| { |
| GUID InterfaceGuid; |
| NLM_USAGE_DATA UsageData; |
| DWORD DataLimitInMegabytes; |
| DWORD InboundBandwidthInKbps; |
| DWORD OutboundBandwidthInKbps; |
| FILETIME NextBillingCycle; |
| DWORD MaxTransferSizeInMegabytes; |
| DWORD Reserved; |
| } NLM_DATAPLAN_STATUS; |
| |
| [ |
| object, |
| pointer_default(unique), |
| uuid(dcb00008-570f-4a9b-8d69-199fdba5723b) |
| ] |
| interface INetworkCostManager : IUnknown |
| { |
| HRESULT GetCost( |
| [out] DWORD *pCost, |
| [in, unique] NLM_SOCKADDR *pDestIPAddr); |
| |
| HRESULT GetDataPlanStatus( |
| [out] NLM_DATAPLAN_STATUS *pDataPlanStatus, |
| [in, unique] NLM_SOCKADDR *pDestIPAddr); |
| |
| HRESULT SetDestinationAddresses( |
| [in] UINT32 length, |
| [in, unique, size_is(length)] NLM_SOCKADDR *pDestIPAddrList, |
| [in] VARIANT_BOOL bAppend); |
| } |
| |
| [ |
| object, |
| pointer_default(unique), |
| uuid(dcb0000a-570f-4a9b-8d69-199fdba5723b) |
| ] |
| interface INetworkConnectionCost : IUnknown |
| { |
| HRESULT GetCost( |
| [out] DWORD *pCost); |
| |
| HRESULT GetDataPlanStatus( |
| [out] NLM_DATAPLAN_STATUS *pDataPlanStatus); |
| } |
| |
| [ |
| object, |
| pointer_default(unique), |
| uuid(dcb00009-570f-4a9b-8d69-199fdba5723b) |
| ] |
| interface INetworkCostManagerEvents : IUnknown |
| { |
| HRESULT CostChanged( |
| [in] DWORD newCost, |
| [in, unique] NLM_SOCKADDR *pDestAddr); |
| |
| HRESULT DataPlanStatusChanged( |
| [in, unique] NLM_SOCKADDR *pDestAddr); |
| } |
| |
| [ |
| object, |
| oleautomation, |
| pointer_default(unique), |
| dual, |
| uuid(dcb00003-570f-4a9b-8d69-199fdba5723b) |
| ] |
| interface IEnumNetworks : IDispatch |
| { |
| [id(DISPID_NEWENUM), propget, hidden, restricted] |
| HRESULT _NewEnum( |
| [out, retval] IEnumVARIANT **ppEnumVar); |
| |
| [id(1)] |
| HRESULT Next( |
| [in] ULONG celt, |
| [out, size_is(celt), length_is(*pceltFetched)] INetwork **rgelt, |
| [in, out] ULONG *pceltFetched); |
| |
| [id(2)] |
| HRESULT Skip( |
| [in] ULONG celt); |
| |
| [id(3)] |
| HRESULT Reset(); |
| |
| [id(4)] |
| HRESULT Clone( |
| [out, retval] IEnumNetworks **ppEnumNetwork); |
| } |
| |
| [ |
| object, |
| oleautomation, |
| pointer_default(unique), |
| dual, |
| uuid(dcb00006-570f-4a9b-8d69-199fdba5723b) |
| ] |
| interface IEnumNetworkConnections : IDispatch |
| { |
| [id(DISPID_NEWENUM), propget, hidden, restricted] |
| HRESULT _NewEnum( |
| [out, retval] IEnumVARIANT **ppEnumVar); |
| |
| [id(1)] |
| HRESULT Next( |
| [in] ULONG celt, |
| [out, size_is(celt), length_is(*pceltFetched)] INetworkConnection **rgelt, |
| [in, out] ULONG *pceltFetched); |
| |
| [id(2)] |
| HRESULT Skip( |
| [in] ULONG celt); |
| |
| [id(3)] |
| HRESULT Reset(); |
| |
| [id(4)] |
| HRESULT Clone( |
| [out, retval] IEnumNetworkConnections **ppEnumNetwork); |
| } |
| |
| [ |
| dual, |
| object, |
| oleautomation, |
| pointer_default(unique), |
| uuid(dcb00000-570f-4a9b-8d69-199fdba5723b) |
| ] |
| interface INetworkListManager : IDispatch |
| { |
| HRESULT GetNetworks( |
| [in] NLM_ENUM_NETWORK Flags, |
| [out, retval] IEnumNetworks **ppEnumNetwork); |
| |
| HRESULT GetNetwork( |
| [in] GUID gdNetworkId, |
| [out, retval] INetwork **ppNetwork); |
| |
| HRESULT GetNetworkConnections( |
| [out, retval] IEnumNetworkConnections **ppEnum); |
| |
| HRESULT GetNetworkConnection( |
| [in] GUID gdNetworkConnectionId, |
| [out, retval] INetworkConnection **ppNetworkConnection); |
| |
| HRESULT IsConnectedToInternet( |
| [out, retval] VARIANT_BOOL *pbIsConnected); |
| |
| HRESULT IsConnected( |
| [out, retval] VARIANT_BOOL *pbIsConnected); |
| |
| HRESULT GetConnectivity( |
| [out, retval] NLM_CONNECTIVITY *pConnectivity); |
| } |
| |
| [ |
| threading(both), |
| uuid(dcb00c01-570f-4a9b-8d69-199fdba5723b) |
| ] |
| coclass NetworkListManager { interface INetworkListManager; } |
| |
| [ |
| object, |
| oleautomation, |
| pointer_default(unique), |
| uuid(DCB00001-570F-4A9B-8D69-199FDBA5723B) |
| ] |
| interface INetworkListManagerEvents : IUnknown |
| { |
| HRESULT ConnectivityChanged( |
| [in] NLM_CONNECTIVITY newConnectivity); |
| } |
| |
| [ |
| object, |
| oleautomation, |
| pointer_default(unique), |
| uuid(dcb00007-570f-4a9b-8d69-199fdba5723b) |
| ] |
| interface INetworkConnectionEvents : IUnknown |
| { |
| typedef enum NLM_CONNECTION_PROPERTY_CHANGE |
| { |
| NLM_CONNECTION_PROPERTY_CHANGE_AUTHENTICATION = 1 |
| } NLM_CONNECTION_PROPERTY_CHANGE; |
| |
| HRESULT NetworkConnectionConnectivityChanged( |
| [in] GUID connectionId, |
| [in] NLM_CONNECTIVITY newConnectivity); |
| |
| HRESULT NetworkConnectionPropertyChanged( |
| [in] GUID connectionId, |
| [in] NLM_CONNECTION_PROPERTY_CHANGE flags); |
| } |
| |
| [ |
| object, |
| oleautomation, |
| pointer_default(unique), |
| dual, |
| uuid(dcb00005-570f-4a9b-8d69-199fdba5723b) |
| ] |
| interface INetworkConnection : IDispatch |
| { |
| [id(1)] |
| HRESULT GetNetwork( |
| [out, retval] INetwork **ppNetwork); |
| |
| [propget, id(2)] |
| HRESULT IsConnectedToInternet( |
| [out, retval] VARIANT_BOOL *pbIsConnected); |
| |
| [propget, id(3)] |
| HRESULT IsConnected( |
| [out, retval] VARIANT_BOOL *pbIsConnected); |
| |
| [id(4)] |
| HRESULT GetConnectivity( |
| [out, retval] NLM_CONNECTIVITY *pConnectivity); |
| |
| [id(5)] |
| HRESULT GetConnectionId( |
| [out, retval] GUID *pgdConnectionId); |
| |
| [id(6)] |
| HRESULT GetAdapterId( |
| [out, retval] GUID *pgdAdapterId); |
| |
| [id(7)] |
| HRESULT GetDomainType( |
| [out, retval] NLM_DOMAIN_TYPE *pDomainType); |
| } |
| |
| [ |
| object, |
| oleautomation, |
| pointer_default(unique), |
| dual, |
| uuid(dcb00002-570f-4a9b-8d69-199fdba5723b) |
| ] |
| interface INetwork : IDispatch |
| { |
| typedef enum NLM_NETWORK_CATEGORY |
| { |
| NLM_NETWORK_CATEGORY_PUBLIC = 0x00, |
| NLM_NETWORK_CATEGORY_PRIVATE = 0x01, |
| NLM_NETWORK_CATEGORY_DOMAIN_AUTHENTICATED = 0x02 |
| } NLM_NETWORK_CATEGORY; |
| |
| [id(1)] |
| HRESULT GetName( |
| [out, string, retval] BSTR *pszNetworkName); |
| |
| [id(2)] |
| HRESULT SetName( |
| [in, string] BSTR szNetworkNewName); |
| |
| [id(3)] |
| HRESULT GetDescription( |
| [out, string, retval] BSTR *pszDescription); |
| |
| [id(4)] |
| HRESULT SetDescription( |
| [in, string] BSTR szDescription); |
| |
| [id(5)] |
| HRESULT GetNetworkId( |
| [out, retval] GUID *pgdGuidNetworkId); |
| |
| [id(6)] |
| HRESULT GetDomainType( |
| [out, retval] NLM_DOMAIN_TYPE *pNetworkType); |
| |
| [id(7)] |
| HRESULT GetNetworkConnections( |
| [out, retval] IEnumNetworkConnections **ppEnumNetworkConnection); |
| |
| [id(8)] |
| HRESULT GetTimeCreatedAndConnected( |
| [out] DWORD *pdwLowDateTimeCreated, |
| [out] DWORD *pdwHighDateTimeCreated, |
| [out] DWORD *pdwLowDateTimeConnected, |
| [out] DWORD *pdwHighDateTimeConnected); |
| |
| [propget, id(9)] |
| HRESULT IsConnectedToInternet( |
| [out, retval] VARIANT_BOOL *pbIsConnected); |
| |
| [propget, id(10)] |
| HRESULT IsConnected( |
| [out, retval] VARIANT_BOOL *pbIsConnected); |
| |
| [id(11)] |
| HRESULT GetConnectivity( |
| [out, retval] NLM_CONNECTIVITY *pConnectivity); |
| |
| [id(12)] |
| HRESULT GetCategory( |
| [out, retval] NLM_NETWORK_CATEGORY *pCategory); |
| |
| [id(13)] |
| HRESULT SetCategory( |
| [in] NLM_NETWORK_CATEGORY NewCategory); |
| } |