/*++ 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("")) #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 ); PHOSTENT UnicodeGetHostByName( IN PCWSTR name, IN OUT LPWSTR *FqdnName ); #endif //_COMMON_H