263 lines
6.5 KiB
C++
263 lines
6.5 KiB
C++
/**********************************************************************/
|
|
/** Microsoft LAN Manager **/
|
|
/** Copyright(c) Microsoft Corp., 1990 **/
|
|
/**********************************************************************/
|
|
|
|
/*
|
|
* History
|
|
* chuckc 12/7/90 Created
|
|
* rustanl 1/24/91 Moved two enumerations (also used in BLT)
|
|
* to lmobj.hxx.
|
|
* rustanl 3/6/91 Change PSZ Connect param to const TCHAR *
|
|
* terryk 10/7/91 type changes for NT
|
|
* terryk 10/21/91 type changes for NT
|
|
* terryk 10/31/91 add DEVICE2 object
|
|
* KeithMo 31-Oct-1991 Removed x2ULONG stuff.
|
|
* terryk 08-Nov-1991 Add BYTE *_pBuf to DEVICE object
|
|
* terryk 18-Nov-1991 Code review changed. Attend: chuckc
|
|
* Johnl davidhov terryk
|
|
*/
|
|
|
|
|
|
#ifndef _LMODEV_HXX_
|
|
#define _LMODEV_HXX_
|
|
|
|
#include "lmobj.hxx"
|
|
|
|
|
|
DLL_CLASS LM_RESOURCE; // declared in lmores.hxx
|
|
|
|
|
|
enum LMO_DEV_STATE
|
|
{
|
|
LMO_DEV_BADSTATE,
|
|
LMO_DEV_LOCAL,
|
|
LMO_DEV_REMOTE,
|
|
LMO_DEV_NOSUCH,
|
|
LMO_DEV_UNAVAIL,
|
|
LMO_DEV_UNKNOWN
|
|
|
|
}; // enum LMO_DEV_STATE
|
|
|
|
|
|
/**********************************************************\
|
|
|
|
NAME: DEVICE
|
|
|
|
WORKBOOK:
|
|
|
|
SYNOPSIS: device class in lan manager object
|
|
|
|
INTERFACE:
|
|
DEVICE() - constructor
|
|
~DEVICE() - destructor
|
|
QueryName() - query name
|
|
GetInfo() - get information
|
|
WriteInfo() - write information
|
|
QueryType() - query type
|
|
QueryState() - query state
|
|
QueryStatus() - query status
|
|
QueryRemoteType() - query remote type
|
|
QueryRemoteName() - query remote name
|
|
QueryServer() - Returns the server name in the form "\\server"
|
|
Connect() - connect
|
|
Disconnect() - disconnect
|
|
|
|
PARENT: LM_OBJ
|
|
|
|
USES: LM_DEV_STATE, LM_DEVICE
|
|
|
|
CAVEATS:
|
|
|
|
NOTES:
|
|
|
|
HISTORY:
|
|
chuckc 12/7/90 Created
|
|
Johnl 08/13/91 Added QueryServer
|
|
terryk 18-Nov-1991 Add CallAPI and SetInfo
|
|
|
|
\**********************************************************/
|
|
|
|
DLL_CLASS DEVICE : public LM_OBJ
|
|
{
|
|
private:
|
|
TCHAR _szRemoteName[MAX_PATH+1];
|
|
TCHAR _szServerName[MAX_PATH+1] ;
|
|
NLS_STR _nlsDeviceName ;
|
|
LMO_DEV_STATE _lmoDevState;
|
|
LMO_DEVICE _lmoDevType;
|
|
UINT _uStatus; // as defined by USE.H
|
|
UINT _uRemoteType; // as defined by USE.H
|
|
BYTE *_pBuf;
|
|
|
|
protected:
|
|
virtual APIERR ValidateName(VOID);
|
|
virtual APIERR CallAPI( );
|
|
virtual VOID SetInfo( );
|
|
BYTE * QueryBufPtr()
|
|
{ return _pBuf; }
|
|
VOID SetBufPtr( BYTE * pBuf )
|
|
{ _pBuf = pBuf; }
|
|
LMO_DEV_STATE QueryDevState() const
|
|
{ return _lmoDevState; }
|
|
VOID SetDevState( LMO_DEV_STATE lmoDevState )
|
|
{ _lmoDevState = lmoDevState; }
|
|
LMO_DEVICE QueryDevType() const
|
|
{ return _lmoDevType; }
|
|
VOID SetDevType( LMO_DEVICE lmoDevType )
|
|
{ _lmoDevType = lmoDevType; }
|
|
VOID SetStatus( UINT uStatus )
|
|
{ _uStatus = uStatus; }
|
|
VOID SetRemoteType( UINT uRemoteType )
|
|
{ _uRemoteType = uRemoteType; }
|
|
VOID SetRemoteName( const TCHAR * pszRemoteName );
|
|
VOID SetServerName( const TCHAR * pszServerName );
|
|
|
|
public:
|
|
DEVICE( const TCHAR * pchName );
|
|
~DEVICE();
|
|
|
|
const TCHAR * QueryName( VOID ) const ;
|
|
APIERR GetInfo( VOID );
|
|
APIERR WriteInfo( VOID );
|
|
|
|
UINT QueryType( VOID ) const;
|
|
LMO_DEV_STATE QueryState( VOID ) const;
|
|
UINT QueryStatus( VOID ) const;
|
|
UINT QueryRemoteType( VOID ) const;
|
|
const TCHAR * QueryRemoteName( VOID ) const;
|
|
|
|
const TCHAR * QueryServer( VOID ) const ;
|
|
|
|
APIERR Connect( LM_RESOURCE & resource, const TCHAR * pszPassword =
|
|
NULL );
|
|
APIERR Connect( const TCHAR * pszResource, const TCHAR * pszPassword
|
|
= NULL );
|
|
APIERR Disconnect( UINT uiForce = USE_NOFORCE );
|
|
APIERR Disconnect( const TCHAR *pszRemote, UINT uiForce = USE_NOFORCE );
|
|
|
|
#ifndef WIN32
|
|
// WIN32BUGBUG
|
|
static UINT AliasToUNC(TCHAR *pchRemoteName, const TCHAR *pchAlias) ;
|
|
#endif
|
|
|
|
}; // class DEVICE
|
|
|
|
#ifdef WIN32
|
|
|
|
/*************************************************************************
|
|
|
|
NAME: DEVICE2
|
|
|
|
SYNOPSIS: level 2 device object
|
|
|
|
INTERFACE: DEVICE2() - constructor
|
|
Connect() - connect to the network
|
|
QueryUsername() - get the username
|
|
|
|
PARENT: DEVICE
|
|
|
|
CAVEATS:
|
|
Provide level 2 device object for WIN32 access
|
|
|
|
HISTORY:
|
|
terryk 31-Oct-91 Created
|
|
terryk 18-Nov-91 Add CallAPI and SetInfo
|
|
JohnL 30-Jan-1992 Added Domain field
|
|
AnirudhS 16-Jan-96 Added level 3 parameters to Connect
|
|
|
|
**************************************************************************/
|
|
|
|
DLL_CLASS DEVICE2 : public DEVICE
|
|
{
|
|
private:
|
|
NLS_STR _nlsUsername;
|
|
NLS_STR _nlsDomainName ;
|
|
|
|
protected:
|
|
APIERR SetUsername( const TCHAR * pszUsername )
|
|
{ _nlsUsername = pszUsername; return _nlsUsername.QueryError(); };
|
|
APIERR SetDomainName( const TCHAR * pszDomainName )
|
|
{ _nlsDomainName = pszDomainName ; return _nlsDomainName.QueryError() ;}
|
|
|
|
virtual APIERR CallAPI( );
|
|
virtual VOID SetInfo( );
|
|
|
|
|
|
public:
|
|
DEVICE2( const TCHAR * pszName );
|
|
APIERR Connect( const TCHAR * pszResource,
|
|
const TCHAR * pszPassword = NULL,
|
|
const TCHAR * pszUsername = NULL,
|
|
const TCHAR * pszDomain = NULL,
|
|
ULONG ulFlags = 0 ) ;
|
|
|
|
const TCHAR * QueryUsername() const
|
|
{ return _nlsUsername.QueryPch(); }
|
|
|
|
const TCHAR * QueryDomain( void ) const
|
|
{ return _nlsDomainName.QueryPch() ; }
|
|
};
|
|
|
|
#endif
|
|
|
|
|
|
/*
|
|
* iterate over valid devices
|
|
*/
|
|
|
|
/**********************************************************\
|
|
|
|
NAME: ITER_DEVICE
|
|
|
|
WORKBOOK:
|
|
|
|
SYNOPSIS: iterator device class
|
|
|
|
INTERFACE:
|
|
Next() - next object
|
|
operator()() - next one
|
|
ITER_DEVICE() - constructor
|
|
~ITEM_DEVICE() - destructor
|
|
|
|
PARENT:
|
|
|
|
USES:
|
|
|
|
CAVEATS:
|
|
|
|
NOTES:
|
|
|
|
HISTORY:
|
|
chuckc 12/7/90 Created
|
|
|
|
\**********************************************************/
|
|
|
|
DLL_CLASS ITER_DEVICE
|
|
{
|
|
public:
|
|
const TCHAR * Next( VOID ) ;
|
|
inline const TCHAR * operator()(VOID) { return Next(); }
|
|
ITER_DEVICE(LMO_DEVICE DevType, LMO_DEV_USAGE Usage) ;
|
|
~ITER_DEVICE() ;
|
|
|
|
private:
|
|
const TCHAR * EnumDrives() ;
|
|
const TCHAR * EnumLPTs() ;
|
|
const TCHAR * EnumComms() ;
|
|
TCHAR * _pszDevices ;
|
|
TCHAR * _pszNext ;
|
|
UINT _DevType ;
|
|
LMO_DEV_USAGE _Usage ;
|
|
};
|
|
|
|
/*
|
|
* general funcs for going between LMO types and NETAPU types
|
|
*/
|
|
INT LMOTypeToNetType(LMO_DEVICE lmoDevType) ;
|
|
LMO_DEVICE NetTypeToLMOType(ULONG netDevType) ;
|
|
|
|
// end of lmodev.hxx
|
|
|
|
#endif // _LMODEV_HXX_
|