diff --git a/mingw-w64-headers/Makefile.am b/mingw-w64-headers/Makefile.am
index dec5eba..a014218 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/netcfgn.idl \
   include/netcfgx.idl \
   include/netfw.idl \
   include/netlistmgr.idl \
diff --git a/mingw-w64-headers/include/netcfgn.idl b/mingw-w64-headers/include/netcfgn.idl
new file mode 100644
index 0000000..e99f34d
--- /dev/null
+++ b/mingw-w64-headers/include/netcfgn.idl
@@ -0,0 +1,169 @@
+/**
+ * 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 "netcfgx.idl";
+#endif
+
+cpp_quote("")
+[local, object, uuid(8d84bd35-e227-11d2-b700-00a0c98a6a85), pointer_default(unique)]
+interface INetCfgPnpReconfigCallback : IUnknown {
+  typedef [v1_enum] enum tagNCPNP_RECONFIG_LAYER {
+    NCRL_NDIS = 1,
+    NCRL_TDI = 2
+  } NCPNP_RECONFIG_LAYER;
+
+  HRESULT SendPnpReconfig ([in] NCPNP_RECONFIG_LAYER Layer, [in] LPCWSTR pszwUpper, [in] LPCWSTR pszwLower, [in] PVOID pvData, [in] DWORD dwSizeOfData);
+};
+
+cpp_quote("")
+[local, object, uuid(932238df-bea1-11d0-9298-00c04fc99dcf), pointer_default(unique)]
+interface INetCfgComponentControl : IUnknown {
+  HRESULT Initialize ([in] INetCfgComponent *pIComp, [in] INetCfg *pINetCfg, [in] WINBOOL fInstalling);
+  HRESULT ApplyRegistryChanges ();
+  HRESULT ApplyPnpChanges ([in] INetCfgPnpReconfigCallback *pICallback);
+  HRESULT CancelChanges ();
+};
+
+cpp_quote("")
+[local, object, uuid(932238e3-bea1-11d0-9298-00c04fc99dcf), pointer_default(unique)]
+interface INetCfgComponentSetup : IUnknown {
+  typedef [v1_enum] enum tagNETWORK_INSTALL_TIME {
+    NSF_PRIMARYINSTALL = 0x00000001,
+    NSF_POSTSYSINSTALL = 0x00000002
+  } NETWORK_INSTALL_TIME;
+
+  typedef [v1_enum] enum tagNETWORK_UPGRADE_TYPE {
+    NSF_WIN16_UPGRADE = 0x00000010,
+    NSF_WIN95_UPGRADE = 0x00000020,
+    NSF_WINNT_WKS_UPGRADE = 0x00000040,
+    NSF_WINNT_SVR_UPGRADE = 0x00000080,
+    NSF_WINNT_SBS_UPGRADE = 0x00000100,
+    NSF_COMPONENT_UPDATE = 0x00000200
+  } NETWORK_UPGRADE_TYPE;
+
+  HRESULT Install ([in] DWORD dwSetupFlags);
+  HRESULT Upgrade ([in] DWORD dwSetupFlags, [in] DWORD dwUpgradeFomBuildNo );
+  HRESULT ReadAnswerFile ([in] LPCWSTR pszwAnswerFile, [in] LPCWSTR pszwAnswerSections);
+  HRESULT Removing ();
+};
+
+cpp_quote("")
+[local, object, uuid(932238e0-bea1-11d0-9298-00c04fc99dcf), pointer_default(unique)]
+interface INetCfgComponentPropertyUi : IUnknown {
+  typedef [v1_enum] enum tagDEFAULT_PAGES {
+    DPP_ADVANCED = 1,
+  } DEFAULT_PAGES;
+
+  HRESULT QueryPropertyUi ([in] IUnknown *pUnkReserved);
+  HRESULT SetContext ([in] IUnknown *pUnkReserved);
+  HRESULT MergePropPages ([in, out] DWORD *pdwDefPages, [out] BYTE **pahpspPrivate, [out] UINT *pcPages, [in] HWND hwndParent, [in] LPCWSTR *pszStartPage);
+  HRESULT ValidateProperties ([in] HWND hwndSheet);
+  HRESULT ApplyProperties ();
+  HRESULT CancelProperties ();
+};
+
+cpp_quote("")
+[local, object, uuid(932238e1-bea1-11d0-9298-00c04fc99dcf), pointer_default(unique)]
+interface INetCfgComponentNotifyBinding : IUnknown {
+  typedef [v1_enum] enum tagBIND_FLAGS1 {
+    NCN_ADD = 0x00000001,
+    NCN_REMOVE = 0x00000002,
+    NCN_UPDATE = 0x00000004,
+    NCN_ENABLE = 0x00000010,
+    NCN_DISABLE = 0x00000020,
+    NCN_BINDING_PATH = 0x00000100,
+    NCN_PROPERTYCHANGE = 0x00000200,
+    NCN_NET = 0x00010000,
+    NCN_NETTRANS = 0x00020000,
+    NCN_NETCLIENT = 0x00040000,
+    NCN_NETSERVICE = 0x00080000
+  } BIND_FLAGS1;
+
+  HRESULT QueryBindingPath ([in] DWORD dwChangeFlag, [in] INetCfgBindingPath *pIPath);
+  HRESULT NotifyBindingPath ([in] DWORD dwChangeFlag, [in] INetCfgBindingPath *pIPath);
+};
+
+cpp_quote("")
+[local, object, uuid(932238e2-bea1-11d0-9298-00c04fc99dcf), pointer_default(unique)]
+interface INetCfgComponentNotifyGlobal : IUnknown {
+  HRESULT GetSupportedNotifications ([out] DWORD *dwNotifications);
+  HRESULT SysQueryBindingPath ([in] DWORD dwChangeFlag, [in] INetCfgBindingPath *pIPath);
+  HRESULT SysNotifyBindingPath ([in] DWORD dwChangeFlag, [in] INetCfgBindingPath *pIPath);
+  HRESULT SysNotifyComponent ([in] DWORD dwChangeFlag, [in] INetCfgComponent *pIComp);
+};
+
+cpp_quote("")
+[local, object, uuid(932238e4-bea1-11d0-9298-00c04fc99dcf), pointer_default(unique)]
+interface INetCfgComponentUpperEdge : IUnknown {
+  HRESULT GetInterfaceIdsForAdapter ([in] INetCfgComponent *pAdapter, [out] DWORD *pdwNumInterfaces, [out] GUID **ppguidInterfaceIds);
+  HRESULT AddInterfacesToAdapter ([in] INetCfgComponent *pAdapter, [in] DWORD dwNumInterfaces);
+  HRESULT RemoveInterfacesFromAdapter ([in] INetCfgComponent *pAdapter, [in] DWORD dwNumInterfaces, [in] const GUID *pguidInterfaceIds);
+};
+
+cpp_quote("")
+[object, uuid(c08956a6-1cd3-11d1-b1c5-00805fc1270e), pointer_default(unique)]
+interface INetLanConnectionUiInfo : IUnknown {
+  HRESULT GetDeviceGuid ([out] GUID *pguid);
+};
+
+cpp_quote("")
+[object, uuid(faedcf58-31fe-11d1-aad2-00805fc1270e), pointer_default(unique)]
+interface INetRasConnectionIpUiInfo : IUnknown {
+  typedef enum tagRASCON_IPUI_FLAGS {
+    RCUIF_VPN = 0x00000001,
+    RCUIF_DEMAND_DIAL = 0x00000002,
+    RCUIF_NOT_ADMIN = 0x00000004,
+    RCUIF_USE_IPv4_STATICADDRESS = 0x00000008,
+    RCUIF_USE_IPv4_NAME_SERVERS = 0x00000010,
+    RCUIF_USE_IPv4_REMOTE_GATEWAY = 0x00000020,
+    RCUIF_USE_IPv4_EXPLICIT_METRIC = 0x00000040,
+    RCUIF_USE_HEADER_COMPRESSION = 0x00000080,
+    RCUIF_USE_DISABLE_REGISTER_DNS = 0x00000100,
+    RCUIF_USE_PRIVATE_DNS_SUFFIX = 0x00000200,
+    RCUIF_ENABLE_NBT = 0x00000400,
+    RCUIF_USE_IPv6_STATICADDRESS = 0x00000800,
+    RCUIF_USE_IPv6_NAME_SERVERS = 0x00001000,
+    RCUIF_USE_IPv6_REMOTE_GATEWAY = 0x00002000,
+    RCUIF_USE_IPv6_EXPLICIT_METRIC = 0x00004000,
+    RCUIF_DISABLE_CLASS_BASED_ROUTE = 0x00008000
+  } RASCON_UIINFO_FLAGS;
+
+  typedef struct tagRASCON_IPUI {
+  GUID guidConnection;
+  WINBOOL fIPv6Cfg;
+  DWORD dwFlags;
+  WCHAR pszwIpAddr[16];
+  WCHAR pszwDnsAddr[16];
+  WCHAR pszwDns2Addr[16];
+  WCHAR pszwWinsAddr[16];
+  WCHAR pszwWins2Addr[16];
+  WCHAR pszwDnsSuffix[256];
+  WCHAR pszwIpv6Addr[65];
+  DWORD dwIpv6PrefixLength;
+  WCHAR pszwIpv6DnsAddr[65];
+  WCHAR pszwIpv6Dns2Addr[65];
+  DWORD dwIPv4InfMetric;
+  DWORD dwIPv6InfMetric;
+  } RASCON_IPUI;
+
+  HRESULT GetUiInfo ([out] RASCON_IPUI *pInfo);
+};
+
+cpp_quote("")
+[local, object, uuid(c0e8ae9a-306e-11d1-aacf-00805fc1270e), pointer_default(unique)]
+interface INetCfgComponentSysPrep : IUnknown {
+  HRESULT SaveAdapterParameters([in] INetCfgSysPrep *pncsp, [in] LPCWSTR pszwAnswerSections, [in] GUID *pAdapterInstanceGuid);
+  HRESULT RestoreAdapterParameters([in] LPCWSTR pszwAnswerFile, [in] LPCWSTR pszwAnswerSection, [in] GUID *pAdapterInstanceGuid);
+};
+
+cpp_quote("#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */")
