/*++ Copyright (c) 1991-1992 Microsoft Corporation Module Name: DispSrv.c Abstract: This module contains a routine to do a formatted dump of a server info structure. Author: John Rogers (JohnRo) 13-Jun-1991 Environment: Portable to any flat, 32-bit environment. (Uses Win32 typedefs.) Requires ANSI C extensions: slash-slash comments, long external names. Revision History: 13-Jun-1991 JohnRo Extracted from RxTest code. 14-Jun-1991 JohnRo Added support for info levels 0 and 3. 14-Jun-1991 JohnRo Do formatted display of server type for all info levels. Ditto for lanman version number. 19-Jun-1991 JohnRo Changed sv102_disc to be signed, and changed SV_NODISC to be 32-bits. Added svX_licenses support. 25-Jul-1991 JohnRo Wksta debug support. 19-Aug-1991 JohnRo PC-LINT found a portability problem. 30-Sep-1991 JohnRo Work toward UNICODE. 26-Aug-1992 JohnRo RAID 4463: NetServerGetInfo(level 3) to downlevel: assert in convert.c. --*/ // These must be included first: #include // IN, DWORD, etc. #include // NET_API_STATUS. // These may be included in any order: #include // SERVER_INFO_1, etc. #include // SERVER_INFO_100, SV_TYPE_ equates, etc. #include // DBGSTATIC, NetpDbgDisplay routines. #include // STRCAT(), STRCPY(). #if DBG DBGSTATIC VOID NetpDbgDisplayDisconnectTime( IN LONG DiscTime ) { NetpDbgDisplayTag( "Idle session time (min)" ); if (DiscTime == SV_NODISC) { NetpKdPrint(("infinite\n" )); } else { NetpKdPrint((FORMAT_LONG "\n", DiscTime )); } } // NetpDbgDisplayDisconnectTime DBGSTATIC VOID NetpDbgDisplayLicenses( IN DWORD MajorVersion, IN DWORD Licenses ) { // BUGBUG: Eventually, use stuff to handle unlimited and other // types of licenses. This is indicated in MajorVersion. UNREFERENCED_PARAMETER( MajorVersion ); NetpDbgDisplayDword( "Licenses (NOT users)", Licenses ); } // NetpDbgDisplayLicenses DBGSTATIC VOID NetpDbgDisplayServerType( IN DWORD Type ) { // Longest name is "POTENTIAL_BROWSER" (17 chars) TCHAR str[(17+2)*17]; // 17 chars per name, 2 spaces, for 17 names. str[0] = '\0'; #define DO(name) \ if (Type & SV_TYPE_ ## name) { \ (void) STRCAT(str, (LPTSTR) TEXT(# name)); \ (void) STRCAT(str, (LPTSTR) TEXT(" ")); \ Type &= ~(SV_TYPE_ ## name); \ } NetpAssert(Type != 0); DO(WORKSTATION) DO(SERVER) DO(SQLSERVER) DO(DOMAIN_CTRL) DO(DOMAIN_BAKCTRL) DO(TIME_SOURCE) DO(AFP) DO(NOVELL) DO(DOMAIN_MEMBER) DO(PRINTQ_SERVER) DO(DIALIN_SERVER) DO(XENIX_SERVER) DO(NT) DO(POTENTIAL_BROWSER) DO(BACKUP_BROWSER) DO(MASTER_BROWSER) DO(DOMAIN_MASTER) NetpDbgDisplayString("server type", str); if (Type != 0) { NetpDbgDisplayDwordHex( "UNEXPECTED TYPE BIT(S)", Type ); } } // NetpDbgDisplayServerType VOID NetpDbgDisplayServerInfo( IN DWORD Level, IN LPVOID Info ) { NetpKdPrint(("server info (level " FORMAT_DWORD ") at " FORMAT_LPVOID ":\n", Level, (LPVOID) Info)); NetpAssert(Info != NULL); switch (Level) { case 0 : { LPSERVER_INFO_0 psv0 = Info; NetpDbgDisplayString("name", psv0->sv0_name); } break; case 1 : { LPSERVER_INFO_1 psv1 = Info; NetpDbgDisplayString("name", psv1->sv1_name); NetpDbgDisplayLanManVersion( psv1->sv1_version_major, psv1->sv1_version_minor); NetpDbgDisplayServerType( psv1->sv1_type ); NetpDbgDisplayString("comment", psv1->sv1_comment); } break; case 2 : { LPSERVER_INFO_2 psv2 = Info; NetpDbgDisplayString("name", psv2->sv2_name); NetpDbgDisplayLanManVersion( psv2->sv2_version_major, psv2->sv2_version_minor); NetpDbgDisplayServerType( psv2->sv2_type ); NetpDbgDisplayString("comment", psv2->sv2_comment); NetpDbgDisplayTimestamp("ulist_mtime", psv2->sv2_ulist_mtime); NetpDbgDisplayTimestamp("glist_mtime", psv2->sv2_glist_mtime); NetpDbgDisplayTimestamp("alist_mtime", psv2->sv2_alist_mtime); NetpDbgDisplayDword("users", psv2->sv2_users); NetpDbgDisplayDisconnectTime( psv2->sv2_disc); NetpDbgDisplayString("alerts", psv2->sv2_alerts); NetpDbgDisplayDword("security", psv2->sv2_security); NetpDbgDisplayDword("auditing", psv2->sv2_auditing); NetpDbgDisplayDword("numadmin", psv2->sv2_numadmin); NetpDbgDisplayDword("lanmask", psv2->sv2_lanmask); NetpDbgDisplayDword("hidden", psv2->sv2_hidden); NetpDbgDisplayDword("announce", psv2->sv2_announce); NetpDbgDisplayDword("anndelta", psv2->sv2_anndelta); NetpDbgDisplayString("guestacct", psv2->sv2_guestacct); NetpDbgDisplayLicenses( psv2->sv2_version_major, psv2->sv2_licenses ); NetpDbgDisplayString("userpath", psv2->sv2_userpath); NetpDbgDisplayDword("chdevs", psv2->sv2_chdevs); NetpDbgDisplayDword("chdevq", psv2->sv2_chdevq); NetpDbgDisplayDword("chdevjobs", psv2->sv2_chdevjobs); NetpDbgDisplayDword("connections", psv2->sv2_connections); NetpDbgDisplayDword("shares", psv2->sv2_shares); NetpDbgDisplayDword("openfiles", psv2->sv2_openfiles); NetpDbgDisplayDword("sessopens", psv2->sv2_sessopens); NetpDbgDisplayDword("sessvcs", psv2->sv2_sessvcs); NetpDbgDisplayDword("sessreqs", psv2->sv2_sessreqs); NetpDbgDisplayDword("opensearch", psv2->sv2_opensearch); NetpDbgDisplayDword("activelocks", psv2->sv2_activelocks); NetpDbgDisplayDword("numreqbuf", psv2->sv2_numreqbuf); NetpDbgDisplayDword("sizreqbuf", psv2->sv2_sizreqbuf); NetpDbgDisplayDword("numbigbuf", psv2->sv2_numbigbuf); NetpDbgDisplayDword("numfiletasks", psv2->sv2_numfiletasks); NetpDbgDisplayDword("alertsched", psv2->sv2_alertsched); NetpDbgDisplayDword("erroralert", psv2->sv2_erroralert); NetpDbgDisplayDword("logonalert", psv2->sv2_logonalert); NetpDbgDisplayDword("accessalert", psv2->sv2_accessalert); NetpDbgDisplayDword("diskalert", psv2->sv2_diskalert); NetpDbgDisplayDword("netioalert", psv2->sv2_netioalert); NetpDbgDisplayDword("maxauditsz", psv2->sv2_maxauditsz); NetpDbgDisplayString("srvheuristics", psv2->sv2_srvheuristics); } break; case 3 : { LPSERVER_INFO_3 psv3 = Info; NetpDbgDisplayString("name", psv3->sv3_name); NetpDbgDisplayLanManVersion( psv3->sv3_version_major, psv3->sv3_version_minor); NetpDbgDisplayServerType( psv3->sv3_type ); NetpDbgDisplayString("comment", psv3->sv3_comment); NetpDbgDisplayTimestamp("ulist_mtime", psv3->sv3_ulist_mtime); NetpDbgDisplayTimestamp("glist_mtime", psv3->sv3_glist_mtime); NetpDbgDisplayTimestamp("alist_mtime", psv3->sv3_alist_mtime); NetpDbgDisplayDword("users", psv3->sv3_users); NetpDbgDisplayDisconnectTime( psv3->sv3_disc ); NetpDbgDisplayString("alerts", psv3->sv3_alerts); NetpDbgDisplayDword("security", psv3->sv3_security); NetpDbgDisplayDword("auditing", psv3->sv3_auditing); NetpDbgDisplayDword("numadmin", psv3->sv3_numadmin); NetpDbgDisplayDword("lanmask", psv3->sv3_lanmask); NetpDbgDisplayDword("hidden", psv3->sv3_hidden); NetpDbgDisplayDword("announce", psv3->sv3_announce); NetpDbgDisplayDword("anndelta", psv3->sv3_anndelta); NetpDbgDisplayString("guestacct", psv3->sv3_guestacct); NetpDbgDisplayLicenses( psv3->sv3_version_major, psv3->sv3_licenses ); NetpDbgDisplayString("userpath", psv3->sv3_userpath); NetpDbgDisplayDword("chdevs", psv3->sv3_chdevs); NetpDbgDisplayDword("chdevq", psv3->sv3_chdevq); NetpDbgDisplayDword("chdevjobs", psv3->sv3_chdevjobs); NetpDbgDisplayDword("connections", psv3->sv3_connections); NetpDbgDisplayDword("shares", psv3->sv3_shares); NetpDbgDisplayDword("openfiles", psv3->sv3_openfiles); NetpDbgDisplayDword("sessopens", psv3->sv3_sessopens); NetpDbgDisplayDword("sessvcs", psv3->sv3_sessvcs); NetpDbgDisplayDword("sessreqs", psv3->sv3_sessreqs); NetpDbgDisplayDword("opensearch", psv3->sv3_opensearch); NetpDbgDisplayDword("activelocks", psv3->sv3_activelocks); NetpDbgDisplayDword("numreqbuf", psv3->sv3_numreqbuf); NetpDbgDisplayDword("sizreqbuf", psv3->sv3_sizreqbuf); NetpDbgDisplayDword("numbigbuf", psv3->sv3_numbigbuf); NetpDbgDisplayDword("numfiletasks", psv3->sv3_numfiletasks); NetpDbgDisplayDword("alertsched", psv3->sv3_alertsched); NetpDbgDisplayDword("erroralert", psv3->sv3_erroralert); NetpDbgDisplayDword("logonalert", psv3->sv3_logonalert); NetpDbgDisplayDword("accessalert", psv3->sv3_accessalert); NetpDbgDisplayDword("diskalert", psv3->sv3_diskalert); NetpDbgDisplayDword("netioalert", psv3->sv3_netioalert); NetpDbgDisplayDword("maxauditsz", psv3->sv3_maxauditsz); NetpDbgDisplayString("srvheuristics", psv3->sv3_srvheuristics); NetpDbgDisplayDword("auditedevents", psv3->sv3_auditedevents); NetpDbgDisplayDword("autoprofile", psv3->sv3_autoprofile); NetpDbgDisplayString("autopath", psv3->sv3_autopath); } break; case 100 : { LPSERVER_INFO_100 psv100 = Info; NetpDbgDisplayPlatformId( psv100->sv100_platform_id ); NetpDbgDisplayString("Server Name", psv100->sv100_name); } break; case 101 : { LPSERVER_INFO_101 psv101 = Info; NetpDbgDisplayPlatformId( psv101->sv101_platform_id ); NetpDbgDisplayString("Server Name", psv101->sv101_name); NetpDbgDisplayLanManVersion( psv101->sv101_version_major, psv101->sv101_version_minor); NetpDbgDisplayServerType( psv101->sv101_type ); NetpDbgDisplayString( "Server Comment", psv101->sv101_comment); } break; case 102 : { LPSERVER_INFO_102 psv102 = Info; NetpDbgDisplayPlatformId( psv102->sv102_platform_id ); NetpDbgDisplayString("Server Name", psv102->sv102_name); NetpDbgDisplayLanManVersion( psv102->sv102_version_major, psv102->sv102_version_minor ); NetpDbgDisplayServerType( psv102->sv102_type ); NetpDbgDisplayString( "Server Comment", psv102->sv102_comment ); NetpDbgDisplayDword( "users", psv102->sv102_users ); NetpDbgDisplayBool( "Server hidden", psv102->sv102_hidden ); NetpDbgDisplayDword( "announce", psv102->sv102_announce ); NetpDbgDisplayDword( "announce delta", psv102->sv102_anndelta ); NetpDbgDisplayLicenses( psv102->sv102_version_major, psv102->sv102_licenses ); NetpDbgDisplayString( "user path", psv102->sv102_userpath ); } break; case 402 : { LPSERVER_INFO_402 psv402 = Info; NetpDbgDisplayTimestamp("ulist mtime", psv402->sv402_ulist_mtime); NetpDbgDisplayTimestamp("glist mtime", psv402->sv402_glist_mtime); NetpDbgDisplayTimestamp("alist mtime", psv402->sv402_alist_mtime); NetpDbgDisplayString("alerts", psv402->sv402_alerts); NetpDbgDisplayDword("security", psv402->sv402_security); NetpDbgDisplayDword("numadmin", psv402->sv402_numadmin); NetpDbgDisplayDwordHex("lanmask", psv402->sv402_lanmask); NetpDbgDisplayString("guestacct", psv402->sv402_guestacct); NetpDbgDisplayDword("chdevs", psv402->sv402_chdevs); NetpDbgDisplayDword("chdevq", psv402->sv402_chdevq); NetpDbgDisplayDword("chdevjobs", psv402->sv402_chdevjobs); NetpDbgDisplayDword("connections", psv402->sv402_connections); NetpDbgDisplayDword("shares", psv402->sv402_shares); NetpDbgDisplayDword("openfiles", psv402->sv402_openfiles); NetpDbgDisplayDword("sessopens", psv402->sv402_sessopens); NetpDbgDisplayDword("sessvcs", psv402->sv402_sessvcs); NetpDbgDisplayDword("sessreqs", psv402->sv402_sessreqs); NetpDbgDisplayDword("opensearch", psv402->sv402_opensearch); NetpDbgDisplayDword("activelocks", psv402->sv402_activelocks); NetpDbgDisplayDword("numreqbuf", psv402->sv402_numreqbuf); NetpDbgDisplayDword("sizreqbuf", psv402->sv402_sizreqbuf); NetpDbgDisplayDword("numbigbuf", psv402->sv402_numbigbuf); NetpDbgDisplayDword("numfiletasks", psv402->sv402_numfiletasks); NetpDbgDisplayDword("alertsched", psv402->sv402_alertsched); NetpDbgDisplayDword("erroralert", psv402->sv402_erroralert); NetpDbgDisplayDword("logonalert", psv402->sv402_logonalert); NetpDbgDisplayDword("diskalert", psv402->sv402_diskalert); NetpDbgDisplayDword("accessalert", psv402->sv402_accessalert); NetpDbgDisplayDword("diskalert", psv402->sv402_diskalert); NetpDbgDisplayDword("netioalert", psv402->sv402_netioalert); NetpDbgDisplayDword("maxauditsz", psv402->sv402_maxauditsz); NetpDbgDisplayString("srvheuristics", psv402->sv402_srvheuristics); } break; case 403 : { LPSERVER_INFO_403 psv403 = Info; NetpDbgDisplayTimestamp("ulist mtime", psv403->sv403_ulist_mtime); NetpDbgDisplayTimestamp("glist mtime", psv403->sv403_glist_mtime); NetpDbgDisplayTimestamp("alist mtime", psv403->sv403_alist_mtime); NetpDbgDisplayString("alerts", psv403->sv403_alerts); NetpDbgDisplayDword("security", psv403->sv403_security); NetpDbgDisplayDword("numadmin", psv403->sv403_numadmin); NetpDbgDisplayDwordHex("lanmask", psv403->sv403_lanmask); NetpDbgDisplayString("guestacct", psv403->sv403_guestacct); NetpDbgDisplayDword("chdevs", psv403->sv403_chdevs); NetpDbgDisplayDword("chdevq", psv403->sv403_chdevq); NetpDbgDisplayDword("chdevjobs", psv403->sv403_chdevjobs); NetpDbgDisplayDword("connections", psv403->sv403_connections); NetpDbgDisplayDword("shares", psv403->sv403_shares); NetpDbgDisplayDword("openfiles", psv403->sv403_openfiles); NetpDbgDisplayDword("sessopens", psv403->sv403_sessopens); NetpDbgDisplayDword("sessvcs", psv403->sv403_sessvcs); NetpDbgDisplayDword("sessreqs", psv403->sv403_sessreqs); NetpDbgDisplayDword("opensearch", psv403->sv403_opensearch); NetpDbgDisplayDword("activelocks", psv403->sv403_activelocks); NetpDbgDisplayDword("numreqbuf", psv403->sv403_numreqbuf); NetpDbgDisplayDword("sizreqbuf", psv403->sv403_sizreqbuf); NetpDbgDisplayDword("numbigbuf", psv403->sv403_numbigbuf); NetpDbgDisplayDword("numfiletasks", psv403->sv403_numfiletasks); NetpDbgDisplayDword("alertsched", psv403->sv403_alertsched); NetpDbgDisplayDword("erroralert", psv403->sv403_erroralert); NetpDbgDisplayDword("logonalert", psv403->sv403_logonalert); NetpDbgDisplayDword("diskalert", psv403->sv403_diskalert); NetpDbgDisplayDword("accessalert", psv403->sv403_accessalert); NetpDbgDisplayDword("diskalert", psv403->sv403_diskalert); NetpDbgDisplayDword("netioalert", psv403->sv403_netioalert); NetpDbgDisplayDword("maxauditsz", psv403->sv403_maxauditsz); NetpDbgDisplayString("srvheuristics", psv403->sv403_srvheuristics); NetpDbgDisplayDword("auditedevents", psv403->sv403_auditedevents); NetpDbgDisplayDword("autoprofile", psv403->sv403_autoprofile); NetpDbgDisplayString("autopath", psv403->sv403_autopath); } break; // BUGBUG: RpcXlate doesn't need support for info levels 502, 503, 599. // Feel free to add them here if you need them. default : NetpAssert(FALSE); } } // NetpDbgDisplayServerInfo #else // // This routine is exported from netapi32.dll. We want it to still // be there in the free build, so checked binaries will run on a free // build. The following undef is to get rid of the macro that causes // it to not be called in free builds. // #undef NetpDbgDisplayServerInfo VOID NetpDbgDisplayServerInfo( IN DWORD Level, IN LPVOID Info ) { return; } #endif