windows-nt/Source/XPSP1/NT/admin/netui/common/h/domenum.hxx
2020-09-26 16:20:57 +08:00

278 lines
7.4 KiB
C++

/**********************************************************************/
/** Microsoft LAN Manager **/
/** Copyright(c) Microsoft Corp., 1990, 1991 **/
/**********************************************************************/
/*
domenum.hxx
This file contains the class declaration for the BROWSE_DOMAIN_ENUM
enumerator class. It also contains the class declaration for the
BROWSE_DOMAIN_INFO class, which is the return "type" of the domain
enumerator.
The BROWSE_DOMAIN_ENUM class is used to enumerate domains. A number
of bit flags are passed to the object's constructor to control the
domain enumeration.
BROWSE_DOMAIN_ENUM is quite different from the LM_ENUM class of
enumerators. All of the "grunt" work is performed in the constructor
(there is no GetInfo method).
NOTE: This code is based on an initial design by Yi-HsinS.
FILE HISTORY:
KeithMo 22-Jul-1992 Created.
Yi-HsinS 12-Nov-1992 Add a parameter to GetWorkgroupDomains
KeithMo 16-Nov-1992 Removed the GetWorkgroupDomains parameter
*/
#ifndef _DOMENUM_HXX
#define _DOMENUM_HXX
#include "domenum.h" // get the BROWSE_*_DOMAIN[S] bitflags
#include "slist.hxx" // for SLIST & ITER_SLIST & macros
#include "string.hxx"
//
// Forward references.
//
DLL_CLASS BROWSE_DOMAIN_INFO;
DLL_CLASS BROWSE_DOMAIN_ENUM;
/*************************************************************************
NAME: BROWSE_DOMAIN_INFO
SYNOPSIS: This is the return "type" of the domain enumerator.
INTERFACE: BROWSE_DOMAIN_INFO - Class constructor.
~BROWSE_DOMAIN_INFO - Class destructor.
QueryDomainName - Returns the name of the
current domain.
QueryDomainSources - Returns the "sources" of the
current domain. This will be
one or more of the
BROWSE_*_DOMAIN[S] bitflags.
USES: NLS_STR
HISTORY:
KeithMo 22-Jul-1992 Created.
**************************************************************************/
DLL_CLASS BROWSE_DOMAIN_INFO : public BASE
{
friend class BROWSE_DOMAIN_ENUM;
private:
//
// The domain name & sources.
//
const NLS_STR _nlsDomainName;
const TCHAR * _pszDomainName;
ULONG _maskDomainSources;
//
// This private method is should only be invoked by
// BROWSE_DOMAIN_ENUM::AddDomainToList.
//
VOID AddDomainSource( ULONG maskDomainSource )
{ _maskDomainSources |= maskDomainSource; }
public:
//
// Usual constructor/destructor goodies.
//
BROWSE_DOMAIN_INFO( const TCHAR * pszDomainName,
ULONG maskDomainSources );
~BROWSE_DOMAIN_INFO( VOID );
//
// Accessors.
//
const TCHAR * QueryDomainName( VOID ) const
{ return _pszDomainName; }
ULONG QueryDomainSources( VOID ) const
{ return _maskDomainSources; }
}; // class BROWSE_DOMAIN_INFO
DECL_SLIST_OF( BROWSE_DOMAIN_INFO, DLL_BASED );
//
// This will make life a little easier...
//
typedef ITER_SL_OF( BROWSE_DOMAIN_INFO ) BDI_ITER;
/*************************************************************************
NAME: BROWSE_DOMAIN_ENUM
SYNOPSIS: This class is used to enumerate domains.
INTERFACE: BROWSE_DOMAIN_ENUM - Class constructor.
~BROWSE_DOMAIN_ENUM - Class destructor.
Next - Returns the next domain in the
list.
Reset - Resets to the beginning of the
domain list.
FindFirst/FindNext - Implements a simple find first/
find next strategy.
QueryDomainCount - Returns the number of unique
domains in the domain list.
QuerySourcesUnion - Returns the "union" of all
domain sources masks in the
domain list.
PARENT: BASE
USES: BROWSE_DOMAIN_INFO
SLIST
ITER_SLIST
NLS_STR
HISTORY:
KeithMo 22-Jul-1992 Created.
**************************************************************************/
DLL_CLASS BROWSE_DOMAIN_ENUM : public BASE
{
private:
//
// _slDomains contains the list of enumerated domains.
// _iterDomains is an iterator used to scan the list.
//
SLIST_OF( BROWSE_DOMAIN_INFO ) _slDomains;
BDI_ITER _iterDomains;
//
// This NLS_STR contains the name of the local machine.
//
NLS_STR _nlsComputerName;
//
// This will contain the union of all domain sources
// in the domain list.
//
ULONG _maskSourcesUnion;
//
// These workers manipulate the domain list.
//
APIERR AddDomainToList( const TCHAR * pszDomainName,
ULONG maskDomainSource,
BOOL fBrowserList = FALSE );
//
// These worker routines retrieve domains from the various
// domain sources.
//
APIERR GetLanmanDomains( ULONG maskDomainSources );
APIERR GetTrustingDomains( VOID );
APIERR GetWorkgroupDomains( VOID );
APIERR GetLogonDomainDC( NLS_STR * pnlsLogonDC );
APIERR DetermineIfDomainMember( BOOL * pfIsDomainMember );
public:
//
// The constructor is responsible for invoking all of the API
// necessary to fulfill the enumeration. If successful, then
// _slDomains will contain the list of domains and _iterDomains
// will be reset to the beginning of the list.
//
// If pmaskSuccessful is given, then it will receive a bitmask of
// successful domain sources. For each 1 bit in maskDomainSources,
// if the domain source successfully retrieved a domain, then the
// corresponding bit in *pmaskSuccessful is set.
//
BROWSE_DOMAIN_ENUM( ULONG maskDomainSources = BROWSE_LM2X_DOMAINS,
ULONG * pmaskSuccessful = NULL );
~BROWSE_DOMAIN_ENUM( VOID );
//
// Returns the next domain in the list, or NULL if we're at
// the end of the list.
//
const BROWSE_DOMAIN_INFO * Next( VOID )
{ return _iterDomains.Next(); }
const BROWSE_DOMAIN_INFO * operator()( VOID )
{ return Next(); }
//
// Resets the enumerator to the beginning of the list.
//
VOID Reset( VOID )
{ _iterDomains.Reset(); }
//
// These methods implement a simple (minded) FindFirst/FindNext
// strategy for the enumerator.
//
const BROWSE_DOMAIN_INFO * FindFirst( ULONG maskDomainSources );
const BROWSE_DOMAIN_INFO * FindNext( ULONG maskDomainSources );
//
// Returns the number of unique domain names in the list.
//
UINT QueryDomainCount( VOID )
{ return _slDomains.QueryNumElem(); }
//
// Returns a "union" of all sources in the domain list.
//
ULONG QuerySourcesUnion( VOID ) const
{ return _maskSourcesUnion; }
}; // class BROWSE_DOMAIN_ENUM
#endif // _DOMENUM_HXX