mirror of https://github.com/lianthony/NT4.0
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.
2102 lines
57 KiB
2102 lines
57 KiB
/**********************************************************************/
|
|
/** Microsoft Windows NT **/
|
|
/** Copyright(c) Microsoft Corp., 1993 **/
|
|
/**********************************************************************/
|
|
|
|
/*
|
|
lmorpl.cxx
|
|
RPL objects
|
|
|
|
FILE HISTORY:
|
|
JonN 19-Jul-1993 templated from group object hierarchy
|
|
JonN 06-Aug-1993 added RPL_WKSTA
|
|
|
|
*/
|
|
|
|
|
|
#define INCL_NET
|
|
#define INCL_DOSERRORS
|
|
#define INCL_NETERRORS
|
|
#define INCL_NETCONS
|
|
#define INCL_NETLIB
|
|
#include <lmui.hxx>
|
|
// #include <lmobjp.hxx>
|
|
|
|
extern "C"
|
|
{
|
|
#include <fakeapis.h> // BUGBUG replace with real header when available
|
|
}
|
|
|
|
#if defined(DEBUG)
|
|
static const CHAR szFileName[] = __FILE__;
|
|
#define _FILENAME_DEFINED_ONCE szFileName
|
|
#endif // DEBUG
|
|
|
|
#include <uiassert.hxx>
|
|
#include <uitrace.hxx>
|
|
|
|
#include <lmorpl.hxx>
|
|
|
|
#define EMPTYTONULL(x) ( ((x) == NULL || *(x) == TCH('\0')) ? NULL : (x) )
|
|
|
|
#define TCPIP_DEFAULT 0xFFFFFFFF
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_OBJECT::RPL_OBJECT
|
|
|
|
SYNOPSIS: constructor for the RPL_OBJECT object
|
|
|
|
ENTRY: rplsrvref - server against which to perform operations
|
|
|
|
EXIT: Object is constructed
|
|
|
|
HISTORY:
|
|
JonN 19-Aug-1993 Created
|
|
|
|
********************************************************************/
|
|
|
|
RPL_OBJECT::RPL_OBJECT( RPL_SERVER_REF & rplsrvref )
|
|
: NEW_LM_OBJ(),
|
|
_rplsrvref( rplsrvref ),
|
|
_dwErrorParameter( 0 )
|
|
{
|
|
if ( QueryError() )
|
|
return;
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_OBJECT::~RPL_OBJECT
|
|
|
|
SYNOPSIS: Destructor for RPL_OBJECT class
|
|
|
|
HISTORY:
|
|
JonN 19-Aug-1993 Created
|
|
|
|
********************************************************************/
|
|
|
|
RPL_OBJECT::~RPL_OBJECT()
|
|
{
|
|
// nothing to do here
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_OBJECT::W_CloneFrom
|
|
|
|
SYNOPSIS: Copies information on the object
|
|
|
|
EXIT: Returns an API error code
|
|
|
|
HISTORY:
|
|
JonN 19-Aug-1993 Created
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_OBJECT::W_CloneFrom( const RPL_OBJECT & rplobj )
|
|
{
|
|
APIERR err = NEW_LM_OBJ::W_CloneFrom( rplobj );
|
|
if (err == NERR_Success)
|
|
{
|
|
_rplsrvref.CloneFrom( ((RPL_OBJECT &)rplobj).QueryServerRef() );
|
|
_dwErrorParameter = rplobj.QueryErrorParameter();
|
|
}
|
|
|
|
return err;
|
|
}
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_PROFILE::RPL_PROFILE
|
|
|
|
SYNOPSIS: constructor for the RPL_PROFILE object
|
|
|
|
ENTRY: rplsrvref - server against which to perform operations
|
|
pszProfile - profile name
|
|
|
|
EXIT: Object is constructed
|
|
|
|
NOTES: The profile name is not validated.
|
|
|
|
HISTORY:
|
|
JonN 23-Jul-1993 Templated from group object hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
RPL_PROFILE::RPL_PROFILE( RPL_SERVER_REF & rplsrvref,
|
|
const TCHAR * pszProfile )
|
|
: RPL_OBJECT( rplsrvref ),
|
|
_nlsProfile() // will call SetName later in ctor
|
|
{
|
|
if ( QueryError() )
|
|
return;
|
|
|
|
APIERR err = SetName( pszProfile );
|
|
if ( err != NERR_Success )
|
|
{
|
|
DBGEOL( "RPL_PROFILE::ctor error " << err );
|
|
ReportError( err );
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_PROFILE::~RPL_PROFILE
|
|
|
|
SYNOPSIS: Destructor for RPL_PROFILE class
|
|
|
|
HISTORY:
|
|
JonN 03-Aug-1993 Templated from group object hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
RPL_PROFILE::~RPL_PROFILE()
|
|
{
|
|
// nothing to do here
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_PROFILE::QueryName
|
|
|
|
SYNOPSIS: Returns the profile name of a RPL_PROFILE
|
|
|
|
EXIT: Returns a pointer to the profile name
|
|
|
|
NOTE: Valid for objects in CONSTRUCTED state, thus no CHECK_OK
|
|
|
|
HISTORY:
|
|
JonN 03-Aug-1993 Templated from group object hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
const TCHAR *RPL_PROFILE::QueryName() const
|
|
{
|
|
return _nlsProfile.QueryPch();
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_PROFILE::SetName
|
|
|
|
SYNOPSIS: Changes the profile name of a RPL_PROFILE
|
|
|
|
ENTRY: new profile name
|
|
|
|
EXIT: Returns an API error code
|
|
|
|
NOTES: This method does not attempt to validate the name
|
|
|
|
HISTORY:
|
|
JonN 03-Aug-1993 Templated from group object hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_PROFILE::SetName( const TCHAR * pszProfile )
|
|
{
|
|
return _nlsProfile.CopyFrom(pszProfile);
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_PROFILE::ValidateName
|
|
|
|
SYNOPSIS: Validated the profile name of a RPL_PROFILE
|
|
|
|
ENTRY: profile name
|
|
|
|
EXIT: Returns an API error code
|
|
|
|
HISTORY:
|
|
JonN 19-Aug-1993 Created
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_PROFILE::ValidateProfileName( const TCHAR * pszProfile )
|
|
{
|
|
APIERR err = NERR_Success;
|
|
|
|
// CODEWORK more validation
|
|
|
|
if ( ::strlenf(pszProfile) > RPL_MAX_PROFILE_NAME_LENGTH )
|
|
{
|
|
DBGEOL( "RPL_PROFILE::ValidateProfileName( \"" << pszProfile
|
|
<< "\" ): error " << err );
|
|
err = ERROR_INVALID_PARAMETER; // CODEWORK define a better error
|
|
}
|
|
|
|
return err;
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_PROFILE::W_CloneFrom
|
|
|
|
SYNOPSIS: Copies information on the profile
|
|
|
|
EXIT: Returns an API error code
|
|
|
|
HISTORY:
|
|
JonN 05-Aug-1993 Templated from user object hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_PROFILE::W_CloneFrom( const RPL_PROFILE & rplprof )
|
|
{
|
|
APIERR err = RPL_OBJECT::W_CloneFrom( rplprof );
|
|
if (err == NERR_Success)
|
|
{
|
|
err = _nlsProfile.CopyFrom( rplprof.QueryName() );
|
|
}
|
|
|
|
return err;
|
|
}
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_PROFILE::I_Delete
|
|
|
|
SYNOPSIS: Deletes the RPL_PROFILE (calls NetRpl API)
|
|
|
|
RETURNS: Returns an API error code
|
|
|
|
HISTORY:
|
|
JonN 03-Aug-1993 Templated from group object hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_PROFILE::I_Delete( UINT uiForce )
|
|
{
|
|
UNREFERENCED( uiForce );
|
|
APIERR err = QueryServerRef().ProfileDel( QueryName() );
|
|
|
|
#ifdef DEBUG
|
|
if (err != NERR_Success)
|
|
{
|
|
DBGEOL( "RPL_PROFILE::I_Delete(): name \"" << QueryName()
|
|
<< "\" error " << err );
|
|
}
|
|
#endif
|
|
|
|
return err;
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_PROFILE_2::RPL_PROFILE_2
|
|
|
|
SYNOPSIS: Constructor for RPL_PROFILE_2 class
|
|
|
|
ENTRY: rplsrvref - server against which to perform operations
|
|
pszProfile - profile name
|
|
|
|
EXIT: Object is constructed
|
|
|
|
NOTES: Validation is not done until GetInfo() time.
|
|
|
|
HISTORY:
|
|
JonN 03-Aug-1993 Templated from group object hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
|
|
RPL_PROFILE_2::RPL_PROFILE_2( RPL_SERVER_REF & rplsrvref,
|
|
const TCHAR *pszProfile )
|
|
: RPL_PROFILE_0( rplsrvref, pszProfile ),
|
|
_nlsComment(),
|
|
_nlsConfigName(),
|
|
// _dwRequestNumber( 0 ),
|
|
// _dwSecondsNumber( 0 ),
|
|
// _dwAcknowledgementPolicy( 0 ),
|
|
_nlsBootBlockFile(),
|
|
_nlsSharedFitFile(),
|
|
_nlsPersonalFitFile()
|
|
{
|
|
if ( QueryError() )
|
|
return;
|
|
|
|
APIERR err = NERR_Success;
|
|
if ( (err = _nlsComment.QueryError()) != NERR_Success
|
|
|| (err = _nlsConfigName.QueryError()) != NERR_Success
|
|
|| (err = _nlsBootBlockFile.QueryError()) != NERR_Success
|
|
|| (err = _nlsSharedFitFile.QueryError()) != NERR_Success
|
|
|| (err = _nlsPersonalFitFile.QueryError()) != NERR_Success
|
|
)
|
|
{
|
|
DBGEOL( "RPL_PROFILE_2::ctor error " << err );
|
|
ReportError( err );
|
|
return;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_PROFILE_2::~RPL_PROFILE_2
|
|
|
|
SYNOPSIS: Destructor for RPL_PROFILE_2 class
|
|
|
|
HISTORY:
|
|
JonN 03-Aug-1993 Templated from group object hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
RPL_PROFILE_2::~RPL_PROFILE_2()
|
|
{
|
|
// nothing to do here
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_PROFILE_2::W_Write
|
|
|
|
SYNOPSIS: Helper function for WriteNew and WriteInfo -- loads
|
|
current values into the API buffer
|
|
|
|
EXIT: Returns API error code
|
|
|
|
HISTORY:
|
|
JonN 05-Aug-1993 Templated from user object hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_PROFILE_2::W_Write()
|
|
{
|
|
RPL_PROFILE_INFO_2 *prplprofinfo2 =
|
|
(RPL_PROFILE_INFO_2 *)QueryBufferPtr();
|
|
ASSERT( prplprofinfo2 != NULL );
|
|
prplprofinfo2->ProfileName = (TCHAR *)QueryName();
|
|
prplprofinfo2->ProfileComment = (TCHAR *)QueryComment();
|
|
prplprofinfo2->ConfigName = EMPTYTONULL((TCHAR *)QueryConfigName());
|
|
// prplprofinfo2->RequestNumber = QueryRequestNumber();
|
|
// prplprofinfo2->SecondsNumber = QuerySecondsNumber();
|
|
// prplprofinfo2->AcknowledgementPolicy = QueryAcknowledgementPolicy();
|
|
prplprofinfo2->BootName = EMPTYTONULL((TCHAR *)QueryBootBlockFile());
|
|
prplprofinfo2->FitPersonal = EMPTYTONULL((TCHAR *)QueryPersonalFitFile());
|
|
prplprofinfo2->FitShared = EMPTYTONULL((TCHAR *)QuerySharedFitFile());
|
|
|
|
return NERR_Success;
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_PROFILE_2::CloneFrom
|
|
|
|
SYNOPSIS: Copies information on the user
|
|
|
|
EXIT: Returns an API error code
|
|
|
|
NOTES: W_CloneFrom copies all member objects, but it does not
|
|
update the otherwise unused pointers in the API buffer.
|
|
This is left for the outermost routine, CloneFrom().
|
|
Only the otherwise unused pointers need to be fixed
|
|
here, the rest will be fixed in WriteInfo/WriteNew.
|
|
|
|
HISTORY:
|
|
JonN 05-Aug-1993 Templated from user object hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_PROFILE_2::CloneFrom( const RPL_PROFILE_2 & rplprof2 )
|
|
{
|
|
APIERR err = W_CloneFrom( rplprof2 );
|
|
if ( err != NERR_Success )
|
|
{
|
|
DBGEOL( "RPL_PROFILE_2::W_CloneFrom failed with error code " << err );
|
|
ReportError( err ); // make unconstructed here
|
|
}
|
|
else
|
|
{
|
|
/*
|
|
This is where I fix up the otherwise unused pointers.
|
|
*/
|
|
}
|
|
|
|
return err;
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_PROFILE_2::I_GetInfo
|
|
|
|
SYNOPSIS: Gets information about the local RPL_PROFILE
|
|
|
|
ENTRY: Object should have a valid name
|
|
|
|
EXIT: Returns a standard LANMAN error code
|
|
|
|
NOTES: Name validation and memory allocation are done
|
|
at this point, not at construction.
|
|
|
|
HISTORY:
|
|
JonN 23-Jul-1993 Templated from user object hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_PROFILE_2::I_GetInfo()
|
|
{
|
|
// Validate the profile name
|
|
|
|
BYTE *pBuffer = NULL;
|
|
APIERR err = QueryServerRef().ProfileGetInfo( QueryName(),
|
|
2,
|
|
&pBuffer );
|
|
SetBufferPtr( pBuffer );
|
|
|
|
if ( err != NERR_Success )
|
|
{
|
|
DBGEOL( "RPL_PROFILE_2::I_GetInfo: ProfileGetInfo( \"" << QueryName()
|
|
<< "\" ) failed with error " << err );
|
|
return err;
|
|
}
|
|
|
|
RPL_PROFILE_INFO_2 *prplprof2 =
|
|
(RPL_PROFILE_INFO_2 *)QueryBufferPtr();
|
|
UIASSERT( prplprof2 != NULL );
|
|
|
|
if ( (err = SetName( prplprof2->ProfileName )) != NERR_Success
|
|
|| (err = SetComment( prplprof2->ProfileComment )) != NERR_Success
|
|
|| (err = SetConfigName( prplprof2->ConfigName )) != NERR_Success
|
|
// || (err = SetRequestNumber(
|
|
// prplprof2->RequestNumber )) != NERR_Success
|
|
// || (err = SetSecondsNumber(
|
|
// prplprof2->SecondsNumber )) != NERR_Success
|
|
// || (err = SetAcknowledgementPolicy(
|
|
// prplprof2->AcknowledgementPolicy )) != NERR_Success
|
|
|| (err = SetBootBlockFile(
|
|
prplprof2->BootName )) != NERR_Success
|
|
|| (err = SetSharedFitFile(
|
|
prplprof2->FitShared )) != NERR_Success
|
|
|| (err = SetPersonalFitFile(
|
|
prplprof2->FitPersonal )) != NERR_Success
|
|
)
|
|
{
|
|
DBGEOL( "RPL_PROFILE_2::I_GetInfo(): set error " << err );
|
|
}
|
|
|
|
return err;
|
|
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_PROFILE_2::I_WriteInfo
|
|
|
|
SYNOPSIS: Writes information about the RPL_PROFILE
|
|
|
|
EXIT: Returns API error code
|
|
|
|
HISTORY:
|
|
JonN 05-Aug-1993 Templated from user object hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_PROFILE_2::I_WriteInfo()
|
|
{
|
|
APIERR err = W_Write();
|
|
|
|
#ifdef DEBUG
|
|
if (err != NERR_Success)
|
|
{
|
|
DBGEOL( "RPL_PROFILE_2::I_WriteInfo(): W_Write( \""
|
|
<< QueryName()
|
|
<< "\" ) failed; error " << err );
|
|
}
|
|
#endif
|
|
|
|
if ( err == NERR_Success )
|
|
{
|
|
err = QueryServerRef().ProfileSetInfo( QueryName(),
|
|
2,
|
|
QueryBufferPtr(),
|
|
&_dwErrorParameter
|
|
);
|
|
|
|
#ifdef DEBUG
|
|
if (err != NERR_Success)
|
|
{
|
|
DBGEOL( "RPL_PROFILE_2::I_WriteInfo(): ProfileSetInfo( \""
|
|
<< QueryName()
|
|
<< "\" ) failed; error " << err
|
|
<< ", error parameter << " << QueryErrorParameter() );
|
|
}
|
|
#endif
|
|
}
|
|
|
|
return err;
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_PROFILE_2::I_WriteNew
|
|
|
|
SYNOPSIS: Creates a new profile
|
|
|
|
ENTRY:
|
|
|
|
EXIT: Returns an API error code
|
|
|
|
NOTES:
|
|
|
|
HISTORY:
|
|
JonN 05-Aug-1993 Templated from group object hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_PROFILE_2::I_WriteNew()
|
|
{
|
|
APIERR err = W_Write();
|
|
|
|
#ifdef DEBUG
|
|
if (err != NERR_Success)
|
|
{
|
|
DBGEOL( "RPL_PROFILE_2::I_WriteNew(): W_Write() failed; name \""
|
|
<< QueryName()
|
|
<< "\" error " << err );
|
|
}
|
|
#endif
|
|
|
|
if ( err == NERR_Success )
|
|
err = QueryServerRef().ProfileAdd( 2,
|
|
QueryBufferPtr(),
|
|
&_dwErrorParameter
|
|
);
|
|
|
|
#ifdef DEBUG
|
|
if (err != NERR_Success)
|
|
{
|
|
DBGEOL( "RPL_PROFILE_2::I_WriteNew(): ProfileAdd( \"" << QueryName()
|
|
<< "\" ) failed; error " << err
|
|
<< ", error parameter " << QueryErrorParameter() );
|
|
}
|
|
#endif
|
|
|
|
return err;
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_PROFILE_2::I_CreateNew
|
|
|
|
SYNOPSIS: Sets up object for subsequent WriteNew
|
|
|
|
EXIT: Returns a standard LANMAN error code
|
|
|
|
HISTORY:
|
|
JonN 05-Aug-1993 Templated from user object hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_PROFILE_2::I_CreateNew()
|
|
{
|
|
|
|
APIERR err = NERR_Success;
|
|
if ( (err = W_CreateNew()) != NERR_Success
|
|
|| (err = ResizeBuffer( sizeof(RPL_PROFILE_INFO_2) )) != NERR_Success
|
|
|| (err = ClearBuffer()) != NERR_Success
|
|
)
|
|
{
|
|
DBGEOL( "RPL_PROFILE_2::I_CreateNew(): error " << err );
|
|
}
|
|
|
|
return err;
|
|
|
|
}
|
|
|
|
|
|
/**********************************************************\
|
|
|
|
NAME: RPL_PROFILE_2::I_ChangeToNew
|
|
|
|
SYNOPSIS: NEW_LM_OBJ::ChangeToNew() transforms a NEW_LM_OBJ from VALID
|
|
to NEW status only when a corresponding I_ChangeToNew()
|
|
exists. The RPL_PROFILE API buffer is the same for new
|
|
and valid objects, so this method doesn't have to do
|
|
much.
|
|
|
|
HISTORY:
|
|
JonN 05-Aug-1993 Templated from user object hierarchy
|
|
|
|
\**********************************************************/
|
|
|
|
APIERR RPL_PROFILE_2::I_ChangeToNew()
|
|
{
|
|
return W_ChangeToNew();
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_PROFILE_2::W_CloneFrom
|
|
|
|
SYNOPSIS: Copies information on the RPL_PROFILE
|
|
|
|
EXIT: Returns an API error code
|
|
|
|
HISTORY:
|
|
JonN 23-Jul-1993 Templated from group object hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_PROFILE_2::W_CloneFrom( const RPL_PROFILE_2 & rplprof2 )
|
|
{
|
|
APIERR err = NERR_Success;
|
|
if ( (err = RPL_PROFILE::W_CloneFrom( rplprof2 )) != NERR_Success
|
|
|| (err = SetName( rplprof2.QueryName() )) != NERR_Success
|
|
|| (err = SetComment( rplprof2.QueryComment() )) != NERR_Success
|
|
|| (err = SetConfigName( rplprof2.QueryConfigName() )) != NERR_Success
|
|
// || (err = SetRequestNumber(
|
|
// rplprof2.QueryRequestNumber() )) != NERR_Success
|
|
// || (err = SetSecondsNumber(
|
|
// rplprof2.QuerySecondsNumber() )) != NERR_Success
|
|
// || (err = SetAcknowledgementPolicy(
|
|
// rplprof2.QueryAcknowledgementPolicy() )) != NERR_Success
|
|
|| (err = SetBootBlockFile(
|
|
rplprof2.QueryBootBlockFile() )) != NERR_Success
|
|
|| (err = SetSharedFitFile(
|
|
rplprof2.QuerySharedFitFile() )) != NERR_Success
|
|
|| (err = SetPersonalFitFile(
|
|
rplprof2.QueryPersonalFitFile() )) != NERR_Success
|
|
)
|
|
{
|
|
DBGEOL( SZ("RPL_PROFILE_2::W_CloneFrom error ") << err );
|
|
}
|
|
|
|
return err;
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_PROFILE_2::W_CreateNew
|
|
|
|
SYNOPSIS: initializes private data members for new object
|
|
|
|
EXIT: Returns an API error code
|
|
|
|
HISTORY:
|
|
JonN 23-Jul-1993 Templated from group object hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_PROFILE_2::W_CreateNew()
|
|
{
|
|
APIERR err = NERR_Success;
|
|
if ( (err = RPL_PROFILE::W_CreateNew()) != NERR_Success
|
|
|| (err = SetName( NULL )) != NERR_Success
|
|
|| (err = SetComment( NULL )) != NERR_Success
|
|
|| (err = SetConfigName( NULL )) != NERR_Success
|
|
// || (err = SetRequestNumber( 0 )) != NERR_Success
|
|
// || (err = SetSecondsNumber( 0 )) != NERR_Success
|
|
// || (err = SetAcknowledgementPolicy( 0 )) != NERR_Success
|
|
|| (err = SetBootBlockFile( NULL )) != NERR_Success
|
|
|| (err = SetSharedFitFile( NULL )) != NERR_Success
|
|
|| (err = SetPersonalFitFile( NULL )) != NERR_Success
|
|
)
|
|
{
|
|
DBGEOL( SZ("RPL_PROFILE_2::W_CreateNew failed") );
|
|
}
|
|
|
|
return err;
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_PROFILE_2::SetComment
|
|
|
|
SYNOPSIS: Changes the comment
|
|
|
|
EXIT: error code. If not NERR_Success the object is still valid.
|
|
|
|
HISTORY:
|
|
JonN 23-Jul-1993 Templated from group object hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_PROFILE_2::SetComment( const TCHAR * pszComment )
|
|
{
|
|
CHECK_OK( ERROR_GEN_FAILURE );
|
|
return _nlsComment.CopyFrom( pszComment );
|
|
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_PROFILE_2::SetConfigName
|
|
|
|
SYNOPSIS: Changes the configuration name
|
|
|
|
EXIT: error code. If not NERR_Success the object is still valid.
|
|
|
|
HISTORY:
|
|
JonN 04-Aug-1993 Templated from group object hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_PROFILE_2::SetConfigName( const TCHAR * pszConfigName )
|
|
{
|
|
CHECK_OK( ERROR_GEN_FAILURE );
|
|
return _nlsConfigName.CopyFrom( pszConfigName );
|
|
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_PROFILE_2::SetBootBlockFile
|
|
|
|
SYNOPSIS: Changes the boot block file
|
|
|
|
EXIT: error code. If not NERR_Success the object is still valid.
|
|
|
|
HISTORY:
|
|
JonN 04-Aug-1993 Templated from group object hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_PROFILE_2::SetBootBlockFile( const TCHAR * pszBootBlockFile )
|
|
{
|
|
CHECK_OK( ERROR_GEN_FAILURE );
|
|
return _nlsBootBlockFile.CopyFrom( pszBootBlockFile );
|
|
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_PROFILE_2::SetSharedFitFile
|
|
|
|
SYNOPSIS: Changes the shared FIT file
|
|
|
|
EXIT: error code. If not NERR_Success the object is still valid.
|
|
|
|
HISTORY:
|
|
JonN 04-Aug-1993 Templated from group object hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_PROFILE_2::SetSharedFitFile( const TCHAR * pszSharedFitFile )
|
|
{
|
|
CHECK_OK( ERROR_GEN_FAILURE );
|
|
return _nlsSharedFitFile.CopyFrom( pszSharedFitFile );
|
|
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_PROFILE_2::SetPersonalFitFile
|
|
|
|
SYNOPSIS: Changes the personal FIT file
|
|
|
|
EXIT: error code. If not NERR_Success the object is still valid.
|
|
|
|
HISTORY:
|
|
JonN 04-Aug-1993 Templated from group object hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_PROFILE_2::SetPersonalFitFile( const TCHAR * pszPersonalFitFile )
|
|
{
|
|
CHECK_OK( ERROR_GEN_FAILURE );
|
|
return _nlsPersonalFitFile.CopyFrom( pszPersonalFitFile );
|
|
|
|
}
|
|
|
|
|
|
#if 0
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_PROFILE_2::SetRequestNumber
|
|
|
|
SYNOPSIS: Changes the request number
|
|
|
|
EXIT: error code.
|
|
|
|
HISTORY:
|
|
JonN 04-Aug-1993 Templated from group object hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_PROFILE_2::SetRequestNumber( DWORD dwRequestNumber )
|
|
{
|
|
CHECK_OK( ERROR_GEN_FAILURE );
|
|
_dwRequestNumber = dwRequestNumber;
|
|
return NERR_Success;
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_PROFILE_2::SetSecondsNumber
|
|
|
|
SYNOPSIS: Changes the RPL_PROFILE's seconds number
|
|
|
|
EXIT: error code.
|
|
|
|
HISTORY:
|
|
JonN 04-Aug-1993 Templated from group object hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_PROFILE_2::SetSecondsNumber( DWORD dwSecondsNumber )
|
|
{
|
|
CHECK_OK( ERROR_GEN_FAILURE );
|
|
_dwSecondsNumber = dwSecondsNumber;
|
|
return NERR_Success;
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_PROFILE_2::SetAcknowledgementPolicy
|
|
|
|
SYNOPSIS: Changes the RPL_PROFILE's acknowledgement policy
|
|
|
|
EXIT: error code.
|
|
|
|
HISTORY:
|
|
JonN 04-Aug-1993 Templated from group object hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_PROFILE_2::SetAcknowledgementPolicy( DWORD dwAcknowledgementPolicy )
|
|
{
|
|
CHECK_OK( ERROR_GEN_FAILURE );
|
|
_dwAcknowledgementPolicy = dwAcknowledgementPolicy;
|
|
return NERR_Success;
|
|
}
|
|
#endif
|
|
|
|
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_WKSTA::RPL_WKSTA
|
|
|
|
SYNOPSIS: constructor for the RPL_WKSTA object
|
|
|
|
ENTRY: rplsrvref - server against which to perform operations
|
|
pszWkstaName - workstation name (unique name)
|
|
|
|
EXIT: Object is constructed
|
|
|
|
HISTORY:
|
|
JonN 06-Aug-1993 templated from RPL_PROFILE hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
RPL_WKSTA::RPL_WKSTA( RPL_SERVER_REF & rplsrvref, const TCHAR * pszWkstaName )
|
|
: RPL_OBJECT( rplsrvref ),
|
|
_nlsWkstaName(), // will call SetWkstaName later in ctor
|
|
_nlsStoredWkstaName()
|
|
{
|
|
if ( QueryError() )
|
|
return;
|
|
|
|
APIERR err = NERR_Success;
|
|
if ( (err = _nlsWkstaName.QueryError()) != NERR_Success
|
|
|| (err = _nlsStoredWkstaName.QueryError()) != NERR_Success
|
|
|| (err = SetWkstaName( pszWkstaName )) != NERR_Success
|
|
)
|
|
{
|
|
DBGEOL( "RPL_WKSTA::ctor error " << err );
|
|
ReportError( err );
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_WKSTA::~RPL_WKSTA
|
|
|
|
SYNOPSIS: Destructor for RPL_WKSTA class
|
|
|
|
ENTRY:
|
|
|
|
EXIT:
|
|
|
|
NOTES:
|
|
|
|
HISTORY:
|
|
JonN 06-Aug-1993 templated from RPL_PROFILE hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
RPL_WKSTA::~RPL_WKSTA()
|
|
{
|
|
// nothing to do here
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_WKSTA::QueryWkstaName
|
|
|
|
SYNOPSIS: Returns the workstation name of a RPL_WKSTA
|
|
|
|
EXIT: Returns a pointer to the workstation name
|
|
|
|
NOTE: Valid for objects in CONSTRUCTED state, thus no CHECK_OK
|
|
|
|
HISTORY:
|
|
JonN 06-Aug-1993 templated from RPL_PROFILE hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
const TCHAR *RPL_WKSTA::QueryWkstaName() const
|
|
{
|
|
return _nlsWkstaName.QueryPch();
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_WKSTA::SetWkstaName
|
|
|
|
SYNOPSIS: Changes the workstation name of a RPL_WKSTA.
|
|
If this is different from _nlsStoredWkstaName, the next SetInfo
|
|
will change the workstation name from _nlsStoredWkstaName
|
|
to _nlsWkstaName.
|
|
|
|
ENTRY: new workstation name
|
|
|
|
EXIT: Returns an API error code
|
|
|
|
NOTES: This method does not attempt to validate the workstation name
|
|
|
|
HISTORY:
|
|
JonN 06-Aug-1993 templated from RPL_PROFILE hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_WKSTA::SetWkstaName( const TCHAR * pszWkstaName )
|
|
{
|
|
return _nlsWkstaName.CopyFrom( pszWkstaName );
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_WKSTA::QueryStoredWkstaName
|
|
|
|
SYNOPSIS: Returns the stored workstation name of a RPL_WKSTA.
|
|
If this is different from _nlsWkstaName, the next SetInfo
|
|
will change the workstation name from _nlsStoredWkstaName
|
|
to _nlsWkstaName.
|
|
|
|
Note that this is slightly more complex than just returning
|
|
_nlsStoredWkstaName.QueryPch().
|
|
|
|
EXIT: Returns a pointer to the workstation name
|
|
|
|
NOTE: Valid for objects in CONSTRUCTED state, thus no CHECK_OK
|
|
|
|
HISTORY:
|
|
JonN 06-Aug-1993 templated from RPL_PROFILE hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
const TCHAR *RPL_WKSTA::QueryStoredWkstaName() const
|
|
{
|
|
return (_nlsStoredWkstaName.strlen() > 0) ? _nlsStoredWkstaName.QueryPch()
|
|
: _nlsWkstaName.QueryPch();
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_WKSTA::SetStoredWkstaName
|
|
|
|
SYNOPSIS: Changes the stored workstation name of a RPL_WKSTA.
|
|
If this is different from _nlsWkstaName, the next SetInfo
|
|
will change the workstation name from _nlsStoredWkstaName
|
|
to _nlsWkstaName.
|
|
|
|
ENTRY: new workstation name
|
|
|
|
EXIT: Returns an API error code
|
|
|
|
NOTES: This method does not attempt to validate the workstation name
|
|
|
|
HISTORY:
|
|
JonN 06-Aug-1993 templated from RPL_PROFILE hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_WKSTA::SetStoredWkstaName( const TCHAR * pszStoredWkstaName )
|
|
{
|
|
return _nlsStoredWkstaName.CopyFrom( pszStoredWkstaName );
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_WKSTA::W_CloneFrom
|
|
|
|
SYNOPSIS: Copies information on the workstation
|
|
|
|
EXIT: Returns an API error code
|
|
|
|
HISTORY:
|
|
JonN 06-Aug-1993 templated from RPL_PROFILE hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_WKSTA::W_CloneFrom( const RPL_WKSTA & rplwksta )
|
|
{
|
|
APIERR err = NERR_Success;
|
|
if ( (err = RPL_OBJECT::W_CloneFrom( rplwksta )) != NERR_Success
|
|
|| (err = _nlsWkstaName.CopyFrom( rplwksta.QueryWkstaName() ))
|
|
!= NERR_Success
|
|
// do not use QueryWtoredWkstaName here, it is not quite orthogonal
|
|
|| (err = _nlsStoredWkstaName.CopyFrom( rplwksta._nlsStoredWkstaName ))
|
|
!= NERR_Success
|
|
)
|
|
{
|
|
DBGEOL( "RPL_WKSTA::W_CloneFrom error " << err );
|
|
}
|
|
|
|
return err;
|
|
}
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_WKSTA::I_Delete
|
|
|
|
SYNOPSIS: Deletes the RPL_WKSTA (calls NetRpl API)
|
|
|
|
RETURNS: Returns an API error code
|
|
|
|
HISTORY:
|
|
JonN 06-Aug-1993 templated from RPL_PROFILE hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_WKSTA::I_Delete( UINT uiForce )
|
|
{
|
|
UNREFERENCED( uiForce );
|
|
APIERR err = QueryServerRef().WkstaDel( QueryStoredWkstaName() );
|
|
|
|
#ifdef DEBUG
|
|
if (err != NERR_Success)
|
|
{
|
|
DBGEOL( "RPL_WKSTA::I_Delete(): name \"" << QueryStoredWkstaName()
|
|
<< "\" error " << err );
|
|
}
|
|
#endif
|
|
|
|
return err;
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_WKSTA_2::RPL_WKSTA_2
|
|
|
|
SYNOPSIS: Constructor for RPL_WKSTA_2 class
|
|
|
|
ENTRY: rplsrvref - server against which to perform operations
|
|
pszWkstaName - workstation name
|
|
|
|
EXIT: Object is constructed
|
|
|
|
NOTES: Validation is not done until GetInfo() time.
|
|
|
|
HISTORY:
|
|
JonN 06-Aug-1993 templated from RPL_PROFILE hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
|
|
RPL_WKSTA_2::RPL_WKSTA_2( RPL_SERVER_REF & rplsrvref,
|
|
const TCHAR *pszWkstaName )
|
|
: RPL_WKSTA_0( rplsrvref, pszWkstaName ),
|
|
_dwFlags( 0 ),
|
|
_nlsComment(),
|
|
_nlsWkstaInProfile(),
|
|
_nlsBootName(),
|
|
_nlsFitFile(),
|
|
_nlsAdapterName(),
|
|
_dwTcpIpAddress( TCPIP_DEFAULT ),
|
|
_dwTcpIpSubnet( TCPIP_DEFAULT ),
|
|
_dwTcpIpGateway( TCPIP_DEFAULT ),
|
|
_nlsCreateAsCloneOf()
|
|
{
|
|
if ( QueryError() )
|
|
return;
|
|
|
|
APIERR err = NERR_Success;
|
|
if ( (err = _nlsComment.QueryError()) != NERR_Success
|
|
|| (err = _nlsWkstaInProfile.QueryError()) != NERR_Success
|
|
|| (err = _nlsBootName.QueryError()) != NERR_Success
|
|
|| (err = _nlsFitFile.QueryError()) != NERR_Success
|
|
|| (err = _nlsAdapterName.QueryError()) != NERR_Success
|
|
|| (err = _nlsCreateAsCloneOf.QueryError()) != NERR_Success
|
|
)
|
|
{
|
|
DBGEOL( "RPL_WKSTA_2::ctor error " << err );
|
|
ReportError( err );
|
|
return;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_WKSTA_2::~RPL_WKSTA_2
|
|
|
|
SYNOPSIS: Destructor for RPL_WKSTA_2 class
|
|
|
|
HISTORY:
|
|
JonN 06-Aug-1993 templated from RPL_PROFILE hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
RPL_WKSTA_2::~RPL_WKSTA_2()
|
|
{
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_WKSTA_2::W_Write
|
|
|
|
SYNOPSIS: Helper function for WriteNew and WriteInfo -- loads
|
|
current values into the API buffer
|
|
|
|
Note that this does not use _nlsStoredWkstaName.
|
|
|
|
EXIT: Returns API error code
|
|
|
|
HISTORY:
|
|
JonN 06-Aug-1993 templated from RPL_PROFILE hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_WKSTA_2::W_Write()
|
|
{
|
|
RPL_WKSTA_INFO_2 *prplwkstainfo2 =
|
|
(RPL_WKSTA_INFO_2 *)QueryBufferPtr();
|
|
ASSERT( prplwkstainfo2 != NULL );
|
|
prplwkstainfo2->WkstaName = (TCHAR *)QueryWkstaName();
|
|
prplwkstainfo2->WkstaComment = (TCHAR *)QueryComment();
|
|
prplwkstainfo2->Flags = QueryFlags();
|
|
prplwkstainfo2->ProfileName = EMPTYTONULL((TCHAR *)QueryWkstaInProfile());
|
|
prplwkstainfo2->BootName = EMPTYTONULL((TCHAR *)QueryBootName());
|
|
prplwkstainfo2->FitFile = EMPTYTONULL((TCHAR *)QueryFitFile());
|
|
prplwkstainfo2->AdapterName = EMPTYTONULL((TCHAR *)QueryAdapterName());
|
|
prplwkstainfo2->TcpIpAddress = QueryTcpIpAddress();
|
|
prplwkstainfo2->TcpIpSubnet = QueryTcpIpSubnet();
|
|
prplwkstainfo2->TcpIpGateway = QueryTcpIpGateway();
|
|
|
|
return NERR_Success;
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_WKSTA_2::CloneFrom
|
|
|
|
SYNOPSIS: Copies information on the user
|
|
|
|
EXIT: Returns an API error code
|
|
|
|
NOTES: W_CloneFrom copies all member objects, but it does not
|
|
update the otherwise unused pointers in the API buffer.
|
|
This is left for the outermost routine, CloneFrom().
|
|
Only the otherwise unused pointers need to be fixed
|
|
here, the rest will be fixed in WriteInfo/WriteNew.
|
|
|
|
HISTORY:
|
|
JonN 06-Aug-1993 templated from RPL_PROFILE hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_WKSTA_2::CloneFrom( const RPL_WKSTA_2 & rplwksta2 )
|
|
{
|
|
APIERR err = W_CloneFrom( rplwksta2 );
|
|
if ( err != NERR_Success )
|
|
{
|
|
DBGEOL( "RPL_WKSTA_2::W_CloneFrom failed with error code " << err );
|
|
|
|
ReportError( err ); // make unconstructed here
|
|
}
|
|
else
|
|
{
|
|
/*
|
|
This is where I fix up the otherwise unused pointers.
|
|
*/
|
|
}
|
|
|
|
return err;
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_WKSTA_2::I_GetInfo
|
|
|
|
SYNOPSIS: Gets information about the local RPL_WKSTA
|
|
|
|
ENTRY: Object should have a valid name
|
|
|
|
EXIT: Returns a standard LANMAN error code
|
|
|
|
NOTES: Name validation and memory allocation are done
|
|
at this point, not at construction.
|
|
|
|
HISTORY:
|
|
JonN 06-Aug-1993 templated from RPL_PROFILE hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_WKSTA_2::I_GetInfo()
|
|
{
|
|
// Validate the workstation name
|
|
|
|
BYTE *pBuffer = NULL;
|
|
APIERR err = QueryServerRef().WkstaGetInfo( QueryStoredWkstaName(),
|
|
2,
|
|
&pBuffer );
|
|
SetBufferPtr( pBuffer );
|
|
|
|
if ( err != NERR_Success )
|
|
{
|
|
DBGEOL( "RPL_WKSTA_2::I_GetInfo: WkstaGetInfo( \""
|
|
<< QueryStoredWkstaName()
|
|
<< "\" ) failed with error " << err );
|
|
return err;
|
|
}
|
|
|
|
RPL_WKSTA_INFO_2 *prplwksta2 = (RPL_WKSTA_INFO_2 *)QueryBufferPtr();
|
|
UIASSERT( prplwksta2 != NULL );
|
|
|
|
if ( (err = SetWkstaName( prplwksta2->WkstaName )) != NERR_Success
|
|
|| (err = SetStoredWkstaName( prplwksta2->WkstaName )) != NERR_Success
|
|
|| (err = SetComment( prplwksta2->WkstaComment )) != NERR_Success
|
|
|| (err = SetFlags( prplwksta2->Flags )) != NERR_Success
|
|
|| (err = SetWkstaInProfile(
|
|
prplwksta2->ProfileName )) != NERR_Success
|
|
|| (err = SetBootName( prplwksta2->BootName )) != NERR_Success
|
|
|| (err = SetFitFile( prplwksta2->FitFile )) != NERR_Success
|
|
|| (err = SetAdapterName( prplwksta2->AdapterName )) != NERR_Success
|
|
|| (err = SetTcpIpAddress( prplwksta2->TcpIpAddress )) != NERR_Success
|
|
|| (err = SetTcpIpSubnet( prplwksta2->TcpIpSubnet )) != NERR_Success
|
|
|| (err = SetTcpIpGateway( prplwksta2->TcpIpGateway )) != NERR_Success
|
|
)
|
|
{
|
|
DBGEOL( "RPL_WKSTA_2::I_GetInfo(): set error " << err );
|
|
}
|
|
else
|
|
{
|
|
TRACEEOL( "RPL_WKSTA_2::I_GetInfo: updated stored wksta name" );
|
|
}
|
|
|
|
return err;
|
|
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_WKSTA_2::I_WriteInfo
|
|
|
|
SYNOPSIS: Writes information about the RPL_WKSTA
|
|
|
|
EXIT: Returns API error code
|
|
|
|
HISTORY:
|
|
JonN 06-Aug-1993 templated from RPL_PROFILE hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_WKSTA_2::I_WriteInfo()
|
|
{
|
|
APIERR err = W_Write();
|
|
|
|
#ifdef DEBUG
|
|
if (err != NERR_Success)
|
|
{
|
|
DBGEOL( "RPL_WKSTA_2::I_WriteInfo(): W_Write( \""
|
|
<< QueryAdapterName()
|
|
<< "\" ) failed; error " << err );
|
|
}
|
|
#endif
|
|
|
|
if ( err == NERR_Success )
|
|
{
|
|
err = QueryServerRef().WkstaSetInfo( QueryStoredWkstaName(),
|
|
2,
|
|
QueryBufferPtr(),
|
|
&_dwErrorParameter
|
|
);
|
|
|
|
if (err == NERR_Success)
|
|
{
|
|
err = SetStoredWkstaName( QueryWkstaName() );
|
|
TRACEEOL( "RPL_WKSTA_2::I_WriteInfo: updated stored wksta name" );
|
|
}
|
|
#ifdef DEBUG
|
|
else
|
|
{
|
|
DBGEOL( "RPL_WKSTA_2::I_WriteInfo(): WkstaSetInfo( \""
|
|
<< QueryStoredWkstaName()
|
|
<< "\" ) failed; error " << err
|
|
<< ", error parameter " << QueryErrorParameter() );
|
|
}
|
|
#endif
|
|
}
|
|
|
|
return err;
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_WKSTA_2::I_WriteNew
|
|
|
|
SYNOPSIS: Creates a new workstation
|
|
|
|
ENTRY:
|
|
|
|
EXIT: Returns an API error code
|
|
|
|
NOTES:
|
|
|
|
HISTORY:
|
|
JonN 06-Aug-1993 templated from RPL_PROFILE hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_WKSTA_2::I_WriteNew()
|
|
{
|
|
APIERR err = W_Write();
|
|
|
|
do
|
|
{
|
|
if (err != NERR_Success)
|
|
{
|
|
DBGEOL( "RPL_WKSTA_2::I_WriteNew(): W_Write() failed; new name \""
|
|
<< QueryWkstaName()
|
|
<< "\", error " << err );
|
|
break;
|
|
}
|
|
|
|
if (_nlsCreateAsCloneOf.strlen() > 0)
|
|
{
|
|
err = QueryServerRef().WkstaClone( _nlsCreateAsCloneOf.QueryPch(),
|
|
QueryWkstaName(),
|
|
QueryComment(),
|
|
QueryAdapterName(),
|
|
QueryTcpIpAddress()
|
|
);
|
|
if (err != NERR_Success)
|
|
{
|
|
DBGEOL( "RPL_WKSTA_2: WkstaClone( \"" << QueryWkstaName()
|
|
<< "\" ) failed; error " << err );
|
|
break;
|
|
}
|
|
|
|
err = QueryServerRef().WkstaSetInfo( QueryWkstaName(),
|
|
2,
|
|
QueryBufferPtr(),
|
|
&_dwErrorParameter
|
|
);
|
|
|
|
if (err != NERR_Success)
|
|
{
|
|
DBGEOL( "RPL_WKSTA_2::I_WriteInfo(): WkstaSetInfo( \""
|
|
<< QueryWkstaName()
|
|
<< "\" ) failed; error " << err
|
|
<< ", error parameter " << QueryErrorParameter() );
|
|
break;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
err = QueryServerRef().WkstaAdd( 2,
|
|
QueryBufferPtr(),
|
|
&_dwErrorParameter
|
|
);
|
|
|
|
if (err != NERR_Success)
|
|
{
|
|
DBGEOL( "RPL_WKSTA_2: WkstaAdd( \"" << QueryWkstaName()
|
|
<< "\" ) failed; error " << err
|
|
<< ", error parameter " << QueryErrorParameter() );
|
|
break;
|
|
}
|
|
|
|
} while (FALSE); // false loop
|
|
|
|
return err;
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_WKSTA_2::I_CreateNew
|
|
|
|
SYNOPSIS: Sets up object for subsequent WriteNew
|
|
|
|
EXIT: Returns a standard LANMAN error code
|
|
|
|
HISTORY:
|
|
JonN 06-Aug-1993 templated from RPL_PROFILE hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_WKSTA_2::I_CreateNew()
|
|
{
|
|
|
|
APIERR err = NERR_Success;
|
|
if ( (err = W_CreateNew()) != NERR_Success
|
|
|| (err = ResizeBuffer( sizeof(RPL_WKSTA_INFO_2) )) != NERR_Success
|
|
|| (err = ClearBuffer()) != NERR_Success
|
|
)
|
|
{
|
|
DBGEOL( "RPL_WKSTA_2::I_CreateNew(): error " << err );
|
|
}
|
|
|
|
return err;
|
|
|
|
}
|
|
|
|
|
|
/**********************************************************\
|
|
|
|
NAME: RPL_WKSTA_2::I_ChangeToNew
|
|
|
|
SYNOPSIS: NEW_LM_OBJ::ChangeToNew() transforms a NEW_LM_OBJ from VALID
|
|
to NEW status only when a corresponding I_ChangeToNew()
|
|
exists. The RPL_WKSTA API buffer is the same for new
|
|
and valid objects, so this method doesn't have to do
|
|
much.
|
|
|
|
HISTORY:
|
|
JonN 06-Aug-1993 templated from RPL_PROFILE hierarchy
|
|
|
|
\**********************************************************/
|
|
|
|
APIERR RPL_WKSTA_2::I_ChangeToNew()
|
|
{
|
|
return W_ChangeToNew();
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_WKSTA_2::W_CloneFrom
|
|
|
|
SYNOPSIS: Copies information on the RPL_WKSTA
|
|
|
|
EXIT: Returns an API error code
|
|
|
|
HISTORY:
|
|
JonN 06-Aug-1993 templated from RPL_PROFILE hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_WKSTA_2::W_CloneFrom( const RPL_WKSTA_2 & rplwksta2 )
|
|
{
|
|
APIERR err = NERR_Success;
|
|
if ( (err = RPL_WKSTA::W_CloneFrom( rplwksta2 )) != NERR_Success
|
|
|| (err = SetComment( rplwksta2.QueryComment() )) != NERR_Success
|
|
|| (err = SetFlags( rplwksta2.QueryFlags() )) != NERR_Success
|
|
|| (err = SetWkstaInProfile(
|
|
rplwksta2.QueryWkstaInProfile() )) != NERR_Success
|
|
|| (err = SetBootName( rplwksta2.QueryBootName() )) != NERR_Success
|
|
|| (err = SetFitFile( rplwksta2.QueryFitFile() )) != NERR_Success
|
|
|| (err = SetAdapterName( rplwksta2.QueryAdapterName() )) != NERR_Success
|
|
|| (err = SetTcpIpAddress( rplwksta2.QueryTcpIpAddress() )) != NERR_Success
|
|
|| (err = SetTcpIpSubnet( rplwksta2.QueryTcpIpSubnet() )) != NERR_Success
|
|
|| (err = SetTcpIpGateway( rplwksta2.QueryTcpIpGateway() )) != NERR_Success
|
|
|| (err = CreateAsCloneOf( rplwksta2._nlsCreateAsCloneOf.QueryPch() )) != NERR_Success
|
|
)
|
|
{
|
|
DBGEOL( SZ("RPL_WKSTA_2::W_CloneFrom error ") << err );
|
|
}
|
|
|
|
return err;
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_WKSTA_2::W_CreateNew
|
|
|
|
SYNOPSIS: initializes private data members for new object
|
|
|
|
EXIT: Returns an API error code
|
|
|
|
HISTORY:
|
|
JonN 06-Aug-1993 templated from RPL_PROFILE hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_WKSTA_2::W_CreateNew()
|
|
{
|
|
APIERR err = NERR_Success;
|
|
if ( (err = RPL_WKSTA::W_CreateNew()) != NERR_Success
|
|
|| (err = SetComment( NULL )) != NERR_Success
|
|
|| (err = SetFlags( WKSTA_FLAGS_LOGON_INPUT_OPTIONAL
|
|
| WKSTA_FLAGS_SHARING_TRUE
|
|
| WKSTA_FLAGS_DHCP_TRUE
|
|
| WKSTA_FLAGS_DELETE_FALSE )) != NERR_Success
|
|
|| (err = SetWkstaInProfile( NULL )) != NERR_Success
|
|
|| (err = SetBootName( NULL )) != NERR_Success
|
|
|| (err = SetFitFile( NULL )) != NERR_Success
|
|
|| (err = SetAdapterName( NULL )) != NERR_Success
|
|
|| (err = SetTcpIpAddress( TCPIP_DEFAULT )) != NERR_Success
|
|
|| (err = SetTcpIpSubnet( TCPIP_DEFAULT )) != NERR_Success
|
|
|| (err = SetTcpIpGateway( TCPIP_DEFAULT )) != NERR_Success
|
|
|| (err = CreateAsCloneOf( NULL )) != NERR_Success
|
|
)
|
|
{
|
|
DBGEOL( SZ("RPL_WKSTA_2::W_CreateNew failed") );
|
|
}
|
|
|
|
return err;
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_WKSTA_2::CreateAsCloneOf
|
|
|
|
SYNOPSIS: When the workstation is created it will be cloned
|
|
|
|
ENTRY: workstation to be cloned
|
|
|
|
EXIT: Returns an API error code
|
|
|
|
HISTORY:
|
|
JonN 31-Mar-1994 Created
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_WKSTA_2::CreateAsCloneOf( const TCHAR * pszCreateAsCloneOf )
|
|
{
|
|
return _nlsCreateAsCloneOf.CopyFrom( pszCreateAsCloneOf );
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_WKSTA_2::SetFlags
|
|
|
|
SYNOPSIS: Changes the flags
|
|
|
|
EXIT: error code. If not NERR_Success the object is still valid.
|
|
|
|
HISTORY:
|
|
JonN 15-Mar-1994 created
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_WKSTA_2::SetFlags( DWORD dwFlags )
|
|
{
|
|
CHECK_OK( ERROR_GEN_FAILURE );
|
|
_dwFlags = dwFlags;
|
|
return NERR_Success;
|
|
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_WKSTA_2::SetWkstaInProfile
|
|
|
|
SYNOPSIS: Changes the workstation profile
|
|
|
|
EXIT: error code. If not NERR_Success the object is still valid.
|
|
|
|
HISTORY:
|
|
JonN 06-Aug-1993 templated from RPL_PROFILE hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_WKSTA_2::SetWkstaInProfile( const TCHAR * pszWkstaInProfile )
|
|
{
|
|
CHECK_OK( ERROR_GEN_FAILURE );
|
|
return _nlsWkstaInProfile.CopyFrom( pszWkstaInProfile );
|
|
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_WKSTA_2::SetComment
|
|
|
|
SYNOPSIS: Changes the comment
|
|
|
|
EXIT: error code. If not NERR_Success the object is still valid.
|
|
|
|
HISTORY:
|
|
JonN 06-Aug-1993 templated from RPL_PROFILE hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_WKSTA_2::SetComment( const TCHAR * pszComment )
|
|
{
|
|
CHECK_OK( ERROR_GEN_FAILURE );
|
|
return _nlsComment.CopyFrom( pszComment );
|
|
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_WKSTA_2::SetBootName
|
|
|
|
SYNOPSIS: Changes the boot name of a RPL_WKSTA_2
|
|
|
|
ENTRY: new boot name
|
|
|
|
EXIT: Returns an API error code
|
|
|
|
HISTORY:
|
|
JonN 09-Sep-1993 Created
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_WKSTA_2::SetBootName( const TCHAR * pszBootName )
|
|
{
|
|
return _nlsBootName.CopyFrom( pszBootName );
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_WKSTA_2::SetFitFile
|
|
|
|
SYNOPSIS: Changes the FIT file of a RPL_WKSTA_2
|
|
|
|
ENTRY: new FIT file
|
|
|
|
EXIT: Returns an API error code
|
|
|
|
HISTORY:
|
|
JonN 09-Sep-1993 Created
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_WKSTA_2::SetFitFile( const TCHAR * pszFitFile )
|
|
{
|
|
return _nlsFitFile.CopyFrom( pszFitFile );
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_WKSTA_2::SetAdapterName
|
|
|
|
SYNOPSIS: Changes the adapter name of a RPL_WKSTA_2
|
|
|
|
ENTRY: new adapter name
|
|
|
|
EXIT: Returns an API error code
|
|
|
|
NOTES: This method does not attempt to validate the adapter name
|
|
|
|
HISTORY:
|
|
JonN 09-Sep-1993 Created
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_WKSTA_2::SetAdapterName( const TCHAR * pszAdapterName )
|
|
{
|
|
return _nlsAdapterName.CopyFrom( pszAdapterName );
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_WKSTA_2::SetTcpIpAddress
|
|
|
|
SYNOPSIS: Changes the IP address
|
|
|
|
EXIT: error code. If not NERR_Success the object is still valid.
|
|
|
|
HISTORY:
|
|
JonN 06-Aug-1993 templated from RPL_PROFILE hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_WKSTA_2::SetTcpIpAddress( DWORD dwTcpIpAddress )
|
|
{
|
|
CHECK_OK( ERROR_GEN_FAILURE );
|
|
_dwTcpIpAddress = dwTcpIpAddress;
|
|
return NERR_Success;
|
|
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_WKSTA_2::SetTcpIpSubnet
|
|
|
|
SYNOPSIS: Changes the IP Subnet
|
|
|
|
EXIT: error code. If not NERR_Success the object is still valid.
|
|
|
|
HISTORY:
|
|
JonN 06-Aug-1993 templated from RPL_PROFILE hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_WKSTA_2::SetTcpIpSubnet( DWORD dwTcpIpSubnet )
|
|
{
|
|
CHECK_OK( ERROR_GEN_FAILURE );
|
|
_dwTcpIpSubnet = dwTcpIpSubnet;
|
|
return NERR_Success;
|
|
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_WKSTA_2::SetTcpIpGateway
|
|
|
|
SYNOPSIS: Changes the IP gateway
|
|
|
|
EXIT: error code. If not NERR_Success the object is still valid.
|
|
|
|
HISTORY:
|
|
JonN 06-Aug-1993 templated from RPL_PROFILE hierarchy
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_WKSTA_2::SetTcpIpGateway( DWORD dwTcpIpGateway )
|
|
{
|
|
CHECK_OK( ERROR_GEN_FAILURE );
|
|
_dwTcpIpGateway = dwTcpIpGateway;
|
|
return NERR_Success;
|
|
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_WKSTA_2::SetLogonInput
|
|
|
|
SYNOPSIS: Changes the LogonInput
|
|
|
|
EXIT: error code.
|
|
|
|
HISTORY:
|
|
JonN 07-Dec-1993 Created
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_WKSTA_2::SetLogonInput( RPL_LOGON_INPUT_ENUM LogonInput )
|
|
{
|
|
CHECK_OK( ERROR_GEN_FAILURE );
|
|
DWORD fLogonInput = WKSTA_FLAGS_LOGON_INPUT_IMPOSSIBLE;
|
|
|
|
switch (LogonInput)
|
|
{
|
|
case RPL_LOGON_INPUT_REQUIRED:
|
|
fLogonInput = WKSTA_FLAGS_LOGON_INPUT_REQUIRED;
|
|
break;
|
|
case RPL_LOGON_INPUT_OPTIONAL:
|
|
fLogonInput = WKSTA_FLAGS_LOGON_INPUT_OPTIONAL;
|
|
break;
|
|
case RPL_LOGON_INPUT_DONTASK:
|
|
break;
|
|
default:
|
|
DBGEOL( "RPL_WKSTA_2::SetLogonInput: bad LogonInput value "
|
|
<< (int)LogonInput );
|
|
break;
|
|
}
|
|
|
|
_dwFlags &= ~WKSTA_FLAGS_MASK_LOGON_INPUT;
|
|
_dwFlags |= fLogonInput;
|
|
|
|
return NERR_Success;
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_WKSTA_2::SetTcpIpEnabled
|
|
|
|
SYNOPSIS: Changes the TcpIpEnabled
|
|
|
|
EXIT: error code.
|
|
|
|
HISTORY:
|
|
JonN 27-Apr-1994 Created
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_WKSTA_2::SetTcpIpEnabled( RPL_TCPIP_ENUM TcpIpEnabled )
|
|
{
|
|
CHECK_OK( ERROR_GEN_FAILURE );
|
|
DWORD fTcpIpEnabled = WKSTA_FLAGS_DHCP_TRUE;
|
|
|
|
switch (TcpIpEnabled)
|
|
{
|
|
case RPL_TCPIP_SPECIFIC:
|
|
fTcpIpEnabled = WKSTA_FLAGS_DHCP_FALSE;
|
|
break;
|
|
default:
|
|
DBGEOL( "RPL_WKSTA_2::SetTcpIpEnabled: bad DHCP value "
|
|
<< (int)TcpIpEnabled );
|
|
// fall through
|
|
case RPL_TCPIP_DHCP:
|
|
break;
|
|
}
|
|
|
|
_dwFlags &= ~WKSTA_FLAGS_MASK_DHCP;
|
|
_dwFlags |= fTcpIpEnabled;
|
|
|
|
return NERR_Success;
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_WKSTA_2::SetDeleteAccount
|
|
|
|
SYNOPSIS: Changes the DeleteAccount. This setting indicates whether
|
|
the corresponding user account should be deleted when
|
|
RPLMGR deletes the workstation.
|
|
|
|
EXIT: error code.
|
|
|
|
HISTORY:
|
|
JonN 08-Jun-1994 Created
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_WKSTA_2::SetDeleteAccount( BOOL fDeleteAccount )
|
|
{
|
|
CHECK_OK( ERROR_GEN_FAILURE );
|
|
if (fDeleteAccount) {
|
|
_dwFlags |= WKSTA_FLAGS_DELETE_TRUE;
|
|
_dwFlags &= ~WKSTA_FLAGS_DELETE_FALSE;
|
|
} else {
|
|
_dwFlags |= WKSTA_FLAGS_DELETE_FALSE;
|
|
_dwFlags &= ~WKSTA_FLAGS_DELETE_TRUE;
|
|
}
|
|
return NERR_Success;
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_WKSTA_2::SetSharing
|
|
|
|
SYNOPSIS: Changes the Sharing
|
|
|
|
EXIT: error code.
|
|
|
|
HISTORY:
|
|
JonN 07-Dec-1993 Created
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_WKSTA_2::SetSharing( BOOL fSharing )
|
|
{
|
|
CHECK_OK( ERROR_GEN_FAILURE );
|
|
if (fSharing) {
|
|
_dwFlags |= WKSTA_FLAGS_SHARING_TRUE;
|
|
_dwFlags &= ~WKSTA_FLAGS_SHARING_FALSE;
|
|
} else {
|
|
_dwFlags |= WKSTA_FLAGS_SHARING_FALSE;
|
|
_dwFlags &= ~WKSTA_FLAGS_SHARING_TRUE;
|
|
}
|
|
return NERR_Success;
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_ADAPTER::RPL_ADAPTER
|
|
|
|
SYNOPSIS: Class for deleting RPL adapters
|
|
|
|
ENTRY: rplsrvref - server against which to perform operations
|
|
pszAdapterName - adapter name (unique name)
|
|
|
|
EXIT: Object is constructed
|
|
|
|
HISTORY:
|
|
JonN 09-Sep-1993 Created
|
|
|
|
********************************************************************/
|
|
|
|
RPL_ADAPTER::RPL_ADAPTER( RPL_SERVER_REF & rplsrvref,
|
|
const TCHAR * pszAdapterName )
|
|
: RPL_OBJECT( rplsrvref ),
|
|
_nlsAdapterName() // will call SetAdapterName later in ctor
|
|
{
|
|
if ( QueryError() )
|
|
return;
|
|
|
|
APIERR err = SetAdapterName( pszAdapterName );
|
|
if ( err != NERR_Success )
|
|
{
|
|
DBGEOL( "RPL_ADAPTER::ctor error " << err );
|
|
ReportError( err );
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_ADAPTER::~RPL_ADAPTER
|
|
|
|
SYNOPSIS: Destructor for RPL_ADAPTER class
|
|
|
|
ENTRY:
|
|
|
|
EXIT:
|
|
|
|
NOTES:
|
|
|
|
HISTORY:
|
|
JonN 09-Sep-1993 Created
|
|
|
|
********************************************************************/
|
|
|
|
RPL_ADAPTER::~RPL_ADAPTER()
|
|
{
|
|
// nothing to do here
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_ADAPTER::QueryAdapterName
|
|
|
|
SYNOPSIS: Returns the adapter name of a RPL_ADAPTER
|
|
|
|
EXIT: Returns a pointer to the adapter name, which is the unique
|
|
name for a RPL_ADAPTER
|
|
|
|
NOTE: Valid for objects in CONSTRUCTED state, thus no CHECK_OK
|
|
|
|
HISTORY:
|
|
JonN 09-Sep-1993 Created
|
|
|
|
********************************************************************/
|
|
|
|
const TCHAR *RPL_ADAPTER::QueryAdapterName() const
|
|
{
|
|
return _nlsAdapterName.QueryPch();
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_ADAPTER::SetAdapterName
|
|
|
|
SYNOPSIS: Changes the adapter name of a RPL_ADAPTER
|
|
|
|
ENTRY: new adapter name (unique name)
|
|
|
|
EXIT: Returns an API error code
|
|
|
|
NOTES: This method does not attempt to validate the adapter name
|
|
|
|
HISTORY:
|
|
JonN 09-Sep-1993 Created
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_ADAPTER::SetAdapterName( const TCHAR * pszAdapterName )
|
|
{
|
|
return _nlsAdapterName.CopyFrom( pszAdapterName );
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_ADAPTER::I_Delete
|
|
|
|
SYNOPSIS: Deletes the RPL_ADAPTER (calls NetRpl API)
|
|
|
|
RETURNS: Returns an API error code
|
|
|
|
HISTORY:
|
|
JonN 09-Sep-1993 Created
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_ADAPTER::I_Delete( UINT uiForce )
|
|
{
|
|
UNREFERENCED( uiForce );
|
|
APIERR err = QueryServerRef().AdapterDel( QueryAdapterName() );
|
|
|
|
#ifdef DEBUG
|
|
if (err != NERR_Success)
|
|
{
|
|
DBGEOL( "RPL_ADAPTER::I_Delete(): name \"" << QueryAdapterName()
|
|
<< "\" error " << err );
|
|
}
|
|
#endif
|
|
|
|
return err;
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: RPL_ADAPTER::ValidateAdapterName
|
|
|
|
SYNOPSIS: Validates an adapter name
|
|
|
|
ENTRY: adapter name
|
|
|
|
EXIT: Returns an API error code
|
|
|
|
HISTORY:
|
|
JonN 19-Aug-1993 Created
|
|
|
|
********************************************************************/
|
|
|
|
APIERR RPL_ADAPTER::ValidateAdapterName( const TCHAR * pszAdapterName )
|
|
{
|
|
// CODEWORK more validation?
|
|
|
|
APIERR err = NERR_Success;
|
|
|
|
if ( ::strlenf(pszAdapterName) != RPL_ADAPTER_NAME_LENGTH )
|
|
{
|
|
DBGEOL( "RPL_WKSTA::ValidateAdapterName( \"" << pszAdapterName
|
|
<< "\" ): error " << err );
|
|
err = ERROR_INVALID_PARAMETER; // CODEWORK correct error
|
|
}
|
|
|
|
return err;
|
|
}
|
|
|
|
|