Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/**********************************************************************/ /** 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
|