Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

554 lines
13 KiB

/*++
Copyright (C) 1998 Microsoft Corporation
--*/
#ifndef _COMMON_H_
#define _COMMON_H_
#define MAX_IP_STRING_LEN 15
#ifdef UNICODE
#define STRICMP(x, y) _wcsicmp(x, y)
#else
#define STRICMP(x, y) _stricmp(x, y)
#endif //UNICODE
#ifdef UNICODE
#define STRTOUL(x, y, z) wcstoul(x, y, z)
#else
#define STRTOUL(x, y, z) strtoul(x, y, z)
#endif //UNICODE
#ifdef UNICODE
#define STRCHR(x, y) wcschr(x, y)
#else
#define STRCHR(x, y) strchr(x, y)
#endif //UNICODE
#ifdef UNICODE
#define STRCAT(x, y) wcscat(x, y)
#else
#define STRCAT(x, y) strcat(x, y)
#endif //UNICODE
#ifdef UNICODE
#define STRLEN(x) wcslen(x)
#else
#define STRCAT(x) strlen(x)
#endif //UNICODE
#ifdef UNICODE
#define ATOI(x) _wtoi(x)
#else
#define ATOI(x) atoi(x)
#endif //UNICODE
#ifdef NT5
#define CHKNULL(Str) ((Str)?(Str):TEXT("<None>"))
#endif //NT5
#ifdef UNICODE
#define IpAddressToString DhcpIpAddressToDottedStringW
#else
#define IpAddressToString DhcpIpAddressToDottedString
#endif //UNICODE
#ifdef UNICODE
#define StringToIpAddress DhcpDottedStringToIpAddressW
#else
#define StringToIpAddress DhcpDottedStringToIpAddress
#endif //UNICODE
#undef DhcpAllocateMemory
#undef DhcpFreeMemory
#ifndef _DEBUG
#define DEBUG(s)
#define DEBUG1(s1,s2)
#define DEBUG2(s1,s2)
#else
#define DEBUG(s) wprintf(L"%s\n", L##s)
#define DEBUG1(s1,s2) wprintf(L##s1, L##s2)
#define DEBUG2(s1,s2) wprintf(L##s1, L##s2)
#endif
#define SRVRMON_VERSION_50 5
#define DHCPMON_VERSION_50 5
#define SCOPEMON_VERSION_50 5
#define is ==
#define isnot !=
#define or ||
#define and &&
#define CLASS_ID_VERSION 0x5
#define MAX_STRING_LEN 256
#define REG_VALUE_ENTRY_PT L"EntryPoint"
#define REG_VALUE_DUMP_FN L"DumpFunction"
#define REG_KEY_DHCPSCOPE_HELPER L"SOFTWARE\\Microsoft\\Netsh\\Dhcp\\Server\\Scope"
#define REG_KEY_DHCPSRVR_HELPER L"SOFTWARE\\Microsoft\\Netsh\\Dhcp\\Server"
#define REG_KEY_DHCPMGR_HELPER L"SOFTWARE\\Microsoft\\Netsh\\Dhcp"
#define MaxIfDisplayLength 1024
#define ADDR_LENGTH 24
#define ADDR_LEN 4
#define DEFAULT_DHCP_LEASE 8*24*60*60
#define DEFAULT_BOOTP_LEASE 30*24*60*60
#define DEFAULT_MULTICAST_TTL 0x20
#define INFINIT_TIME 0x7FFFFFFF // time_t is int
#define INFINIT_LEASE 0xFFFFFFFF // in secs. (unsigned int.)
typedef struct _COMMAND_OPTION_TYPE
{
LPWSTR pwszTagID;
DHCP_OPTION_DATA_TYPE DataType;
LPWSTR pwcTag;
} COMMAND_OPTION_TYPE, *PCOMMAND_OPTION_TYPE;
extern COMMAND_OPTION_TYPE TagOptionType[ 8 ];/* =
{ TAG_OPTION_BYTE, DhcpByteOption, L"BYTE" },
{ TAG_OPTION_WORD, DhcpWordOption, L"WORD" },
{ TAG_OPTION_DWORD, DhcpDWordOption, L"DWORD" },
{ TAG_OPTION_DWORDDWORD, DhcpDWordDWordOption, L"DWORDDWORD" },
{ TAG_OPTION_IPADDRESS, DhcpIpAddressOption, L"IPADDRESS" },
{ TAG_OPTION_STRING, DhcpStringDataOption, L"STRING" },
{ TAG_OPTION_BINARY, DhcpBinaryDataOption, L"BINARY" },
{ TAG_OPTION_ENCAPSULATED, DhcpEncapsulatedDataOption, L"ENCAPSULATED" }
*/
#define DISPLAYLEN_PHYSADDR 3*MAXLEN_PHYSADDR + 8
#define PRINT(s) wprintf(L"%s\n",L##s)
#define PRINT1(s,s1) wprintf(L##s , L##s1)
#ifdef UNICODE
#define MakeUnicodeIpAddr(ptszUnicode,pszAddr) \
MultiByteToWideChar(CP_ACP, \
0, \
(pszAddr), \
-1, \
(ptszUnicode), \
ADDR_LENGTH)
#else
#define MakeUnicodeIpAddr(ptszUnicode,pszAddr) \
strcpy((ptszUnicode),(pszAddr))
#endif //UNICODE
#ifdef UNICODE
#define MakeUnicodePhysAddr(ptszUnicode,pszAddr,dwLen) \
{ \
CHAR __szTemp[DISPLAYLEN_PHYSADDR + 1]; \
DWORD __i,__dwTempLen; \
__dwTempLen = (((dwLen) <= MAXLEN_PHYSADDR) ? (dwLen) : MAXLEN_PHYSADDR); \
for(__i = 0; __i < __dwTempLen; __i++) \
{ \
sprintf(&(__szTemp[3*__i]),"%02X-",pszAddr[__i]); \
} \
MultiByteToWideChar(CP_ACP, \
0, \
(__szTemp), \
-1, \
(ptszUnicode), \
3*__i); \
ptszUnicode[(3*__i) - 1] = TEXT('\0'); \
}
#else
#define MakeUnicodePhysAddr(ptszUnicode,pszAddr,dwLen) \
{ \
CHAR __szTemp[DISPLAYLEN_PHYSADDR + 1]; \
DWORD __i,__dwTempLen; \
__dwTempLen = (((dwLen) <= MAXLEN_PHYSADDR) ? (dwLen) : MAXLEN_PHYSADDR); \
for(__i = 0; __i < __dwTempLen; __i++) \
{ \
sprintf(&(__szTemp[3*__i]),"%02X-",pszAddr[__i]); \
} \
strncpy((ptszUnicode),__szTemp,3*__i); \
ptszUnicode[(3*__i) - 1] = TEXT('\0'); \
}
#endif //UNICODE
#define GetDispString(gModule, val, str, count, table) \
{ \
DWORD __dwInd = 0; \
for( ; __dwInd < (count); __dwInd += 2 ) \
{ \
if ( (val) != (table)[ __dwInd ] ) { continue; } \
(str) = MakeString( (gModule), (table)[ __dwInd + 1 ] ); \
break; \
} \
if ( __dwInd >= (count) ) { (str) = MakeString( (gModule), STRING_UNKNOWN ); } \
}
#define FREE_STRING_NOT_NULL(ptszString) if (ptszString) FreeString(ptszString)
#define ERROR_CONFIG 1
#define ERROR_ADMIN 2
#define ERROR_UNIDENTIFIED_MIB 2312
#define ERROR_TOO_FEW_ARGS (ERROR_UNIDENTIFIED_MIB+1)
#define MAX_NUM_INDICES 6
#define PRINT_IPADDR(x) \
((x)&0x000000ff),(((x)&0x0000ff00)>>8),(((x)&0x00ff0000)>>16),(((x)&0xff000000)>>24)
#define IP_TO_WSTR(str,addr) swprintf((str),L"%d.%d.%d.%d", \
(addr)[0], \
(addr)[1], \
(addr)[2], \
(addr)[3])
#define GET_TOKEN_PRESENT(tokenMask) (dwBitVector & tokenMask)
#define SET_TOKEN_PRESENT(tokenMask) (dwBitVector |= tokenMask)
#define SetErrorType(pdw) *(pdw) = IsRouterRunning()?ERROR_ADMIN:ERROR_CONFIG
#define INFINITE_EXPIRATION 0x7FFFFFFF
#define MSCOPE_START_RANGE StringToIpAddress(L"224.0.0.0")
#define MSCOPE_END_RANGE StringToIpAddress(L"239.255.255.255")
WCHAR StringToHex(LPCWSTR pwcString);
LPSTR StringToHexString(LPCSTR pszStr);
DHCP_IP_ADDRESS
DhcpDefaultSubnetMask(
DHCP_IP_ADDRESS IpAddress
);
DWORD
FormatDateTimeString( FILETIME ftTime,
BOOL fShort,
LPWSTR pwszBuffer,
DWORD *pdwBuffLen);
LPWSTR
GetDateTimeString(FILETIME TimeStamp,
BOOL fShort,
int *piType
);
PVOID
DhcpAllocateMemory(
IN DWORD Size
);
VOID
DhcpFreeMemory(
IN PVOID Memory
);
DATE_TIME
DhcpCalculateTime(
IN DWORD RelativeTime
);
LPWSTR
DhcpOemToUnicodeN(
IN LPCSTR Ansi,
IN OUT LPWSTR Unicode,
IN USHORT cChars
);
LPWSTR
DhcpOemToUnicode(
IN LPCSTR Ansi,
IN OUT LPWSTR Unicode
);
LPSTR
DhcpUnicodeToOem(
IN LPCWSTR Unicode,
OUT LPSTR Ansi
);
VOID
DhcpHexToString(
OUT LPWSTR Buffer,
IN const BYTE * HexNumber,
IN DWORD Length
);
VOID
DhcpHexToAscii(
IN LPSTR Buffer,
IN LPBYTE HexNumber,
IN DWORD Length
);
VOID
DhcpDecimalToString(
IN LPWSTR Buffer,
IN BYTE Number
);
DWORD
DhcpDottedStringToIpAddress(
IN LPSTR String
);
LPSTR
DhcpIpAddressToDottedString(
IN DWORD IpAddress
);
DWORD
DhcpStringToHwAddress(
OUT LPSTR AddressBuffer,
IN LPCSTR AddressString
);
DWORD
DhcpDottedStringToIpAddressW(
IN LPCWSTR pwszString
);
LPWSTR
DhcpIpAddressToDottedStringW(
IN DWORD IpAddress
);
LPWSTR
DhcpRegIpAddressToKey(
IN DHCP_IP_ADDRESS IpAddress,
IN LPCWSTR KeyBuffer
);
DWORD
DhcpRegKeyToIpAddress(
IN LPCWSTR Key
);
LPWSTR
DhcpRegOptionIdToKey(
IN DHCP_OPTION_ID OptionId,
IN LPCWSTR KeyBuffer
);
DHCP_OPTION_ID
DhcpRegKeyToOptionId(
IN LPCWSTR Key
);
#if DBG
VOID
DhcpPrintRoutine(
IN DWORD DebugFlag,
IN LPCSTR Format,
...
);
VOID
DhcpAssertFailed(
IN LPCSTR FailedAssertion,
IN LPCSTR FileName,
IN DWORD LineNumber,
IN LPSTR Message
);
#define DhcpPrint(_x_) DhcpPrintRoutine _x_
#define DhcpAssert(Predicate) \
{ \
if (!(Predicate)) \
DhcpAssertFailed( #Predicate, __FILE__, __LINE__, NULL ); \
}
#define DhcpVerify(Predicate) \
{ \
if (!(Predicate)) \
DhcpAssertFailed( #Predicate, __FILE__, __LINE__, NULL ); \
}
#else
#define DhcpAssert(_x_)
#define DhcpDumpMessage(_x_, _y_)
#define DhcpVerify(_x_) (_x_)
#endif // not DBG
DWORD
CreateDumpFile(
IN PWCHAR pwszName,
OUT PHANDLE phFile
);
VOID
CloseDumpFile(
IN HANDLE hFile
);
BOOL
IsIpAddress(
IN LPCWSTR pwszAddress
);
BOOL
IsValidServer(
IN LPCWSTR pwszServer
);
BOOL
IsLocalServer(
IN LPCWSTR pwszServer
);
BOOL
IsValidScope(
IN LPCWSTR pwszServer,
IN LPCWSTR pwszAddress
);
BOOL
IsValidMScope(
IN LPCWSTR pwszServer,
IN LPCWSTR pwszMScope
);
BOOL
IsPureHex(
IN LPCWSTR pwszString
);
DWORD
DhcpDumpServer(
IN LPCWSTR pwszIpAddress,
IN DWORD dwMajor,
IN DWORD dwMinor
);
PBYTE
GetLangTagA();
VOID
DhcpDumpScriptHeader();
VOID
DhcpDumpServerScriptHeader(IN LPCWSTR pwszServer);
VOID
DhcpDumpServerClass(
IN LPCWSTR pwszServer,
IN DHCP_CLASS_INFO ClassInfo);
DWORD
DhcpDumpServerOptiondefV5(IN LPCWSTR pwszServer,
IN LPDHCP_ALL_OPTIONS OptionsAll
);
DWORD
DhcpDumpServerOptiondef(IN LPCWSTR pwszServer,
LPDHCP_OPTION_ARRAY OptionArray
);
DWORD
DhcpDumpServerOptionValuesV5(IN LPCWSTR pwszServer,
IN LPCWSTR pwszScope,
IN LPCWSTR pwszReserved,
IN LPDHCP_ALL_OPTION_VALUES OptionValues
);
DWORD
DhcpDumpServerOptionValue(IN LPCWSTR pwszServer,
IN LPCWSTR pwszScope,
IN LPCWSTR pwszReserved,
IN LPCWSTR pwcUser,
IN LPCWSTR pwcVendor,
IN BOOL fIsV5,
IN DHCP_OPTION_VALUE OptionValue);
DWORD
DhcpDumpReservedOptionValues(
IN LPCWSTR pwszServer,
IN DWORD dwMajor,
IN DWORD dwMinor,
IN LPCWSTR pwszScope,
IN LPCWSTR pwszReservedIp
);
DWORD
DhcpDumpScope(IN LPCWSTR pwszServerIp,
IN DWORD dwMajor,
IN DWORD dwMinor,
IN DWORD ScopeIp);
VOID
DhcpDumpSuperScopes( IN LPCWSTR pwszServer,
IN DWORD dwMajor,
IN DWORD dwMinor );
DWORD
DhcpDumpServerMScope(IN LPCWSTR pwszServer,
IN DWORD dwMajor,
IN DWORD dwMinor,
IN LPCWSTR pwszMScope
);
VOID
DhcpDumpServerClassHeader();
VOID
DhcpDumpServerClassFooter();
VOID
DhcpDumpServerOptiondefHeader();
VOID
DhcpDumpServerOptiondefFooter();
VOID
DhcpDumpServerOptionvalueHeader();
VOID
DhcpDumpServerOptionvalueFooter();
VOID
DhcpDumpServerScopeHeader();
VOID
DhcpDumpServerScopeFooter();
VOID
DhcpDumpServerMScopeHeader();
VOID
DhcpDumpServerMScopeFooter();
VOID
DhcpDumpServerConfig(IN LPCWSTR pwszServer);
VOID
DhcpDumpScriptFooter();
VOID
DhcpDumpServerScriptFooter();
NS_CONTEXT_DUMP_FN DhcpDump;
BOOL
IsPureNumeric(IN LPCWSTR pwszStr);
LPWSTR
MakeDayTimeString(
IN DWORD dwTime
);
#endif //_COMMON_H