173 lines
4.4 KiB
C++
173 lines
4.4 KiB
C++
|
/**********************************************************************/
|
||
|
/** Microsoft LAN Manager **/
|
||
|
/** Copyright(c) Microsoft Corp., 1990, 1991 **/
|
||
|
/**********************************************************************/
|
||
|
|
||
|
/*
|
||
|
lmoesu.hxx
|
||
|
|
||
|
This file contains the class declarations for the SAM_USER_ENUM
|
||
|
class and its associated iterator classes.
|
||
|
|
||
|
|
||
|
FILE HISTORY:
|
||
|
KeithMo 13-Apr-1992 Created for the Server Manager.
|
||
|
|
||
|
*/
|
||
|
|
||
|
#ifndef _LMOESU_HXX_
|
||
|
#define _LMOESU_HXX_
|
||
|
|
||
|
#ifndef WIN32
|
||
|
#error NT enumerator requires WIN32!
|
||
|
#endif // WIN32
|
||
|
|
||
|
#include "lmoersm.hxx"
|
||
|
#include "uintsam.hxx"
|
||
|
|
||
|
|
||
|
/*************************************************************************
|
||
|
|
||
|
NAME: SAM_USER_ENUM
|
||
|
|
||
|
SYNOPSIS: The SAM_USER_ENUM enumerator is used to enumerate
|
||
|
the users in a SAM domain.
|
||
|
|
||
|
INTERFACE: SAM_USER_ENUM - Class constructor.
|
||
|
|
||
|
~SAM_USER_ENUM - Class destructor.
|
||
|
|
||
|
CallAPI - Invokes the enumeration API.
|
||
|
|
||
|
PARENT: LM_RESUME_ENUM
|
||
|
|
||
|
HISTORY:
|
||
|
KeithMo 13-Apr-1992 Created for the Server Manager.
|
||
|
|
||
|
**************************************************************************/
|
||
|
DLL_CLASS SAM_USER_ENUM : public LM_RESUME_ENUM
|
||
|
{
|
||
|
private:
|
||
|
|
||
|
//
|
||
|
// The SamEnumerateUsersInDomain() resume key.
|
||
|
//
|
||
|
|
||
|
SAM_ENUMERATE_HANDLE _ResumeKey;
|
||
|
|
||
|
//
|
||
|
// This SAM_DOMAIN object represents the target server on which
|
||
|
// the enumeration will be performed.
|
||
|
//
|
||
|
|
||
|
const SAM_DOMAIN * _psamdomain;
|
||
|
|
||
|
//
|
||
|
// This is a wrapper around the SAM_RID_ENUMERATION structure
|
||
|
// (as returned by SAM_DOMAIN::EnumerateUsers).
|
||
|
//
|
||
|
|
||
|
SAM_RID_ENUMERATION_MEM _samrem;
|
||
|
|
||
|
//
|
||
|
// This is the account control mask used to filter the
|
||
|
// enumeration.
|
||
|
//
|
||
|
|
||
|
ULONG _lAccountControl;
|
||
|
|
||
|
//
|
||
|
// This virtual callback invokes the SamEnumerateUsersInDomain() API
|
||
|
// through SAM_DOMAIN::EnumerateUsers().
|
||
|
//
|
||
|
|
||
|
virtual APIERR CallAPI( BOOL fRestartEnum,
|
||
|
BYTE ** ppbBuffer,
|
||
|
UINT * pcEntriesRead );
|
||
|
|
||
|
protected:
|
||
|
|
||
|
//
|
||
|
// Destroy the buffer with ::SamFreeMemory().
|
||
|
//
|
||
|
|
||
|
virtual VOID FreeBuffer( BYTE ** ppbBuffer );
|
||
|
|
||
|
public:
|
||
|
|
||
|
//
|
||
|
// Usual constructor/destructor goodies.
|
||
|
//
|
||
|
|
||
|
SAM_USER_ENUM( const SAM_DOMAIN * psamdomain,
|
||
|
ULONG lAccountControl,
|
||
|
BOOL fKeepBuffers = FALSE );
|
||
|
|
||
|
~SAM_USER_ENUM( VOID );
|
||
|
|
||
|
}; // class SAM_USER_ENUM
|
||
|
|
||
|
|
||
|
class SAM_USER_ITER; // Forward reference.
|
||
|
|
||
|
|
||
|
/*************************************************************************
|
||
|
|
||
|
NAME: SAM_USER_ENUM_OBJ
|
||
|
|
||
|
SYNOPSIS: This is basically the return type from the
|
||
|
SAM_USER_ENUM_ITER iterator.
|
||
|
|
||
|
INTERFACE: QueryUnicodeUserName - Returns a UNICODE_STRING *
|
||
|
for the user name.
|
||
|
|
||
|
QueryUserName - Also returns the user name,
|
||
|
but stores it in an NLS_STR.
|
||
|
|
||
|
QueryUserRID - Returns the user's RID.
|
||
|
|
||
|
PARENT: ENUM_OBJ_BASE
|
||
|
|
||
|
HISTORY:
|
||
|
KeithMo 13-Apr-1992 Created for the Server Manager.
|
||
|
|
||
|
**************************************************************************/
|
||
|
DLL_CLASS SAM_USER_ENUM_OBJ : public ENUM_OBJ_BASE
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
//
|
||
|
// Provide properly-casted buffer Query/Set methods.
|
||
|
//
|
||
|
|
||
|
const SAM_RID_ENUMERATION * QueryBufferPtr( VOID ) const
|
||
|
{ return (const SAM_RID_ENUMERATION *)ENUM_OBJ_BASE::QueryBufferPtr(); }
|
||
|
|
||
|
VOID SetBufferPtr( const SAM_RID_ENUMERATION * pBuffer )
|
||
|
{ ENUM_OBJ_BASE::SetBufferPtr( (const BYTE *)pBuffer ); }
|
||
|
|
||
|
//
|
||
|
// Accessors.
|
||
|
//
|
||
|
|
||
|
const UNICODE_STRING * QueryUnicodeUserName( VOID ) const
|
||
|
{ return &(QueryBufferPtr()->Name); }
|
||
|
|
||
|
APIERR QueryUserName( NLS_STR * pnls ) const
|
||
|
{
|
||
|
ASSERT( pnls != NULL );
|
||
|
ASSERT( pnls->QueryError() == NERR_Success );
|
||
|
return pnls->MapCopyFrom( QueryUnicodeUserName()->Buffer,
|
||
|
QueryUnicodeUserName()->Length );
|
||
|
}
|
||
|
|
||
|
DECLARE_ENUM_ACCESSOR( QueryUserRID, ULONG, RelativeId );
|
||
|
|
||
|
}; // class SAM_USER_ENUM_OBJ
|
||
|
|
||
|
|
||
|
DECLARE_LM_RESUME_ENUM_ITER_OF( SAM_USER, SAM_RID_ENUMERATION );
|
||
|
|
||
|
|
||
|
#endif // _LMOESU_HXX_
|