#include <tchar.h>
#include <time.h>
+#include <winsock2.h>
#include <iptypes.h>
#include <ipexport.h>
#include <iphlpapi.h>
+#include <icmpapi.h>
#include "debug.h"
//#include "trace.h"
//VOID STDCALL KeBugCheck (ULONG BugCheckCode) {}
-BOOL
+WINBOOL
EXPORT
DllMain(HANDLE hInstDll,
ULONG dwReason,
}
+/*
+ * @unimplemented
+ */
DWORD
-WINAPI
+STDCALL
AddIPAddress(IPAddr Address, IPMask IpMask, DWORD IfIndex, PULONG NTEContext, PULONG NTEInstance)
{
UNIMPLEMENTED
}
+/*
+ * @unimplemented
+ */
DWORD
-WINAPI
+STDCALL
SetIpNetEntry(PMIB_IPNETROW pArpEntry)
{
UNIMPLEMENTED
return 0L;
}
+
+/*
+ * @unimplemented
+ */
DWORD
-WINAPI
+STDCALL
CreateIpForwardEntry(PMIB_IPFORWARDROW pRoute)
{
UNIMPLEMENTED
}
-#ifdef __GNUC__
-
+/*
+ * @unimplemented
+ */
DWORD
-WINAPI
+STDCALL
GetAdapterIndex(LPWSTR AdapterName, PULONG IfIndex)
{
return 0;
}
+
+/*
+ * @unimplemented
+ */
DWORD
-WINAPI
+STDCALL
GetAdaptersInfo(PIP_ADAPTER_INFO pAdapterInfo, PULONG pOutBufLen)
{
- return 0;
-}
+ LONG lErr;
+ DWORD dwSize;
+ DWORD dwIndex;
+ BYTE* pNextMemFree = (BYTE*) pAdapterInfo;
+ ULONG uUsedMemory = 0;
+ PIP_ADAPTER_INFO pPrevAdapter = NULL;
+ PIP_ADAPTER_INFO pCurrentAdapter = NULL;
+ HKEY hAdapters;
+ HKEY hAdapter;
+ HKEY hIpConfig;
+ wchar_t* strAdapter;
+ wchar_t* strTemp1;
+ wchar_t* strTemp2;
+ DWORD dwAdapterLen;
+ char strTemp[MAX_ADAPTER_NAME_LENGTH + 4];
-#endif
+ if(pAdapterInfo == NULL && pOutBufLen == NULL)
+ return ERROR_INVALID_PARAMETER;
+ ZeroMemory(pAdapterInfo, *pOutBufLen);
+
+ lErr = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Adapters", 0, KEY_READ, &hAdapters);
+ if(lErr != ERROR_SUCCESS)
+ return lErr;
+
+ // Determine the size of the largest name of any adapter and the number of adapters.
+ lErr = RegQueryInfoKeyW(hAdapters, NULL, NULL, NULL, NULL, &dwAdapterLen, NULL, NULL, NULL, NULL, NULL, NULL);
+ if(lErr != ERROR_SUCCESS)
+ {
+ RegCloseKey(hAdapters);
+ return lErr;
+ }
+ dwAdapterLen++; // RegQueryInfoKeyW return value does not include terminating null.
+
+ strAdapter = (wchar_t*) malloc(dwAdapterLen * sizeof(wchar_t));
+
+ // Enumerate all adapters in SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Adapters.
+ for(dwIndex = 0; ; dwIndex++)
+ {
+ dwSize = dwAdapterLen; // Reset size of the strAdapterLen buffer.
+ lErr = RegEnumKeyExW(hAdapters, dwIndex, strAdapter, &dwSize, NULL, NULL, NULL, NULL);
+ if(lErr == ERROR_NO_MORE_ITEMS)
+ break;
+
+ // TODO Skip NdisWanIP???
+ if(wcsstr(strAdapter, L"NdisWanIp") != 0)
+ continue;
+
+ lErr = RegOpenKeyExW(hAdapters, strAdapter, 0, KEY_READ, &hAdapter);
+ if(lErr != ERROR_SUCCESS)
+ continue;
+
+ // Read the IpConfig value.
+ lErr = RegQueryValueExW(hAdapter, L"IpConfig", NULL, NULL, NULL, &dwSize);
+ if(lErr != ERROR_SUCCESS)
+ continue;
+
+ strTemp1 = (wchar_t*) malloc(dwSize);
+ strTemp2 = (wchar_t*) malloc(dwSize + 35 * sizeof(wchar_t));
+ lErr = RegQueryValueExW(hAdapter, L"IpConfig", NULL, NULL, (BYTE*) strTemp1, &dwSize);
+ if(lErr != ERROR_SUCCESS)
+ {
+ free(strTemp1);
+ free(strTemp2);
+ continue;
+ }
+ swprintf(strTemp2, L"SYSTEM\\CurrentControlSet\\Services\\%s", strTemp1);
+
+ // Open the IpConfig key.
+ lErr = RegOpenKeyExW(HKEY_LOCAL_MACHINE, strTemp2, 0, KEY_READ, &hIpConfig);
+ if(lErr != ERROR_SUCCESS)
+ {
+ free(strTemp1);
+ free(strTemp2);
+ continue;
+ }
+ free((void*) strTemp1);
+ free((void*) strTemp2);
+
+
+ // Fill IP_ADAPTER_INFO block.
+ pCurrentAdapter = (IP_ADAPTER_INFO*) pNextMemFree;
+ pNextMemFree += sizeof(IP_ADAPTER_INFO);
+ uUsedMemory += sizeof(IP_ADAPTER_INFO);
+ if(uUsedMemory > *pOutBufLen)
+ return ERROR_BUFFER_OVERFLOW; // TODO return the needed size
+
+ // struct _IP_ADAPTER_INFO* Next
+ if(pPrevAdapter != NULL)
+ pPrevAdapter->Next = pCurrentAdapter;
+ // TODO DWORD ComboIndex
+ // char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4]
+ wcstombs(strTemp, strAdapter, MAX_ADAPTER_NAME_LENGTH + 4);
+ strcpy(pCurrentAdapter->AdapterName, strTemp);
+ // TODO char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]
+ // TODO UINT AddressLength
+ // TODO BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH]
+ // TODO DWORD Index
+ // TODO UINT Type
+ // TODO UINT DhcpEnabled
+ // TODO PIP_ADDR_STRING CurrentIpAddress
+ // IP_ADDR_STRING IpAddressList
+ dwSize = 16; lErr = RegQueryValueExW(hIpConfig, L"IPAddress", NULL, NULL, (BYTE*) &pCurrentAdapter->IpAddressList.IpAddress, &dwSize);
+ dwSize = 16; lErr = RegQueryValueExW(hIpConfig, L"SubnetMask", NULL, NULL, (BYTE*) &pCurrentAdapter->IpAddressList.IpMask, &dwSize);
+ if(strstr(pCurrentAdapter->IpAddressList.IpAddress.String, "0.0.0.0") != 0)
+ {
+ dwSize = 16; lErr = RegQueryValueExW(hIpConfig, L"DhcpIPAddress", NULL, NULL, (BYTE*) &pCurrentAdapter->IpAddressList.IpAddress, &dwSize);
+ dwSize = 16; lErr = RegQueryValueExW(hIpConfig, L"DhcpSubnetMask", NULL, NULL, (BYTE*) &pCurrentAdapter->IpAddressList.IpMask, &dwSize);
+ }
+ // TODO IP_ADDR_STRING GatewayList
+ // IP_ADDR_STRING DhcpServer
+ dwSize = 16; lErr = RegQueryValueExW(hIpConfig, L"DhcpServer", NULL, NULL, (BYTE*) &pCurrentAdapter->DhcpServer.IpAddress, &dwSize);
+ dwSize = 16; lErr = RegQueryValueExW(hIpConfig, L"DhcpSubnetMask", NULL, NULL, (BYTE*) &pCurrentAdapter->DhcpServer.IpMask, &dwSize);
+ // TODO BOOL HaveWins
+ // TODO IP_ADDR_STRING PrimaryWinsServer
+ // TODO IP_ADDR_STRING SecondaryWinsServer
+ // TODO time_t LeaseObtained
+ // TODO time_t LeaseExpires
+
+ pPrevAdapter = pCurrentAdapter;
+ RegCloseKey(hAdapter);
+ RegCloseKey(hIpConfig);
+ }
+
+ // Cleanup
+ free(strAdapter);
+ RegCloseKey(hAdapters);
+
+ return ERROR_SUCCESS;
+}
////////////////////////////////////////////////////////////////////////////////
+/*
+ * @implemented
+ */
DWORD
-WINAPI
+STDCALL
GetNumberOfInterfaces(OUT PDWORD pdwNumIf)
{
DWORD result = NO_ERROR;
}
+/*
+ * @implemented
+ */
DWORD
-WINAPI
+STDCALL
GetInterfaceInfo(PIP_INTERFACE_INFO pIfTable, PULONG pOutBufLen)
{
DWORD result = ERROR_SUCCESS;
return result;
}
+
+/*
+ * @implemented
+ */
DWORD
-WINAPI
+STDCALL
GetNetworkParams(PFIXED_INFO pFixedInfo, PULONG pOutBufLen)
{
- DWORD result = ERROR_SUCCESS;
- DWORD dwSize;
- HKEY hKey;
- LONG errCode;
+ DWORD result = ERROR_SUCCESS;
+ DWORD dwSize;
+ HKEY hKey;
+ LONG errCode;
- if (pFixedInfo == NULL || pOutBufLen == NULL) return ERROR_INVALID_PARAMETER;
+ if (pFixedInfo == NULL || pOutBufLen == NULL) return ERROR_INVALID_PARAMETER;
- if (*pOutBufLen < sizeof(FIXED_INFO)) {
- *pOutBufLen = sizeof(FIXED_INFO);
- return ERROR_BUFFER_OVERFLOW;
- }
- memset(pFixedInfo, 0, sizeof(FIXED_INFO));
+ if (*pOutBufLen < sizeof(FIXED_INFO))
+ {
+ *pOutBufLen = sizeof(FIXED_INFO);
+ return ERROR_BUFFER_OVERFLOW;
+ }
+ memset(pFixedInfo, 0, sizeof(FIXED_INFO));
- errCode = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters"), 0, KEY_READ, &hKey);
- if (errCode == ERROR_SUCCESS) {
- dwSize = sizeof(pFixedInfo->HostName);
- errCode = RegQueryValueExA(hKey, "Hostname", NULL, NULL, (LPBYTE)&pFixedInfo->HostName, &dwSize);
- dwSize = sizeof(pFixedInfo->DomainName);
- errCode = RegQueryValueExA(hKey, "Domain", NULL, NULL, (LPBYTE)&pFixedInfo->DomainName, &dwSize);
- if (errCode != ERROR_SUCCESS) {
- dwSize = sizeof(pFixedInfo->DomainName);
- errCode = RegQueryValueExA(hKey, "DhcpDomain", NULL, NULL, (LPBYTE)&pFixedInfo->DomainName, &dwSize);
- }
- dwSize = sizeof(pFixedInfo->EnableRouting);
- errCode = RegQueryValueEx(hKey, _T("IPEnableRouter"), NULL, NULL, (LPBYTE)&pFixedInfo->EnableRouting, &dwSize);
- RegCloseKey(hKey);
- } else {
- result = ERROR_NO_DATA; // No adapter information exists for the local computer
- }
+ errCode = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters", 0, KEY_READ, &hKey);
+ if (errCode == ERROR_SUCCESS)
+ {
+ dwSize = sizeof(pFixedInfo->HostName);
+ errCode = RegQueryValueExA(hKey, "Hostname", NULL, NULL, (LPBYTE)&pFixedInfo->HostName, &dwSize);
+ dwSize = sizeof(pFixedInfo->DomainName);
+ errCode = RegQueryValueExA(hKey, "Domain", NULL, NULL, (LPBYTE)&pFixedInfo->DomainName, &dwSize);
+ if (errCode != ERROR_SUCCESS)
+ {
+ dwSize = sizeof(pFixedInfo->DomainName);
+ errCode = RegQueryValueExA(hKey, "DhcpDomain", NULL, NULL, (LPBYTE)&pFixedInfo->DomainName, &dwSize);
+ }
+ dwSize = sizeof(pFixedInfo->EnableRouting);
+ errCode = RegQueryValueExW(hKey, L"IPEnableRouter", NULL, NULL, (LPBYTE)&pFixedInfo->EnableRouting, &dwSize);
+ RegCloseKey(hKey);
+ }
+ else
+ {
+ result = ERROR_NO_DATA; // No adapter information exists for the local computer
+ }
- errCode = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SYSTEM\\CurrentControlSet\\Services\\NetBT\\Parameters"), 0, KEY_READ, &hKey);
- if (errCode == ERROR_SUCCESS) {
- dwSize = sizeof(pFixedInfo->ScopeId);
- errCode = RegQueryValueExA(hKey, "ScopeId", NULL, NULL, (LPBYTE)&pFixedInfo->ScopeId, &dwSize);
- if (errCode != ERROR_SUCCESS) {
- dwSize = sizeof(pFixedInfo->ScopeId);
- errCode = RegQueryValueExA(hKey, "DhcpScopeId", NULL, NULL, (LPBYTE)&pFixedInfo->ScopeId, &dwSize);
- }
- dwSize = sizeof(pFixedInfo->NodeType);
- errCode = RegQueryValueEx(hKey, _T("NodeType"), NULL, NULL, (LPBYTE)&pFixedInfo->NodeType, &dwSize);
- if (errCode != ERROR_SUCCESS) {
- dwSize = sizeof(pFixedInfo->NodeType);
- errCode = RegQueryValueExA(hKey, "DhcpNodeType", NULL, NULL, (LPBYTE)&pFixedInfo->NodeType, &dwSize);
- }
- dwSize = sizeof(pFixedInfo->EnableProxy);
- errCode = RegQueryValueEx(hKey, _T("EnableProxy"), NULL, NULL, (LPBYTE)&pFixedInfo->EnableProxy, &dwSize);
- dwSize = sizeof(pFixedInfo->EnableDns);
- errCode = RegQueryValueEx(hKey, _T("EnableDNS"), NULL, NULL, (LPBYTE)&pFixedInfo->EnableDns, &dwSize);
- RegCloseKey(hKey);
- } else {
- result = ERROR_NO_DATA; // No adapter information exists for the local computer
- }
+ errCode = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\Services\\NetBT\\Parameters", 0, KEY_READ, &hKey);
+ if (errCode == ERROR_SUCCESS)
+ {
+ dwSize = sizeof(pFixedInfo->ScopeId);
+ errCode = RegQueryValueExA(hKey, "ScopeId", NULL, NULL, (LPBYTE)&pFixedInfo->ScopeId, &dwSize);
+ if (errCode != ERROR_SUCCESS)
+ {
+ dwSize = sizeof(pFixedInfo->ScopeId);
+ errCode = RegQueryValueExA(hKey, "DhcpScopeId", NULL, NULL, (LPBYTE)&pFixedInfo->ScopeId, &dwSize);
+ }
+ dwSize = sizeof(pFixedInfo->NodeType);
+ errCode = RegQueryValueExW(hKey, L"NodeType", NULL, NULL, (LPBYTE)&pFixedInfo->NodeType, &dwSize);
+ if (errCode != ERROR_SUCCESS)
+ {
+ dwSize = sizeof(pFixedInfo->NodeType);
+ errCode = RegQueryValueExA(hKey, "DhcpNodeType", NULL, NULL, (LPBYTE)&pFixedInfo->NodeType, &dwSize);
+ }
+ dwSize = sizeof(pFixedInfo->EnableProxy);
+ errCode = RegQueryValueExW(hKey, L"EnableProxy", NULL, NULL, (LPBYTE)&pFixedInfo->EnableProxy, &dwSize);
+ dwSize = sizeof(pFixedInfo->EnableDns);
+ errCode = RegQueryValueExW(hKey, L"EnableDNS", NULL, NULL, (LPBYTE)&pFixedInfo->EnableDns, &dwSize);
+ RegCloseKey(hKey);
+ }
+ else
+ {
+ result = ERROR_NO_DATA; // No adapter information exists for the local computer
+ }
- return result;
+ return result;
}
+
+/*
+ * @unimplemented
+ */
DWORD
-WINAPI
+STDCALL
GetTcpStatistics(PMIB_TCPSTATS pStats)
{
DWORD result = NO_ERROR;
return result;
}
+
+/*
+ * @unimplemented
+ */
DWORD
-WINAPI
-GetTcpTable(PMIB_TCPTABLE pTcpTable, PDWORD pdwSize, BOOL bOrder)
+STDCALL
+GetTcpTable(PMIB_TCPTABLE pTcpTable, PDWORD pdwSize, WINBOOL bOrder)
{
DWORD result = NO_ERROR;
return result;
}
+
+/*
+ * @unimplemented
+ */
DWORD
-WINAPI
+STDCALL
GetUdpStatistics(PMIB_UDPSTATS pStats)
{
DWORD result = NO_ERROR;
return result;
}
+
+/*
+ * @unimplemented
+ */
DWORD
-WINAPI
-GetUdpTable(PMIB_UDPTABLE pUdpTable, PDWORD pdwSize, BOOL bOrder)
+STDCALL
+GetUdpTable(PMIB_UDPTABLE pUdpTable, PDWORD pdwSize, WINBOOL bOrder)
{
DWORD result = NO_ERROR;
return result;
}
+
+/*
+ * @unimplemented
+ */
DWORD
-WINAPI
+STDCALL
FlushIpNetTable(DWORD dwIfIndex)
{
DWORD result = NO_ERROR;
return result;
}
-/* EOF */
+/******************************************************************
+ * GetIfEntry (IPHLPAPI.@)
+ *
+ *
+ * PARAMS
+ *
+ * pIfRow [In/Out]
+ *
+ * RETURNS
+ *
+ * DWORD
+ *
+ */
+DWORD
+STDCALL
+GetIfEntry(PMIB_IFROW pIfRow)
+{
+ DWORD result = NO_ERROR;
+
+ return result;
+}
+
+
+/******************************************************************
+ * GetIfTable (IPHLPAPI.@)
+ *
+ *
+ * PARAMS
+ *
+ * pIfTable [In/Out]
+ * pdwSize [In/Out]
+ * bOrder [In]
+ *
+ * RETURNS
+ *
+ * DWORD
+ *
+ */
+DWORD
+STDCALL
+GetIfTable(PMIB_IFTABLE pIfTable, PULONG pdwSize, WINBOOL bOrder)
+{
+ DWORD result = NO_ERROR;
+
+ return result;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL GetIpAddrTable(PMIB_IPADDRTABLE pIpAddrTable, PULONG pdwSize,
+ WINBOOL bOrder)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL GetIpNetTable(PMIB_IPNETTABLE pIpNetTable, PULONG pdwSize,
+ WINBOOL bOrder)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL GetIpForwardTable(PMIB_IPFORWARDTABLE pIpForwardTable,
+ PULONG pdwSize, WINBOOL bOrder)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL GetIpStatistics(PMIB_IPSTATS pStats)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL GetIpStatisticsEx(PMIB_IPSTATS pStats, DWORD dwFamily)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL GetIcmpStatistics(PMIB_ICMP pStats)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL GetTcpStatisticsEx(PMIB_TCPSTATS pStats, DWORD dwFamily)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL GetUdpStatisticsEx(PMIB_UDPSTATS pStats, DWORD dwFamily)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL SetIfEntry(PMIB_IFROW pIfRow)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL SetIpForwardEntry(PMIB_IPFORWARDROW pRoute)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL DeleteIpForwardEntry(PMIB_IPFORWARDROW pRoute)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL SetIpStatistics(PMIB_IPSTATS pIpStats)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL SetIpTTL(UINT nTTL)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL CreateIpNetEntry(PMIB_IPNETROW pArpEntry)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL DeleteIpNetEntry(PMIB_IPNETROW pArpEntry)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL CreateProxyArpEntry(DWORD dwAddress, DWORD dwMask,
+ DWORD dwIfIndex)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL DeleteProxyArpEntry(DWORD dwAddress, DWORD dwMask,
+ DWORD dwIfIndex)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL SetTcpEntry(PMIB_TCPROW pTcpRow)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL GetUniDirectionalAdapterInfo(
+ PIP_UNIDIRECTIONAL_ADAPTER_ADDRESS pIPIfInfo, PULONG dwOutBufLen)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL GetBestInterface(IPAddr dwDestAddr, PDWORD pdwBestIfIndex)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL GetBestRoute(DWORD dwDestAddr, DWORD dwSourceAddr,
+ PMIB_IPFORWARDROW pBestRoute)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL NotifyAddrChange(PHANDLE Handle, LPOVERLAPPED overlapped)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL NotifyRouteChange(PHANDLE Handle, LPOVERLAPPED overlapped)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL DeleteIPAddress(ULONG NTEContext)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL GetPerAdapterInfo(ULONG IfIndex,
+ PIP_PER_ADAPTER_INFO pPerAdapterInfo, PULONG pOutBufLen)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL IpReleaseAddress(PIP_ADAPTER_INDEX_MAP AdapterInfo)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL IpRenewAddress(PIP_ADAPTER_INDEX_MAP AdapterInfo)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL SendARP(IPAddr DestIP, IPAddr SrcIP, PULONG pMacAddr,
+ PULONG PhyAddrLen)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+WINBOOL STDCALL GetRTTAndHopCount(IPAddr DestIpAddress, PULONG HopCount,
+ ULONG MaxHops, PULONG RTT)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL GetFriendlyIfIndex(DWORD IfIndex)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL EnableRouter(HANDLE* pHandle, OVERLAPPED* pOverlapped)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL UnenableRouter(OVERLAPPED* pOverlapped, LPDWORD lpdwEnableCount)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL GetIcmpStatisticsEx(PMIB_ICMP_EX pStats,DWORD dwFamily)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL NhpAllocateAndGetInterfaceInfoFromStack(IP_INTERFACE_NAME_INFO **ppTable,PDWORD pdwCount,WINBOOL bOrder,HANDLE hHeap,DWORD dwFlags)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL GetBestInterfaceEx(struct sockaddr *pDestAddr,PDWORD pdwBestIfIndex)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+WINBOOL STDCALL CancelIPChangeNotify(LPOVERLAPPED notifyOverlapped)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+PIP_ADAPTER_ORDER_MAP STDCALL GetAdapterOrderMap(VOID)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL GetAdaptersAddresses(ULONG Family,DWORD Flags,PVOID Reserved,PIP_ADAPTER_ADDRESSES pAdapterAddresses,PULONG pOutBufLen)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL DisableMediaSense(HANDLE *pHandle,OVERLAPPED *pOverLapped)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL RestoreMediaSense(OVERLAPPED* pOverlapped,LPDWORD lpdwEnableCount)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL GetIpErrorString(IP_STATUS ErrorCode,PWCHAR Buffer,PDWORD Size)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+HANDLE STDCALL IcmpCreateFile(
+ VOID
+ )
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+HANDLE STDCALL Icmp6CreateFile(
+ VOID
+ )
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+WINBOOL STDCALL IcmpCloseHandle(
+ HANDLE IcmpHandle
+ )
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL IcmpSendEcho(
+ HANDLE IcmpHandle,
+ IPAddr DestinationAddress,
+ LPVOID RequestData,
+ WORD RequestSize,
+ PIP_OPTION_INFORMATION RequestOptions,
+ LPVOID ReplyBuffer,
+ DWORD ReplySize,
+ DWORD Timeout
+ )
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD
+STDCALL
+IcmpSendEcho2(
+ HANDLE IcmpHandle,
+ HANDLE Event,
+ FARPROC ApcRoutine,
+ PVOID ApcContext,
+ IPAddr DestinationAddress,
+ LPVOID RequestData,
+ WORD RequestSize,
+ PIP_OPTION_INFORMATION RequestOptions,
+ LPVOID ReplyBuffer,
+ DWORD ReplySize,
+ DWORD Timeout
+ )
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+/*
+ * @unimplemented
+ */
+DWORD
+STDCALL
+Icmp6SendEcho2(
+ HANDLE IcmpHandle,
+ HANDLE Event,
+ FARPROC ApcRoutine,
+ PVOID ApcContext,
+ struct sockaddr_in6 *SourceAddress,
+ struct sockaddr_in6 *DestinationAddress,
+ LPVOID RequestData,
+ WORD RequestSize,
+ PIP_OPTION_INFORMATION RequestOptions,
+ LPVOID ReplyBuffer,
+ DWORD ReplySize,
+ DWORD Timeout
+ )
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD
+STDCALL
+IcmpParseReplies(
+ LPVOID ReplyBuffer,
+ DWORD ReplySize
+ )
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD
+STDCALL
+Icmp6ParseReplies(
+ LPVOID ReplyBuffer,
+ DWORD ReplySize
+ )
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL AllocateAndGetIfTableFromStack(PMIB_IFTABLE *ppIfTable,
+ BOOL bOrder, HANDLE heap, DWORD flags)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL AllocateAndGetIpAddrTableFromStack(PMIB_IPADDRTABLE *ppIpAddrTable,
+ BOOL bOrder, HANDLE heap, DWORD flags)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL AllocateAndGetIpForwardTableFromStack(PMIB_IPFORWARDTABLE *
+ ppIpForwardTable, BOOL bOrder, HANDLE heap, DWORD flags)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL AllocateAndGetIpNetTableFromStack(PMIB_IPNETTABLE *ppIpNetTable,
+ BOOL bOrder, HANDLE heap, DWORD flags)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL AllocateAndGetTcpTableFromStack(PMIB_TCPTABLE *ppTcpTable,
+ BOOL bOrder, HANDLE heap, DWORD flags)
+{
+ UNIMPLEMENTED
+ return 0L;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD STDCALL AllocateAndGetUdpTableFromStack(PMIB_UDPTABLE *ppUdpTable,
+ BOOL bOrder, HANDLE heap, DWORD flags)
+{
+ UNIMPLEMENTED
+ return 0L;
+}