/**********************************************************************/ /** Microsoft LAN Manager **/ /** Copyright(c) Microsoft Corp., 1990, 1991 **/ /**********************************************************************/ /* lmoesrv3.hxx This file contains the class declarations for the TRIPLE_SERVER_ENUM class and its associated iterator classes. FILE HISTORY: KeithMo 17-Mar-1992 Created for the Server Manager. */ #ifndef _LMOESRV3_HXX_ #define _LMOESRV3_HXX_ #include "lmoent.hxx" #include "lmoeusr.hxx" #include "lmoesrv.hxx" // // Change this manifest to 1 if we need to manually insert // the PDC into the list of known server trust accounts. // // This was necessary in early builds when the PDCs did // not have SAM machine accounts. Now that they do, we // don't need to manually insert the PDC into our list // of known servers. // #define FORCE_PDC 0 // // This enum represents the "type" of a target server. // typedef enum _SERVER_TYPE { ActiveNtServerType, InactiveNtServerType, ActiveLmServerType, InactiveLmServerType, WfwServerType, Windows95ServerType, UnknownServerType } SERVER_TYPE, * PSERVER_TYPE; // // This enum represents the "role" of a target server. // typedef enum _SERVER_ROLE { PrimaryRole, DeadPrimaryRole, BackupRole, DeadBackupRole, WkstaRole, ServerRole, LmServerRole, UnknownRole, WkstaOrServerRole } SERVER_ROLE, * PSERVER_ROLE; // // This structure is used when merging the servers from // NT_MACHINE_ENUM with those from USER0_ENUM. // typedef struct _KNOWN_SERVER_INFO { const TCHAR * pszName; SERVER_TYPE ServerType; SERVER_ROLE ServerRole; } KNOWN_SERVER_INFO, * PKNOWN_SERVER_INFO; // // This structure is used when merging the KNOWN_SERVERS list // with those from SERVER1_ENUM. // typedef struct _TRIPLE_SERVER_INFO { const TCHAR * pszName; const TCHAR * pszComment; SERVER_TYPE ServerType; SERVER_ROLE ServerRole; UINT verMajor; UINT verMinor; ULONG TypeMask; } TRIPLE_SERVER_INFO, * PTRIPLE_SERVER_INFO; /************************************************************************* NAME: TRIPLE_SERVER_ENUM SYNOPSIS: TRIPLE_SERVER_ENUM is a "special" server enumerator used (mainly) by the Server Manager. This enumerator will enumerator servers from three different sources to get the maximum amount information about servers in a domain. INTERFACE: TRIPLE_SERVER_ENUM - Class constructor. CallAPI - Invokes the enumeration API(s). PARENT: LM_ENUM HISTORY: KeithMo 17-Mar-1992 Created for the Server Manager. **************************************************************************/ DLL_CLASS TRIPLE_SERVER_ENUM : public LM_ENUM { private: // // These data members point to the "standard" enumerators // used to create this enumerator's data. // NT_MACHINE_ENUM * _pmach; USER0_ENUM * _puser; SERVER1_ENUM * _psrv; #if FORCE_PDC DOMAIN_DISPLAY_MACHINE _ddm; // fake entry for PDC #endif // FORCE_PDC // // We'll use these to keep a copy of the domain & server names. // NLS_STR _nlsDomainName; NLS_STR _nlsPrimaryName; const TCHAR * _pszPrimaryNoWhacks; BOOL _fIsNtPrimary; // // These BOOLs are used to filter the machines // produced by this enumerator. // BOOL _fAllowWkstas; BOOL _fAllowServers; BOOL _fAccountsOnly; // // This flag is set to TRUE if the target domain's PDC // is available. // BOOL _fPDCAvailable; // // This virtual callback invokes any necessary API(s). // virtual APIERR CallAPI( BYTE ** ppbBuffer, UINT * pcEntriesRead ); // // These worker methods are used during the merges. // VOID MapNtToKnown( const DOMAIN_DISPLAY_MACHINE * pddm, KNOWN_SERVER_INFO * pKnownObj ); VOID MapLmToKnown( const struct user_info_0 * pui0, KNOWN_SERVER_INFO * pKnownObj ); VOID MapKnownToTriple( const KNOWN_SERVER_INFO * pKnownObj, TRIPLE_SERVER_INFO * pTripleObj ); VOID MapBrowserToTriple( const struct server_info_1 * psi1, TRIPLE_SERVER_INFO * pTripleObj ); VOID CombineIntoTriple( const struct server_info_1 * psi1, const KNOWN_SERVER_INFO * pKnownObj, TRIPLE_SERVER_INFO * pTripleObj ); SERVER_ROLE MapTypeMaskToRole( ULONG TypeMask ) const; SERVER_TYPE MapTypeMaskToType( ULONG TypeMask ) const; // // These static methods are used by qsort() to sort various buffers. // static int __cdecl CompareNtServers( const void * p1, const void * p2 ); static int __cdecl CompareLmServers( const void * p1, const void * p2 ); static int __cdecl CompareBrowserServers( const void * p1, const void * p2 ); public: // // Usual constructor/destructor goodies. // TRIPLE_SERVER_ENUM( const TCHAR * pszDomainName, const TCHAR * pszPrimaryName, BOOL fIsNtPrimary, BOOL fAllowWkstas = TRUE, BOOL fAllowServers = TRUE, BOOL fAccountsOnly = FALSE ); ~TRIPLE_SERVER_ENUM( VOID ); }; // class TRIPLE_SERVER_ENUM class TRIPLE_SERVER_ITER; // Forward reference. /************************************************************************* NAME: TRIPLE_SERVER_ENUM_OBJ SYNOPSIS: This is basically the return type from the TRIPLE_SERVER_ENUM_ITER iterator. INTERFACE: QueryName - Returns the server name. QueryComment - Returns the server comment. QueryType - Returns the server "type" (NT vs LM). QueryRole - Returns the server "role" (PRIMARY vs SERVER vs WKSTA). QueryMajorVer - Returns the major OS version. QueryMinorVer - Returns the minor OS version. PARENT: ENUM_OBJ_BASE HISTORY: KeithMo 17-Mar-1992 Created for the Server Manager. **************************************************************************/ DLL_CLASS TRIPLE_SERVER_ENUM_OBJ : public ENUM_OBJ_BASE { public: // // Provide properly-casted buffer Query/Set methods. // const TRIPLE_SERVER_INFO * QueryBufferPtr( VOID ) const { return (const TRIPLE_SERVER_INFO *)ENUM_OBJ_BASE::QueryBufferPtr(); } VOID SetBufferPtr( const TRIPLE_SERVER_INFO * pBuffer ) { ENUM_OBJ_BASE :: SetBufferPtr( (const BYTE *)pBuffer ); } // // Accessors. // DECLARE_ENUM_ACCESSOR( QueryName, const TCHAR *, pszName ); DECLARE_ENUM_ACCESSOR( QueryComment, const TCHAR *, pszComment ); DECLARE_ENUM_ACCESSOR( QueryType, SERVER_TYPE, ServerType ); DECLARE_ENUM_ACCESSOR( QueryRole, SERVER_ROLE, ServerRole ); DECLARE_ENUM_ACCESSOR( QueryMajorVer, UINT, verMajor ); DECLARE_ENUM_ACCESSOR( QueryMinorVer, UINT, verMinor ); DECLARE_ENUM_ACCESSOR( QueryTypeMask, ULONG, TypeMask ); }; // class TRIPLE_SERVER_ENUM_OBJ DECLARE_LM_ENUM_ITER_OF( TRIPLE_SERVER, TRIPLE_SERVER_INFO ); #endif // _LMOESRV3_HXX_