278 lines
7.4 KiB
C++
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
|
|
|