windows-nt/Source/XPSP1/NT/net/wins/netsh/common.h
2020-09-26 16:20:57 +08:00

620 lines
13 KiB
C

/*++
Copyright (C) 1999 Microsoft Corporation
--*/
#ifndef _COMMON_H_
#define _COMMON_H_
#define is ==
#define isnot !=
#define and &&
#define or ||
#define FUTURES(x)
#define MCAST 1
#define MAX_DLL_NAME 48
#define WINS_HELPER_VERSION 1
#define MAX_IP_STRING_LEN 15
#define MAX_MSG_LENGTH 5120
#define MAX_HELPER_NAME MAX_DLL_NAME
#define MAX_NAME_LEN MAX_DLL_NAME
#define MAX_ENTRY_PT_NAME MAX_DLL_NAME
#define MAX_STRING_LEN 256
#define TMSTN ResultsN.WinsStat.TimeStamps
#define TMST Results.WinsStat.TimeStamps
#define ARRAY_SIZE(x) (sizeof(x)/sizeof((x)[0]))
#define TIME_ARGSN(x) \
TMSTN.x.wMonth, TMSTN.x.wDay, TMSTN.x.wYear, TMSTN.x.wHour, TMSTN.x.wMinute, TMSTN.x.wSecond
#define TIME_ARGS(x) \
TMST.x.wMonth, TMST.x.wDay, TMST.x.wYear, TMST.x.wHour, TMST.x.wMinute, TMST.x.wSecond
#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 WinsIpAddressToDottedStringW
#else
#define IpAddressToString WinsIpAddressToDottedString
#endif //UNICODE
#ifdef UNICODE
#define StringToIpAddress WinsDottedStringToIpAddressW
#else
#define StringToIpAddress WinsDottedStringToIpAddress
#endif //UNICODE
#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 LiLtr(a, b) ((a).QuadPart < (b).QuadPart)
#define LiAdd(a,b) ((a).QuadPart + (b).QuadPart)
#define MAX_COMPUTER_NAME_LEN 256
//
//
//Wins registry entry definitions
#define WINSROOT TEXT("SYSTEM\\CurrentControlSet\\Services\\Wins")
#define CCROOT TEXT("SYSTEM\\CurrentControlSet\\Services\\Wins\\Parameters\\ConsistencyCheck")
#define CC TEXT("ConsistencyCheck")
#define PARAMETER TEXT("SYSTEM\\CurrentControlSet\\Services\\Wins\\Parameters")
#define DEFAULTROOT TEXT("SYSTEM\\CurrentControlSet\\Services\\Wins\\Parameters\\Defaults")
#define DEFAULTPULL TEXT("SYSTEM\\CurrentControlSet\\Services\\Wins\\Parameters\\Defaults\\Pull")
#define DEFAULTPUSH TEXT("SYSTEM\\CurrentControlSet\\Services\\Wins\\Parameters\\Defaults\\Push")
#define PARTNERROOT TEXT("SYSTEM\\CurrentControlSet\\Services\\Wins\\Partners")
#define PULLROOT TEXT("SYSTEM\\CurrentControlSet\\Services\\Wins\\Partners\\Pull")
#define PUSHROOT TEXT("SYSTEM\\CurrentControlSet\\Services\\Wins\\Partners\\Push")
#define NETBIOSNAME TEXT("NetBiosName")
#define PERSISTENCE TEXT("PersistentRplOn")
#define PNGSERVER TEXT(WINSCNF_PERSONA_NON_GRATA_NM)
#define PGSERVER TEXT(WINSCNF_PERSONA_GRATA_NM)
//These definitions copied from rnraddrs.h
#define TTL_SUBNET_ONLY 1 // no routing
#define TTL_REASONABLE_REACH 2 // across one router
#define TTL_MAX_REACH 6 // Default max diameter. This may
// be overriden via the Registry.
//
//For determining Systems version
//
#define SERVERVERSION TEXT("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion")
#define WINSVERSION TEXT("CurrentVersion")
#define SPVERSION TEXT("CSDVersion")
#define BUILDNUMBER TEXT("CurrentBuildNumber")
//different default settings...
#define NAMERECORD_REFRESH_DEFAULT 6*24*60*60
#define NAMERECORD_EXTMOUT_DEFAULT 6*24*60*60
#define NAMERECORD_EXINTVL_DEFAULT 6*24*60*60
#define NAMERECORD_VERIFY_DEFAULT 24*24*60*60
#define ONE_YEAR 365*24*60*60
#define MAX_PATH_LEN 100
#define WINSTEST_FOUND 0
#define WINSTEST_NOT_FOUND 1
#define WINSTEST_NO_RESPONSE 2
#define WINSTEST_VERIFIED 0
#define WINSTEST_OUT_OF_MEMORY 3
#define WINSTEST_BAD_IP_ADDRESS 4
#define WINSTEST_HOST_NOT_FOUND 5
#define WINSTEST_NOT_VERIFIED 6
#define WINSTEST_INVALID_ARG 7
#define WINSTEST_OPEN_FAILED 8
#define _NBT_CFG_ADAPTERS_KEY TEXT("System\\CurrentControlSet\\Services\\NetBT\\Adapters")
#define RPL_E_PULL 0
#define RPL_E_PUSH 1
#define RE_QUERY_REGISTRY_COUNT 10
ULONG LocalIpAddress;
CHAR pScope[128];
#define MAX_WINS 1000
//
// <Server> - <Owner> Table - [SO] Table
//
extern LARGE_INTEGER ** SO_Table;
//
// Lookaside table to map IP addrs to the index into the SO_Table
//
extern WCHAR ** LA_Table;
extern ULONG LA_TableSize;
VOID
DumpSOTable(
IN DWORD MasterOwners,
IN BOOL fFile,
IN FILE * pFile
);
VOID
DumpLATable(
IN DWORD MasterOwners,
IN BOOL fFile,
IN FILE * pFile
);
typedef struct _WINSMON_SUBCONTEXT_TABLE_ENTRY
{
//
// Name of the context
//
LPWSTR pwszContext;
//
//Short command help
DWORD dwShortCmdHlpToken;
//Detail command help
DWORD dwCmdHlpToken;
PNS_CONTEXT_ENTRY_FN pfnEntryFn;
}WINSMON_SUBCONTEXT_TABLE_ENTRY,*PWINSMON_SUBCONTEXT_TABLE_ENTRY;
PVOID WinsAllocateMemory(DWORD dwSize);
VOID WinsFreeMemory(PVOID Memory);
extern HANDLE g_hModule;
extern BOOL g_bCommit;
extern BOOL g_hConnect;
extern BOOL g_fServer;
extern DWORD g_dwNumTableEntries;
extern PWCHAR g_pwszServer;
extern ULONG g_ulInitCount;
extern ULONG g_ulNumTopCmds;
extern ULONG g_ulNumGroups;
extern DWORD g_dwMajorVersion;
extern DWORD g_dwMinorVersion;
extern LPWSTR g_ServerNameUnicode;
extern LPSTR g_ServerNameAnsi;
extern CHAR g_ServerIpAddressAnsiString[MAX_IP_STRING_LEN+1];
extern WCHAR g_ServerIpAddressUnicodeString[MAX_IP_STRING_LEN+1];
extern HKEY g_hServerRegKey;
extern WCHAR g_ServerNetBiosName[MAX_COMPUTER_NAME_LEN];
extern handle_t g_hBind;
extern WINSINTF_BIND_DATA_T g_BindData;
extern WCHAR wszUnknown[50];
extern WCHAR wszEnable[50];
extern WCHAR wszDisable[50];
extern WCHAR wszRandom[150];
extern WCHAR wszOwner[150];
extern WCHAR wszInfinite[100];
extern WCHAR wszPush[50];
extern WCHAR wszPull[50];
extern WCHAR wszPushpull[50];
extern WCHAR wszHigh[50];
extern WCHAR wszNormal[50];
extern WCHAR wszDeleted[150];
extern WCHAR wszOK[50];
extern WCHAR wszFailure[50];
extern WCHAR wszReadwrite[50];
extern WCHAR wszRead[50];
extern WCHAR wszNo[50];
extern WCHAR wszNameVerify[100];
//
// The format of Adapter Status responses
//
typedef struct
{
ADAPTER_STATUS AdapterInfo;
NAME_BUFFER Names[32];
} tADAPTERSTATUS;
extern WCHAR *messages[];
#define MAX_NB_NAMES 1000
#define MAX_SERVERS 1000
#define BUFF_SIZE 650
#define MAX_SIZE 1024
#define INFINITE_EXPIRATION 0x7FFFFFFF
#define MAX(a, b) ( ( (a) > (b) ) ? (a) : (b) )
#define MIN(a, b) ( ( (a) > (b) ) ? (b) : (a) )
extern SOCKET sd;
extern WSADATA WsaData;
struct sockaddr_in myad;
struct sockaddr_in recvad;
int addrlen;
u_short TranID;
extern u_long NonBlocking;
extern int NumWinServers;
extern int NumNBNames;
extern u_char **NBNames;
u_long VerifiedAddress[MAX_NB_NAMES];
typedef struct
{
BOOLEAN fQueried;
struct in_addr Server;
struct in_addr RetAddr;
int Valid;
int Failed;
int Retries;
int LastResponse;
int Completed;
} WINSERVERS;
extern WINSERVERS * WinServers;
#define NBT_NONCODED_NMSZ 17
#define NBT_NAMESIZE 34
ULONG NetbtIpAddress;
typedef struct _NameResponse
{
u_short TransactionID;
u_short Flags;
u_short QuestionCount;
u_short AnswerCount;
u_short NSCount;
u_short AdditionalRec;
u_char AnswerName[NBT_NAMESIZE];
u_short AnswerType;
u_short AnswerClass;
u_short AnswerTTL1;
u_short AnswerTTL2;
u_short AnswerLength;
u_short AnswerFlags;
u_short AnswerAddr1;
u_short AnswerAddr2;
} NameResponse;
#define NAME_RESPONSE_BUFFER_SIZE sizeof(NameResponse) * 10
DWORD
FormatDateTimeString( IN time_t time,
IN BOOL fShort,
OUT LPWSTR pwszBuffer,
IN DWORD *pdwBuffLen);
INT
CheckNameConsistency();
DWORD
DisplayErrorMessage(
IN DWORD dwMsgID,
IN DWORD dwErrID,
...
);
BOOL
IsIpAddress(
IN LPCWSTR pwszAddress
);
UCHAR StringToHexA(IN LPCWSTR pwcString);
BOOL
IsPureNumeric(
IN LPCWSTR pwszStr
);
BOOL
IsValidServer(
IN LPCWSTR pwszServer
);
BOOL
IsLocalServer( VOID );
DWORD
CreateDumpFile(
IN LPCWSTR pwszName,
OUT PHANDLE phFile
);
VOID
CheckVersionNumbers(
IN LPCSTR pStartIp,
IN BOOL fFile,
OUT FILE * pFile
);
DWORD
ControlWINSService(IN BOOL bStop);
VOID
CloseDumpFile(
IN HANDLE hFile
);
LPWSTR
WinsOemToUnicodeN(
IN LPCSTR Ansi,
IN OUT LPWSTR Unicode,
IN USHORT cChars
);
LPWSTR
WinsOemToUnicode(
IN LPCSTR Ansi,
IN OUT LPWSTR Unicode
);
LPSTR
WinsUnicodeToOem(
IN LPCWSTR Unicode,
IN OUT LPSTR Ansi
);
LPWSTR
WinsAnsiToUnicode(
IN LPCSTR Ansi,
IN OUT LPWSTR Unicode
);
LPSTR
WinsUnicodeToAnsi(
IN LPCWSTR Unicode,
IN OUT LPSTR Ansi
);
LPSTR
WinsAnsiToOem(
IN LPCSTR Ansi
);
VOID
WinsHexToString(
OUT LPWSTR Buffer,
IN const BYTE * HexNumber,
IN DWORD Length
);
VOID
WinsHexToAscii(
OUT LPSTR Buffer,
IN const BYTE * HexNumber,
IN DWORD Length
);
VOID
WinsDecimalToString(
OUT LPWSTR Buffer,
IN BYTE Number
);
DWORD
WinsDottedStringToIpAddress(
IN LPCSTR String
);
LPSTR
WinsIpAddressToDottedString(
IN DWORD IpAddress
);
DWORD
WinsStringToHwAddress(
IN LPCSTR AddressBuffer,
IN LPCSTR AddressString
);
LPWSTR
MakeTimeString(
IN DWORD dwTime
);
LPWSTR
MakeDayTimeString(
IN DWORD dwTime
);
DWORD
WinsDottedStringToIpAddressW(
IN LPCWSTR pwszString
);
LPWSTR
WinsIpAddressToDottedStringW(
IN DWORD IpAddress
);
DWORD
GetVersionData(
IN LPWSTR pwszVers,
IN WINSINTF_VERS_NO_T *Version
);
DWORD
ImportStaticMappingsFile(IN LPWSTR strFile,
IN BOOL fDelete
);
DWORD
PreProcessCommand(
IN OUT LPWSTR *ppwcArguments,
IN DWORD dwArgCount,
IN DWORD dwCurrentIndex,
IN OUT PTAG_TYPE pTagTable,
IN OUT PDWORD pdwTagCount,
OUT PDWORD pdwTagType,
OUT PDWORD pdwTagNum
);
DWORD
GetStatus(
IN BOOL fPrint,
LPVOID pResultsA,
BOOL fNew,
BOOL fShort,
LPCSTR pStartIp
);
DWORD
GetDbRecs(
WINSINTF_VERS_NO_T LowVersNo,
WINSINTF_VERS_NO_T HighVersNo,
PWINSINTF_ADD_T pWinsAdd,
LPBYTE pTgtAdd,
BOOL fSetFilter,
LPBYTE pFilterName,
DWORD Len,
BOOL fAddFilter,
DWORD AddFilter,
BOOL fCountRec,
BOOL fCase,
BOOL fFile,
LPWSTR pwszFile
);
DWORD
WinsDumpServer(IN LPCWSTR pwszServerIp,
IN LPCWSTR pwszNetBiosName,
IN handle_t hBind,
IN WINSINTF_BIND_DATA_T BindData
);
NS_CONTEXT_DUMP_FN WinsDump;
VOID
ChkAdd(
PWINSINTF_RECORD_ACTION_T pRow,
DWORD Add,
BOOL fFile,
FILE * pFile,
DWORD OwnerIP,
LPBOOL pfMatch
);
VOID
DumpMessage(
HANDLE hModule,
FILE * pFile,
DWORD dwMsgId,
...
);
#if DBG
VOID
WinsPrintRoutine(
IN DWORD DebugFlag,
IN LPCSTR Format,
...
);
VOID
WinsAssertFailed(
IN LPCSTR FailedAssertion,
IN LPCSTR FileName,
IN DWORD LineNumber,
IN LPCSTR Message
);
#define WinsPrint(_x_) WinsPrintRoutine _x_
#define WinsAssert(Predicate) \
{ \
if (!(Predicate)) \
WinsAssertFailed( #Predicate, __FILE__, __LINE__, NULL ); \
}
#define WinsVerify(Predicate) \
{ \
if (!(Predicate)) \
WinsAssertFailed( #Predicate, __FILE__, __LINE__, NULL ); \
}
#else
#define WinsAssert(_x_)
#define WinsDumpMessage(_x_, _y_)
#define WinsVerify(_x_) (_x_)
#endif // not DBG
#endif //_COMMON_H_