353 lines
6.8 KiB
C
353 lines
6.8 KiB
C
/*++
|
|
|
|
Copyright (c) 1999 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
precomp.h
|
|
|
|
Abstract:
|
|
|
|
precompiled header
|
|
|
|
--*/
|
|
|
|
#include <nt.h>
|
|
#include <ntrtl.h>
|
|
#include <nturtl.h>
|
|
|
|
#include <windows.h>
|
|
|
|
//
|
|
// set compiler warning settings
|
|
//
|
|
|
|
#pragma warning( disable: 4127 )
|
|
// allow while( 0 ) etc.
|
|
|
|
#pragma warning( disable: 4221 )
|
|
#pragma warning( disable: 4204 )
|
|
// allow initializations for structs with variables
|
|
|
|
#pragma warning( disable: 4201 )
|
|
// allow structs with no names
|
|
|
|
#pragma warning( disable: 4245 )
|
|
// allow initialization time unsigned/signed mismatch
|
|
|
|
#pragma warning( disable: 4232 )
|
|
// allow initialization of structs with fn ptrs from dllimport
|
|
|
|
#pragma warning( disable: 4214 )
|
|
// allow bit fields in structs
|
|
|
|
#include <winsock2.h>
|
|
#include <ws2tcpip.h>
|
|
#include <mstcpip.h>
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <align.h>
|
|
#include <iphlpapi.h>
|
|
#include <tchar.h>
|
|
#include <rtutils.h>
|
|
#include <windns.h>
|
|
#include <dnsapi.h>
|
|
|
|
//
|
|
// set compiler warning settings
|
|
//
|
|
|
|
#pragma warning( disable: 4127 )
|
|
// allow while( 0 ) etc.
|
|
|
|
#pragma warning( disable: 4221 )
|
|
#pragma warning( disable: 4204 )
|
|
// allow initializations for structs with variables
|
|
|
|
#pragma warning( disable: 4201 )
|
|
// allow structs with no names
|
|
|
|
#pragma warning( disable: 4245 )
|
|
// allow initialization time unsigned/signed mismatch
|
|
|
|
#pragma warning( disable: 4232 )
|
|
// allow initialization of structs with fn ptrs from dllimport
|
|
|
|
#pragma warning( disable: 4214 )
|
|
// allow bit fields in structs
|
|
|
|
#include <guiddef.h>
|
|
#include <devguid.h>
|
|
#include <setupapi.h>
|
|
#include <netconp.h>
|
|
#include <ntddtcp.h>
|
|
#include <ntddip.h>
|
|
#include <tdistat.h>
|
|
#include <tdiinfo.h>
|
|
#include <llinfo.h>
|
|
#include <ipinfo.h>
|
|
#include <ipexport.h>
|
|
#include <nbtioctl.h>
|
|
|
|
#pragma warning( disable: 4200 )
|
|
// allow zero sized arrays
|
|
|
|
#include <nhapi.h>
|
|
#include <iphlpstk.h>
|
|
#include <ndispnp.h>
|
|
|
|
#include <ipconfig.h>
|
|
#include <ntddip6.h>
|
|
|
|
#pragma warning(disable:4001)
|
|
#pragma warning(disable:4201)
|
|
#pragma warning(disable:4214)
|
|
#pragma warning(disable:4514)
|
|
|
|
//
|
|
// This structure has global information only
|
|
//
|
|
|
|
#define MaxHostNameSize 256
|
|
#define MaxDomainNameSize 256
|
|
#define MaxScopeIdSize 256
|
|
#define MaxPhysicalNameSize 256
|
|
#define MaxDeviceGuidName 256
|
|
|
|
#ifndef IPV4_ADDRESS_DEFINED
|
|
typedef DWORD IPV4_ADDRESS;
|
|
#endif
|
|
|
|
typedef struct _INTERFACE_NETWORK_INFO {
|
|
//
|
|
// General device info
|
|
//
|
|
|
|
WCHAR DeviceGuidName[MaxDeviceGuidName];
|
|
DWORD IfType;
|
|
CHAR PhysicalName[MaxPhysicalNameSize];
|
|
DWORD PhysicalNameLength;
|
|
LPWSTR FriendlyName;
|
|
LPWSTR ConnectionName;
|
|
BOOL MediaDisconnected;
|
|
|
|
//
|
|
// Dhcp specific info
|
|
//
|
|
|
|
LPWSTR DhcpClassId;
|
|
BOOL EnableDhcp;
|
|
BOOL EnableAutoconfig;
|
|
IPV4_ADDRESS DhcpServer;
|
|
LONGLONG LeaseObtainedTime; // these are actually FILETIMEs but made them...
|
|
LONGLONG LeaseExpiresTime; // ...LONGLONG to fix alignment pb on W64 (#120397)
|
|
BOOL AutoconfigActive;
|
|
|
|
//
|
|
// Dns specific info
|
|
//
|
|
|
|
IPV4_ADDRESS *DnsServer; // network order
|
|
ULONG nDnsServers;
|
|
SOCKADDR_IN6 *Ipv6DnsServer;
|
|
ULONG nIpv6DnsServers;
|
|
WCHAR DnsSuffix[MaxDomainNameSize];
|
|
|
|
//
|
|
// Wins specific Info
|
|
//
|
|
|
|
IPV4_ADDRESS *WinsServer; // network order
|
|
ULONG nWinsServers;
|
|
BOOL EnableNbtOverTcpip;
|
|
|
|
//
|
|
// Ip specific info: first ip is primary addr
|
|
//
|
|
|
|
IPV4_ADDRESS *IpAddress; // network order
|
|
ULONG nIpAddresses;
|
|
SOCKADDR_IN6 *Ipv6Address;
|
|
ULONG nIpv6Addresses;
|
|
IPV4_ADDRESS *IpMask; // network order
|
|
ULONG nIpMasks;
|
|
IPV4_ADDRESS *Router; // network order
|
|
ULONG nRouters;
|
|
SOCKADDR_IN6 *Ipv6Router;
|
|
ULONG nIpv6Routers;
|
|
} INTERFACE_NETWORK_INFO, *PINTERFACE_NETWORK_INFO;
|
|
|
|
typedef struct _NETWORK_INFO {
|
|
WCHAR HostName[MaxHostNameSize];
|
|
WCHAR DomainName[MaxDomainNameSize];
|
|
WCHAR ScopeId[MaxScopeIdSize];
|
|
ULONG NodeType;
|
|
BOOL EnableRouting;
|
|
BOOL EnableProxy;
|
|
BOOL EnableDnsForNetbios;
|
|
BOOL GlobalEnableAutoconfig;
|
|
LPWSTR SuffixSearchList; // Multi_Sz string
|
|
ULONG nInterfaces;
|
|
PINTERFACE_NETWORK_INFO *IfInfo;
|
|
} NETWORK_INFO, *PNETWORK_INFO;
|
|
|
|
//
|
|
// Node Type values
|
|
//
|
|
|
|
enum {
|
|
NodeTypeUnknown = 0,
|
|
NodeTypeBroadcast,
|
|
NodeTypePeerPeer,
|
|
NodeTypeMixed,
|
|
NodeTypeHybrid
|
|
};
|
|
|
|
//
|
|
// IfType values
|
|
//
|
|
|
|
enum {
|
|
IfTypeUnknown = 0,
|
|
IfTypeOther,
|
|
IfTypeEthernet,
|
|
IfTypeTokenring,
|
|
IfTypeFddi,
|
|
IfTypeLoopback,
|
|
IfTypePPP,
|
|
IfTypeSlip,
|
|
IfTypeTunnel,
|
|
IfType1394
|
|
} IfTypeConstants;
|
|
|
|
//
|
|
// Internal error codes
|
|
//
|
|
|
|
enum {
|
|
GlobalHostNameFailure = 0,
|
|
GlobalDomainNameFailure = 2,
|
|
GlobalEnableRouterFailure = 3,
|
|
GlobalEnableDnsFailure = 4,
|
|
GlobalIfTableFailure = 5,
|
|
GlobalIfInfoFailure = 6,
|
|
GlobalIfNameInfoFailure = 7,
|
|
GlobalAddrTableFailure = 8,
|
|
GlobalRouteTableFailure = 9,
|
|
|
|
InterfaceUnknownType = 10,
|
|
InterfaceUnknownFriendlyName = 11,
|
|
InterfaceUnknownMediaStatus = 12,
|
|
InterfaceUnknownTcpipDevice = 13,
|
|
InterfaceOpenTcpipKeyReadFailure = 14,
|
|
InterfaceDhcpValuesFailure = 15,
|
|
InterfaceDnsValuesFailure = 16,
|
|
InterfaceWinsValuesFailure = 17,
|
|
InterfaceAddressValuesFailure = 18,
|
|
InterfaceRouteValuesFailure = 19,
|
|
|
|
NoSpecificError = 20,
|
|
} InternalFailureCodes;
|
|
|
|
|
|
//
|
|
// routines exported from info.c
|
|
//
|
|
|
|
enum {
|
|
OpenTcpipParmKey,
|
|
OpenTcpipKey,
|
|
OpenNbtKey
|
|
} KeyTypeEnums;
|
|
|
|
enum {
|
|
OpenKeyForRead = 0x01,
|
|
OpenKeyForWrite = 0x02
|
|
} AccessTypeEnums;
|
|
|
|
|
|
DWORD
|
|
OpenRegKey(
|
|
IN LPCWSTR Device,
|
|
IN DWORD KeyType,
|
|
IN DWORD AccessType,
|
|
OUT HKEY *phKey
|
|
);
|
|
|
|
VOID
|
|
FreeNetworkInfo(
|
|
IN OUT PNETWORK_INFO NetInfo
|
|
);
|
|
|
|
DWORD
|
|
GetNetworkInformation(
|
|
OUT PNETWORK_INFO *pNetInfo,
|
|
IN OUT DWORD *InternalError
|
|
);
|
|
|
|
//
|
|
// exported by display.c
|
|
//
|
|
|
|
typedef struct _CMD_ARGS {
|
|
LPWSTR All, Renew, Release, FlushDns, Register;
|
|
LPWSTR DisplayDns, ShowClassId, SetClassId;
|
|
LPWSTR Debug, Usage, UsageErr;
|
|
} CMD_ARGS, *PCMD_ARGS;
|
|
|
|
DWORD
|
|
GetCommandArgConstants(
|
|
IN OUT PCMD_ARGS Args
|
|
);
|
|
|
|
DWORD
|
|
FormatNetworkInfo(
|
|
IN OUT LPWSTR Buffer,
|
|
IN ULONG BufSize,
|
|
IN PNETWORK_INFO NetInfo,
|
|
IN DWORD Win32Error,
|
|
IN DWORD InternalError,
|
|
IN BOOL fVerbose,
|
|
IN BOOL fDebug
|
|
);
|
|
|
|
DWORD
|
|
DumpMessage(
|
|
IN LPWSTR Buffer,
|
|
IN ULONG BufSize,
|
|
IN ULONG MsgId,
|
|
...
|
|
);
|
|
|
|
DWORD
|
|
DumpMessageError(
|
|
IN LPWSTR Buffer,
|
|
IN ULONG BufSize,
|
|
IN ULONG MsgId,
|
|
IN ULONG_PTR Error,
|
|
IN PVOID Arg OPTIONAL
|
|
);
|
|
|
|
DWORD
|
|
DumpErrorMessage(
|
|
IN LPWSTR Buffer,
|
|
IN ULONG BufSize,
|
|
IN ULONG InternalError,
|
|
IN ULONG Win32Error
|
|
);
|
|
|
|
#ifdef __IPCFG_ENABLE_LOG__
|
|
extern DWORD dwTraceFlag;
|
|
extern int TraceFunc(const char* fmt, ...);
|
|
#define IPCFG_TRACE_TCPIP 0x01U
|
|
|
|
#define IPCFG_TRACE(x,y) \
|
|
if (dwTraceFlag & x) { \
|
|
TraceFunc y; \
|
|
}
|
|
#else
|
|
#define IPCFG_TRACE(x,y)
|
|
#endif
|