diff --git a/mingw-w64-headers/Makefile.am b/mingw-w64-headers/Makefile.am
index 68221f1..dec5eba 100644
--- a/mingw-w64-headers/Makefile.am
+++ b/mingw-w64-headers/Makefile.am
@@ -164,6 +164,7 @@
   include/napsystemhealthagent.idl \
   include/napsystemhealthvalidator.idl \
   include/naptypes.idl \
+  include/netcfgx.idl \
   include/netfw.idl \
   include/netlistmgr.idl \
   include/objectarray.idl \
diff --git a/mingw-w64-headers/include/netcfgx.idl b/mingw-w64-headers/include/netcfgx.idl
new file mode 100644
index 0000000..7e453a8
--- /dev/null
+++ b/mingw-w64-headers/include/netcfgx.idl
@@ -0,0 +1,249 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+cpp_quote("#include <winapifamily.h>")
+
+cpp_quote("#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)")
+
+#ifndef DO_NO_IMPORTS
+import "unknwn.idl";
+import "wtypes.idl";
+import "prsht.idl";
+#endif
+
+cpp_quote("")
+cpp_quote("#define NETCFG_E_ALREADY_INITIALIZED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xa020)")
+cpp_quote("#define NETCFG_E_NOT_INITIALIZED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xa021)")
+cpp_quote("#define NETCFG_E_IN_USE MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xa022)")
+cpp_quote("#define NETCFG_E_NO_WRITE_LOCK MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xa024)")
+cpp_quote("#define NETCFG_E_NEED_REBOOT MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xa025)")
+cpp_quote("#define NETCFG_E_ACTIVE_RAS_CONNECTIONS MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xa026)")
+cpp_quote("#define NETCFG_E_ADAPTER_NOT_FOUND MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xa027)")
+cpp_quote("#define NETCFG_E_COMPONENT_REMOVED_PENDING_REBOOT MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xa028)")
+cpp_quote("#define NETCFG_E_MAX_FILTER_LIMIT MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xa029)")
+cpp_quote("#define NETCFG_E_VMSWITCH_ACTIVE_OVER_ADAPTER MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xa02a)")
+cpp_quote("#define NETCFG_E_DUPLICATE_INSTANCEID MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xa02b)")
+
+cpp_quote("")
+cpp_quote("#define NETCFG_S_REBOOT MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_ITF, 0xa020)")
+cpp_quote("#define NETCFG_S_DISABLE_QUERY MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_ITF, 0xa022)")
+cpp_quote("#define NETCFG_S_STILL_REFERENCED MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_ITF, 0xa023)")
+cpp_quote("#define NETCFG_S_CAUSED_SETUP_CHANGE MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_ITF, 0xa024)")
+cpp_quote("#define NETCFG_S_COMMIT_NOW MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_ITF, 0xa025)")
+
+cpp_quote("")
+cpp_quote("#define NETCFG_CLIENT_CID_MS_MSClient TEXT(\"ms_msclient\")")
+cpp_quote("#define NETCFG_SERVICE_CID_MS_SERVER TEXT(\"ms_server\")")
+cpp_quote("#define NETCFG_SERVICE_CID_MS_NETBIOS TEXT(\"ms_netbios\")")
+cpp_quote("#define NETCFG_SERVICE_CID_MS_PSCHED TEXT(\"ms_pschedpc\")")
+cpp_quote("#define NETCFG_SERVICE_CID_MS_WLBS TEXT(\"ms_wlbs\")")
+cpp_quote("#define NETCFG_TRANS_CID_MS_APPLETALK TEXT(\"ms_appletalk\")")
+cpp_quote("#define NETCFG_TRANS_CID_MS_NETBEUI TEXT(\"ms_netbeui\")")
+cpp_quote("#define NETCFG_TRANS_CID_MS_NETMON TEXT(\"ms_netmon\")")
+cpp_quote("#define NETCFG_TRANS_CID_MS_NWIPX TEXT(\"ms_nwipx\")")
+cpp_quote("#define NETCFG_TRANS_CID_MS_NWSPX TEXT(\"ms_nwspx\")")
+cpp_quote("#define NETCFG_TRANS_CID_MS_TCPIP TEXT(\"ms_tcpip\")")
+
+cpp_quote("")
+interface IEnumNetCfgBindingInterface;
+interface IEnumNetCfgBindingPath;
+interface IEnumNetCfgComponent;
+interface INetCfg;
+interface INetCfgProperties;
+interface INetCfgLock;
+interface INetCfgBindingInterface;
+interface INetCfgBindingPath;
+interface INetCfgComponentBindings;
+interface INetCfgBindingPath;
+interface INetCfgClass;
+interface INetCfgComponent;
+interface INetCfgIdentification;
+interface INetCfgClassSetup;
+interface INetCfgClassSetup2;
+
+cpp_quote("")
+[local, object, uuid(c0e8ae90-306e-11d1-aacf-00805fc1270e), pointer_default(unique)]
+interface IEnumNetCfgBindingInterface : IUnknown {
+  HRESULT Next ([in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] INetCfgBindingInterface **rgelt, [out] ULONG *pceltFetched);
+  HRESULT Skip ([in] ULONG celt);
+  HRESULT Reset ();
+  HRESULT Clone ([out] IEnumNetCfgBindingInterface **ppenum);
+};
+
+cpp_quote("")
+[local, object, uuid(c0e8ae91-306e-11d1-aacf-00805fc1270e), pointer_default(unique)]
+interface IEnumNetCfgBindingPath : IUnknown {
+  HRESULT Next ([in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] INetCfgBindingPath **rgelt, [out] ULONG *pceltFetched);
+  HRESULT Skip ([in] ULONG celt);
+  HRESULT Reset ();
+  HRESULT Clone ([out] IEnumNetCfgBindingPath **ppenum);
+};
+
+cpp_quote("")
+[local, object, uuid(c0e8ae92-306e-11d1-aacf-00805fc1270e), pointer_default(unique)]
+interface IEnumNetCfgComponent : IUnknown {
+  HRESULT Next ([in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] INetCfgComponent **rgelt, [out] ULONG *pceltFetched);
+  HRESULT Skip ([in] ULONG celt);
+  HRESULT Reset ();
+  HRESULT Clone ([out] IEnumNetCfgComponent **ppenum);
+};
+
+cpp_quote("")
+[local, object, uuid(c0e8ae93-306e-11d1-aacf-00805fc1270e), pointer_default(unique)]
+interface INetCfg : IUnknown {
+  HRESULT Initialize ([in] PVOID pvReserved);
+  HRESULT Uninitialize ();
+  HRESULT Apply ();
+  HRESULT Cancel ();
+  HRESULT EnumComponents ([in] const GUID *pguidClass, [out] IEnumNetCfgComponent **ppenumComponent);
+  HRESULT FindComponent ([in, string] LPCWSTR pszwInfId, [out] INetCfgComponent **pComponent);
+  HRESULT QueryNetCfgClass ([in] const GUID *pguidClass, [in] REFIID riid, [out, iid_is(riid)] void **ppvObject);
+};
+
+cpp_quote("")
+[threading(both), uuid(5b035261-40f9-11d1-aaec-00805fc1270e)]
+coclass CNetCfg {
+  [default] interface INetCfg;
+}
+
+cpp_quote("")
+[local, object, uuid(c0e8ae9f-306e-11d1-aacf-00805fc1270e), pointer_default(unique)]
+interface INetCfgLock : IUnknown {
+  HRESULT AcquireWriteLock ([in] DWORD cmsTimeout, [in, string] LPCWSTR pszwClientDescription, [out, string] LPWSTR *ppszwClientDescription);
+  HRESULT ReleaseWriteLock ();
+  HRESULT IsWriteLocked ([out, string] LPWSTR *ppszwClientDescription);
+};
+
+cpp_quote("")
+[local, object, uuid(c0e8ae94-306e-11d1-aacf-00805fc1270e), pointer_default(unique)]
+interface INetCfgBindingInterface : IUnknown {
+  HRESULT GetName ([out, string] LPWSTR *ppszwInterfaceName);
+  HRESULT GetUpperComponent ([out] INetCfgComponent **ppnccItem);
+  HRESULT GetLowerComponent ([out] INetCfgComponent **ppnccItem);
+};
+
+cpp_quote("")
+[local, object, uuid(c0e8ae96-306e-11d1-aacf-00805fc1270e), pointer_default(unique)]
+interface INetCfgBindingPath : IUnknown {
+  HRESULT IsSamePathAs ([in] INetCfgBindingPath *pPath);
+  HRESULT IsSubPathOf ([in] INetCfgBindingPath *pPath);
+  HRESULT IsEnabled ();
+  HRESULT Enable ([in] WINBOOL fEnable);
+  HRESULT GetPathToken([out, string] LPWSTR *ppszwPathToken);
+  HRESULT GetOwner ([out] INetCfgComponent **ppComponent);
+  HRESULT GetDepth ([out] ULONG *pcInterfaces);
+  HRESULT EnumBindingInterfaces ([out] IEnumNetCfgBindingInterface **ppenumInterface);
+};
+
+cpp_quote("")
+[local, object, uuid(c0e8ae97-306e-11d1-aacf-00805fc1270e), pointer_default(unique)]
+interface INetCfgClass : IUnknown {
+  HRESULT FindComponent ([in, string] LPCWSTR pszwInfId, [out] INetCfgComponent **ppnccItem);
+  HRESULT EnumComponents ([out] IEnumNetCfgComponent **ppenumComponent);
+};
+
+cpp_quote("")
+[local, object, uuid(c0e8ae9d-306e-11d1-aacf-00805fc1270e), pointer_default(unique)]
+interface INetCfgClassSetup : IUnknown {
+  typedef enum tagOBO_TOKEN_TYPE {
+    OBO_USER = 1,
+    OBO_COMPONENT = 2,
+    OBO_SOFTWARE = 3
+  } OBO_TOKEN_TYPE;
+
+  typedef struct tagOBO_TOKEN {
+    OBO_TOKEN_TYPE Type;
+    INetCfgComponent *pncc;
+    LPCWSTR pszwManufacturer;
+    LPCWSTR pszwProduct;
+    LPCWSTR pszwDisplayName;
+    WINBOOL fRegistered;
+  } OBO_TOKEN;
+
+  HRESULT SelectAndInstall ([in] HWND hwndParent, [in] OBO_TOKEN *pOboToken, [out] INetCfgComponent **ppnccItem);
+  HRESULT Install ([in, string] LPCWSTR pszwInfId, [in] OBO_TOKEN *pOboToken, [in] DWORD dwSetupFlags, [in] DWORD dwUpgradeFromBuildNo, [in, string] LPCWSTR pszwAnswerFile, [in, string] LPCWSTR pszwAnswerSections, [out] INetCfgComponent **ppnccItem);
+  HRESULT DeInstall ([in] INetCfgComponent *pComponent, [in] OBO_TOKEN *pOboToken, [out] LPWSTR *pmszwRefs);
+};
+
+cpp_quote("")
+[local, object, uuid(c0e8aea0-306e-11d1-aacf-00805fc1270e), pointer_default(unique)]
+interface INetCfgClassSetup2: INetCfgClassSetup {
+  HRESULT UpdateNonEnumeratedComponent ([in] INetCfgComponent *pIComp, [in] DWORD dwSetupFlags, [in] DWORD dwUpgradeFromBuildNo);
+};
+
+cpp_quote("")
+[local, object, uuid(c0e8ae99-306e-11d1-aacf-00805fc1270e), pointer_default(unique)]
+interface INetCfgComponent : IUnknown {
+  typedef enum tagCOMPONENT_CHARACTERISTICS {
+    NCF_VIRTUAL = 0x00000001,
+    NCF_SOFTWARE_ENUMERATED = 0x00000002,
+    NCF_PHYSICAL = 0x00000004,
+    NCF_HIDDEN = 0x00000008,
+    NCF_NO_SERVICE = 0x00000010,
+    NCF_NOT_USER_REMOVABLE = 0x00000020,
+    NCF_MULTIPORT_INSTANCED_ADAPTER = 0x00000040,
+    NCF_HAS_UI = 0x00000080,
+    NCF_SINGLE_INSTANCE = 0x00000100,
+    NCF_FILTER = 0x00000400,
+    NCF_DONTEXPOSELOWER = 0x00001000,
+    NCF_HIDE_BINDING = 0x00002000,
+    NCF_NDIS_PROTOCOL = 0x00004000,
+    NCF_FIXED_BINDING = 0x00020000,
+    NCF_LW_FILTER = 0x00040000
+  } COMPONENT_CHARACTERISTICS;
+
+  typedef enum tagNCRP_FLAGS {
+    NCRP_QUERY_PROPERTY_UI = 0x00000001,
+    NCRP_SHOW_PROPERTY_UI = 0x00000002
+  } NCRP_FLAGS;
+
+  HRESULT GetDisplayName ([out, string] LPWSTR *ppszwDisplayName);
+  HRESULT SetDisplayName ([in, string] LPCWSTR pszwDisplayName);
+  HRESULT GetHelpText ([out, string] LPWSTR *pszwHelpText);
+  HRESULT GetId ([out, string] LPWSTR *ppszwId);
+  HRESULT GetCharacteristics ([out] LPDWORD pdwCharacteristics);
+  HRESULT GetInstanceGuid ([out] GUID *pGuid);
+  HRESULT GetPnpDevNodeId ([out, string] LPWSTR *ppszwDevNodeId);
+  HRESULT GetClassGuid ([out] GUID *pGuid);
+  HRESULT GetBindName ([out, string] LPWSTR *ppszwBindName);
+  HRESULT GetDeviceStatus ([out] ULONG *pulStatus);
+  HRESULT OpenParamKey ([out] HKEY *phkey);
+  HRESULT RaisePropertyUi ([in] HWND hwndParent, [in] DWORD dwFlags, [in] IUnknown *punkContext);
+};
+
+cpp_quote("")
+[local, object, uuid(c0e8ae9e-306e-11d1-aacf-00805fc1270e), pointer_default(unique)]
+interface INetCfgComponentBindings : IUnknown {
+  typedef enum tagSUPPORTS_BINDING_INTERFACE_FLAGS {
+    NCF_LOWER = 0x01,
+    NCF_UPPER = 0x02
+  } SUPPORTS_BINDING_INTERFACE_FLAGS;
+
+  typedef enum tagENUM_BINDING_PATHS_FLAGS {
+    EBP_ABOVE = 0x01,
+    EBP_BELOW = 0x02
+  } ENUM_BINDING_PATHS_FLAGS;
+
+  HRESULT BindTo ([in] INetCfgComponent *pnccItem);
+  HRESULT UnbindFrom ([in] INetCfgComponent *pnccItem);
+  HRESULT SupportsBindingInterface ([in] DWORD dwFlags, [in] LPCWSTR pszwInterfaceName);
+  HRESULT IsBoundTo ([in] INetCfgComponent *pnccItem);
+  HRESULT IsBindableTo ([in] INetCfgComponent *pnccItem);
+  HRESULT EnumBindingPaths ([in] DWORD dwFlags, [out] IEnumNetCfgBindingPath **ppIEnum);
+  HRESULT MoveBefore ([in] INetCfgBindingPath *pncbItemSrc, [in] INetCfgBindingPath *pncbItemDest);
+  HRESULT MoveAfter ([in] INetCfgBindingPath *pncbItemSrc, [in] INetCfgBindingPath *pncbItemDest);
+};
+
+cpp_quote("")
+[local, object, uuid(c0e8ae98-306e-11d1-aacf-00805fc1270e), pointer_default(unique)]
+interface INetCfgSysPrep : IUnknown {
+  HRESULT HrSetupSetFirstDword([in, string] LPCWSTR pwszSection, [in, string] LPCWSTR pwszKey, [in] DWORD dwValue);
+  HRESULT HrSetupSetFirstString([in, string] LPCWSTR pwszSection, [in, string] LPCWSTR pwszKey, [in, string] LPCWSTR pwszValue);
+  HRESULT HrSetupSetFirstStringAsBool([in, string] LPCWSTR pwszSection, [in, string] LPCWSTR pwszKey, [in] WINBOOL fValue);
+  HRESULT HrSetupSetFirstMultiSzField([in, string] LPCWSTR pwszSection, [in, string] LPCWSTR pwszKey, [in, string] LPCWSTR pmszValue);
+};
+
+cpp_quote("#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */")
