//+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (C) Microsoft Corporation, 1998 - 1999 // // File: netdiag.h // //-------------------------------------------------------------------------- #ifndef HEADER_NETDIAG #define HEADER_NETDIAG ////////////////////////////////////////////////////////////////////////////// // // Constants particular to the current NT development environment // ////////////////////////////////////////////////////////////////////////////// // // Developers responsible for tested portions of NT // #define NET_GURU "[Contact NSun]" #define DHCP_GURU "[Contact ThiruB/RameshV]" #define TCPIP_GURU "[Contact PradeepB]" #define NETBT_GURU "[Contact MAlam]" #define WINSOCK_GURU "[Contact KarolyS]" #define REDIR_GURU "[Contact SethuR]" #define BOWSER_GURU "[Contact CliffV]" #define DNS_GURU "[Contact DnsDev]" #define SAM_GURU "[Contact MurliS]" #define LSA_GURU "[Contact MacM]" #define DSGETDC_GURU "[Contact CliffV]" #define NETLOGON_GURU "[Contact CliffV]" #define KERBEROS_GURU "[Contact ChandanS]" #define NTLM_GURU "[Contact ChandanS]" #define LDAP_GURU "[Contact AnoopA]" ////////////////////////////////////////////////////////////////////////////// // // Constants particular to the current version of NT. // ////////////////////////////////////////////////////////////////////////////// #define NETBT_DEVICE_PREFIX L"\\device\\Netbt_tcpip_{" // // Complain about pre-IDW builds // #define NTBUILD_IDW 1716 #define NTBUILD_DYNAMIC_DNS 1716 #define NTBUILD_BOWSER 1716 #define NTBUILD_DNSSERVERLIST 1728 // // New functions for displaying routing table - Rajkumar // #define WILD_CARD (ULONG)(-1) #define ROUTE_DATA_STRING_SIZE 300 #define NTOA(STR,ADDR) \ strncpy( STR, \ inet_ntoa(*(struct in_addr*)(&(ADDR))), \ sizeof(STR)-1 ) #ifdef _UNICODE #define INET_ADDR(_sz) inet_addrW(_sz) #else #define INET_ADDR(_sz) inet_addrA(_swz) #endif ULONG inet_addrW(LPCWSTR pswz); #define inet_addrA(_psz) inet_addr(_psz) #define MAX_METRIC 9999 #define ROUTE_SEPARATOR ',' #define MAX_CONTACT_STRING 256 // Some winsock defines ////////////////////////////////////////////////////////////////////////////// // // Globals // ////////////////////////////////////////////////////////////////////////////// //extern BOOL IpConfigCalled; //extern BOOL ProblemBased; extern int ProblemNumber; // // This has been made global so that we dump the information in WinsockTest - Rajkumar // //extern WSADATA wsaData; //extern PFIXED_INFO GlobalIpconfigFixedInfo; //extern PADAPTER_INFO GlobalIpconfigAdapterInfo; //extern PIP_ADAPTER_INFO IpGlobalIpconfigAdapterInfo; //extern BOOLEAN GlobalDhcpEnabled; // // Structure describing a single Netbt Transport // //extern LIST_ENTRY GlobalNetbtTransports; //extern LIST_ENTRY GlobalTestedDomains; // // Globals defining the command line arguments. // //extern BOOL Verbose; extern BOOL ReallyVerbose; //extern BOOL DebugVerbose; //extern BOOL GlobalFixProblems; //extern BOOL GlobalDcAccountEnum; extern PTESTED_DOMAIN GlobalQueriedDomain; // // Describe the domain this machine is a member of // //extern int GlobalNtBuildNumber; //extern PDSROLE_PRIMARY_DOMAIN_INFO_BASIC GlobalDomainInfo; //extern PTESTED_DOMAIN GlobalMemberDomain; // // Who we're currently logged on as // //extern PUNICODE_STRING GlobalLogonUser; //extern PUNICODE_STRING GlobalLogonDomainName; //extern PTESTED_DOMAIN GlobalLogonDomain; //extern BOOLEAN GlobalLogonWithCachedCredentials; // // A Zero GUID for comparison // extern GUID NlDcZeroGuid; // // State determined by previous tests // //extern BOOL GlobalNetlogonIsRunning; // Netlogon is running on this machine //extern BOOL GlobalKerberosIsWorking; // Kerberos is working // // Netbios name of this machine // //extern WCHAR GlobalNetbiosComputerName[MAX_COMPUTERNAME_LENGTH+1]; //extern CHAR GlobalDnsHostName[DNS_MAX_NAME_LENGTH+1]; //extern LPSTR GlobalDnsDomainName; // Commented out to port to Source Depot - smanda #ifdef SLM_TREE extern DSGETDCNAMEW NettestDsGetDcNameW; #else extern DSGETDCNAMEW DsGetDcNameW; #endif void PrintMessage(NETDIAG_PARAMS *pParams, UINT uMessageID, ...); void PrintMessageSz(NETDIAG_PARAMS *pParams, LPCTSTR pszMessage); int match( const char * p, const char * s ); //only used in Kerberos test so far VOID sPrintTime(LPSTR str, LARGE_INTEGER ConvertTime); DWORD LoadContact(LPCTSTR pszTestName, LPTSTR pszContactInfo, DWORD cChSize); NET_API_STATUS IsServiceStarted(IN LPTSTR pszServiceName); VOID PrintSid(IN NETDIAG_PARAMS *pParams, IN PSID Sid OPTIONAL); LPSTR MapTime(DWORD_PTR TimeVal); #ifdef _UNICODE #define IsIcmpResponse(_psz) IsIcmpResponseW(_psz) #else #define IsIcmpResponse(_psz) IsIcmpResponseA(_psz) #endif BOOL IsIcmpResponseW(LPCWSTR pswzIpAddrStr); BOOL IsIcmpResponseA(LPCSTR pszIpAddrStr); PTESTED_DOMAIN AddTestedDomain( IN NETDIAG_PARAMS *pParams, IN NETDIAG_RESULT *pResults, IN LPWSTR pswzNetbiosDomainName, IN LPWSTR pswzDnsDomainName, IN BOOL bPrimaryDomain ); //used in DCListTest and TrustTest NTSTATUS NettestSamConnect( IN NETDIAG_PARAMS *pParams, IN LPWSTR DcName, OUT PSAM_HANDLE SamServerHandle ); /*--------------------------------------------------------------------------- Misc. utilities ---------------------------------------------------------------------------*/ HRESULT GetComputerNameInfo(NETDIAG_PARAMS *pParams, NETDIAG_RESULT *pResults); HRESULT GetDNSInfo(NETDIAG_PARAMS *pParams, NETDIAG_RESULT *pResults); HRESULT GetNetBTParameters(IN NETDIAG_PARAMS *pParams, IN OUT NETDIAG_RESULT *pResults); LPTSTR NetStatusToString( NET_API_STATUS NetStatus ); LPTSTR Win32ErrorToString(DWORD Id); #define DimensionOf(rg) (sizeof(rg) / sizeof(*rg)) /*--------------------------------------------------------------------------- Error handling utilities ---------------------------------------------------------------------------*/ #define CheckHr(x) \ if ((hr = (x)) & (0x80000000)) \ goto Error; #define CheckErr(x) \ if ((hr = HResultFromWin32(x)) & (0x80000000)) \ goto Error; HRESULT HResultFromWin32(DWORD dwErr); #define FHrSucceeded(hr) SUCCEEDED(hr) #define FHrOK(hr) ((hr) == S_OK) #define FHrFailed(hr) FAILED(hr) #define hrOK S_OK // if hr failed, assign hr and ids contect to the structure, and goto L_ERR #define CHK_HR_CONTEXT(w, h, IDS){ \ if (FAILED(h)) {\ (w).hr = (h), (w).idsContext = (IDS); goto L_ERR;}} /*!-------------------------------------------------------------------------- FormatError This function will lookup the error message associated with the HRESULT. Author: KennT ---------------------------------------------------------------------------*/ void FormatError(HRESULT hr, TCHAR *pszBuffer, UINT cchBuffer); void FormatWin32Error(DWORD dwErr, TCHAR *pszBuffer, UINT cchBuffer); /*--------------------------------------------------------------------------- Tracing utilites ---------------------------------------------------------------------------*/ void TraceBegin(); void TraceEnd(); void TraceError(LPCSTR pszString, HRESULT hr); void TraceResult(LPCSTR pszString, HRESULT hr); void TraceSz(LPCSTR pszString); /*--------------------------------------------------------------------------- Character utilities ---------------------------------------------------------------------------*/ LPTSTR MapGuidToAdapterName(LPCTSTR AdapterGuid); LPTSTR MapGuidToServiceName(LPCTSTR AdapterGuid); LPWSTR MapGuidToServiceNameW(LPCWSTR AdapterGuid); /*--------------------------------------------------------------------------- Memory allocation utilities ---------------------------------------------------------------------------*/ #define Malloc(_cb) malloc(_cb) #define Realloc(_pv, _cb) realloc(_pv, _cb) #define Free(_pv) free(_pv) #endif