WindowsXP-SP1/admin/netui/nwc/nwc/nwshare.cxx
2020-09-30 16:53:49 +02:00

407 lines
10 KiB
C++

/**********************************************************************/
/** Microsoft Windows NT **/
/** Copyright(c) Microsoft Corp., 1993 **/
/**********************************************************************/
/*
nwc.cxx
The file contains the classes for the Netware Gateway Add Share dialog
FILE HISTORY:
ChuckC 30-Oct-1993 Created
*/
#define INCL_NET
#define INCL_NETLIB
#define INCL_WINDOWS
#define INCL_WINDOWS_GDI
#define INCL_NETERRORS
#define INCL_DOSERRORS
#define INCL_ICANON
#include <lmui.hxx>
#if defined(DEBUG)
static const CHAR szFileName[] = __FILE__;
#define _FILENAME_DEFINED_ONCE szFileName
#endif
#define INCL_BLT_WINDOW
#define INCL_BLT_DIALOG
#define INCL_BLT_CONTROL
#define INCL_BLT_CLIENT
#define INCL_BLT_MSGPOPUP
#define INCL_BLT_EVENT
#define INCL_BLT_MISC
#define INCL_BLT_CC
#define INCL_BLT_SPIN_GROUP
#define INCL_BLT_GROUP
#include <blt.hxx>
#include <uiassert.hxx>
#include <uitrace.hxx>
#include <lmoshare.hxx>
#include <dbgstr.hxx>
#define USERS_DEFAULT 32
#define USERS_MIN 1
extern "C"
{
#include <npapi.h>
#include <nwevent.h>
#include <nwc.h>
#include <nwapi.h>
#include <shellapi.h>
#include <mnet.h>
}
#include <nwc.hxx>
/*******************************************************************
NAME: NWC_ADDSHARE_DIALOG::NWC_ADDSHARE_DIALOG
SYNOPSIS: Constructor for the dialog.
ENTRY: hwndOwner - Hwnd of the owner window
EXIT:
RETURNS:
NOTES:
HISTORY:
ChuckC 17-Jul-1993 Created
********************************************************************/
NWC_ADDSHARE_DIALOG::NWC_ADDSHARE_DIALOG( HWND hwndOwner,
NLS_STR *pnlsAccount,
NLS_STR *pnlsPassword)
: DIALOG_WINDOW( MAKEINTRESOURCE( IDD_NWC_GWADD_DLG), hwndOwner ),
_sleShare(this, GW_SLE_SHARENAME, LM20_NNLEN ),
_slePath(this, GW_SLE_PATH),
_comboDrives(this,GW_COMBO_DRIVE),
_sleComment( this, GW_SLE_COMMENT, LM20_MAXCOMMENTSZ ),
_mgrpUserLimit( this, GW_RB_UNLIMITED, 2, GW_RB_UNLIMITED), // 2 buttons
_spsleUsers( this, GW_SLE_USERS, USERS_DEFAULT,
USERS_MIN, (0xFFFFFFFE - USERS_MIN + 1), TRUE),
_spgrpUsers( this, GW_SB_USERS_GROUP, GW_SB_USERS_UP, GW_SB_USERS_DOWN),
_pnlsAccount(pnlsAccount),
_pnlsPassword(pnlsPassword)
{
APIERR err ;
if ( QueryError() != NERR_Success )
return;
if ( ((err = _mgrpUserLimit.QueryError()) != NERR_Success )
|| ((err = _spgrpUsers.AddAssociation( &_spsleUsers )) != NERR_Success )
|| ((err = _mgrpUserLimit.AddAssociation( GW_RB_USERS, &_spgrpUsers ))
!= NERR_Success ) )
{
ReportError(err) ;
return ;
}
if (err = FillDrivesCombo())
{
ReportError(err) ;
return;
}
Invalidate() ;
}
/*******************************************************************
NAME: NWC_ADDSHARE_DIALOG::~NWC_ADDSHARE_DIALOG
SYNOPSIS: Destructor
ENTRY:
EXIT:
RETURNS:
NOTES:
HISTORY:
ChuckC 17-Jul-1993 Created
********************************************************************/
NWC_ADDSHARE_DIALOG::~NWC_ADDSHARE_DIALOG()
{
// Nothing to do for now
}
/*******************************************************************
NAME: NWC_ADDSHARE_DIALOG::FillDrivesCombo
SYNOPSIS: Fill combo with list of avail drives
ENTRY:
EXIT:
RETURNS:
NOTES:
HISTORY:
ChuckC 17-Jul-1993 Created
********************************************************************/
APIERR NWC_ADDSHARE_DIALOG::FillDrivesCombo(void)
{
APIERR status = NERR_Success;
TCHAR szDrive[4] ;
INT i ;
UINT res ;
strcpyf(szDrive, SZ("A:\\")) ;
for (i = 0; i < 26; i++)
{
szDrive[0] = TCH('Z')-i ;
res = GetDriveType(szDrive) ;
if (res == 0 || res == 1)
{
szDrive[2] = 0 ;
if (_comboDrives.AddItem(szDrive) < 0)
return ERROR_NOT_ENOUGH_MEMORY ;
szDrive[2] = TCH('\\') ;
}
}
_comboDrives.SelectItem(0) ;
return status;
}
/*******************************************************************
NAME: NWC_ADDSHARE_DIALOG::OnOK
SYNOPSIS: Process OnOK when OK button is hit.
ENTRY:
EXIT:
RETURNS:
NOTES:
HISTORY:
ChuckC 17-Jul-1993 Created
********************************************************************/
BOOL NWC_ADDSHARE_DIALOG::OnOK( )
{
NLS_STR nlsShare ;
NLS_STR nlsPath ;
NLS_STR nlsDrive ;
NLS_STR nlsComment ;
NLS_STR nlsDrivePath ;
ULONG UserLimit ;
APIERR err ;
//
// no need check for contruction from above. let the Query methods fail
//
if ((err = _slePath.QueryText(&nlsPath)) ||
(err = _sleShare.QueryText(&nlsShare)) ||
(err = _comboDrives.QueryText(&nlsDrive)) ||
(err = QueryComment(&nlsComment)) ||
(err = nlsDrivePath.CopyFrom(nlsDrive)) ||
(err = nlsDrivePath.AppendChar(TCH('\\'))))
{
::MsgPopup(this, err) ;
return TRUE ;
}
UserLimit = QueryUserLimit() ;
SHARE_2 share(nlsShare.QueryPch()) ;
if ((err = share.QueryError()) ||
(err = share.CreateNew()) ||
(err = share.SetComment(nlsComment)) ||
(err = share.SetMaxUses(UserLimit)) ||
(err = share.SetPath(nlsDrivePath.QueryPch())) ||
(err = share.SetResourceType(STYPE_DISKTREE)))
{
::MsgPopup(this, err) ;
return TRUE ;
}
//
// Check if the name of the share is accessible from DOS machine
//
ULONG nType;
if ( ::I_MNetPathType(NULL, nlsShare, &nType, INPT_FLAGS_OLDPATHS )
!= NERR_Success )
{
if ( ::MsgPopup( this, IDS_SHARE_NOT_ACCESSIBLE_FROM_DOS,
MPSEV_INFO, MP_YESNO, nlsShare, MP_NO ) == IDNO )
{
_sleShare.SelectString();
_sleShare.ClaimFocus();
return TRUE;
}
}
if (err = NwAddGWDevice((LPWSTR)nlsDrive.QueryPch(),
(LPWSTR)nlsPath.QueryPch(),
(LPWSTR)_pnlsAccount->QueryPch(),
(LPWSTR)_pnlsPassword->QueryPch(),
TRUE))
{
if (err == ERROR_ACCESS_DENIED ||
err == ERROR_NO_SUCH_USER ||
err == ERROR_INVALID_PASSWORD)
{
RESOURCE_STR nlsErr(err) ;
APIERR err1 = nlsErr.QueryError() ;
if (!err1)
::MsgPopup(this,
IDS_GATEWAY_NO_ACCESS,
MPSEV_ERROR,
MP_OK,
nlsErr.QueryPch()) ;
else
::MsgPopup(this, err1) ;
}
else
::MsgPopup(this, err) ;
return TRUE ;
}
if (err = share.WriteNew())
{
APIERR err1 = NwDeleteGWDevice((LPWSTR)nlsDrive.QueryPch(),
NW_GW_UPDATE_REGISTRY) ;
if (err == ERROR_INVALID_DRIVE)
err = IDS_ACCESS_PROBLEM ;
if (err == ERROR_ACCESS_DENIED ||
err == ERROR_NO_SUCH_USER ||
err == ERROR_INVALID_PASSWORD)
{
RESOURCE_STR nlsErr(err) ;
err1 = nlsErr.QueryError() ;
if (!err1)
::MsgPopup(this,
IDS_GATEWAY_NO_ACCESS,
MPSEV_ERROR,
MP_OK,
nlsErr.QueryPch()) ;
else
::MsgPopup(this, err1) ;
}
else
::MsgPopup(this, err) ;
return TRUE ;
}
if (err == NO_ERROR)
{
(void) NwRegisterGatewayShare((LPWSTR)nlsShare.QueryPch(),
(LPWSTR)nlsDrive.QueryPch()) ;
}
Dismiss() ;
return TRUE ;
}
/*******************************************************************
NAME: NWC_ADDSHARE_DIALOG::QueryHelpContext
SYNOPSIS: Get the help context for this dialog
ENTRY:
EXIT:
RETURNS: ULONG - The help context for this dialog
NOTES:
HISTORY:
ChuckC 17-Jul-1993 Created
********************************************************************/
ULONG NWC_ADDSHARE_DIALOG::QueryHelpContext( VOID )
{
return HC_NWC_ADDSHARE;
}
/*******************************************************************
NAME: NWC_ADDSHARE_DIALOG::QueryUserLimit
SYNOPSIS: Get the user limit from the magic group
ENTRY:
EXIT:
RETURNS: The user limit stored in the user limit magic group
NOTES:
HISTORY:
Yi-HsinS 8/15/91 Created
********************************************************************/
ULONG NWC_ADDSHARE_DIALOG::QueryUserLimit( VOID ) const
{
ULONG ulUserLimit;
switch ( _mgrpUserLimit.QuerySelection() )
{
case GW_RB_UNLIMITED:
ulUserLimit = (ULONG) SHI_USES_UNLIMITED;
break;
case GW_RB_USERS:
// We don't need to check whether the value is valid or not
// because SPIN_BUTTON checks it.
ulUserLimit = _spsleUsers.QueryValue();
UIASSERT( ( ulUserLimit <= _spsleUsers.QueryMax() )
&& ( ulUserLimit >= USERS_MIN )
);
break;
default:
UIASSERT(!SZ("User Limit: This shouldn't have happened!\n\r"));
ulUserLimit = (ULONG) SHI_USES_UNLIMITED;
break;
}
return ulUserLimit;
}