506 lines
12 KiB
C++
506 lines
12 KiB
C++
|
/**********************************************************************/
|
||
|
/** Microsoft Windows NT **/
|
||
|
/** Copyright(c) Microsoft Corp., 1992 **/
|
||
|
/**********************************************************************/
|
||
|
|
||
|
/*
|
||
|
* sharemgt.cxx
|
||
|
* Contains the dialog for managing shares in the server manager
|
||
|
* SHARE_MANAGEMENT_DIALOG
|
||
|
*
|
||
|
* FILE HISTORY:
|
||
|
* Yi-HsinS 1/6/92 Created
|
||
|
* Yi-HsinS 3/12/92 Fixed behaviour of default buttons
|
||
|
* and added SEL_SRV_ONLY flag to
|
||
|
* STANDALONE_SET_FOCUS_DIALOG.
|
||
|
* Yi-HsinS 4/2/92 Added MayRun
|
||
|
* Yi-HsinS 5/20/92 Added call to IsValid on when Add
|
||
|
* Share button is pressed.
|
||
|
* Yi-HsinS 8/6/92 Reorganize to match Winball
|
||
|
* Yi-HsinS 11/20/92 Added support for sticky shares
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#define INCL_WINDOWS_GDI
|
||
|
#define INCL_WINDOWS
|
||
|
#define INCL_DOSERRORS
|
||
|
#define INCL_NETERRORS
|
||
|
#define INCL_NETSERVER
|
||
|
#define INCL_NETWKSTA
|
||
|
#define INCL_NETSHARE
|
||
|
#define INCL_NETCONS
|
||
|
#define INCL_NETLIB
|
||
|
#define INCL_ICANON
|
||
|
#include <lmui.hxx>
|
||
|
|
||
|
extern "C"
|
||
|
{
|
||
|
#include <sharedlg.h>
|
||
|
#include <helpnums.h>
|
||
|
#include <mnet.h>
|
||
|
}
|
||
|
|
||
|
#define INCL_BLT_DIALOG
|
||
|
#define INCL_BLT_CONTROL
|
||
|
#define INCL_BLT_MSGPOPUP
|
||
|
#define INCL_BLT_SPIN_GROUP
|
||
|
#include <blt.hxx>
|
||
|
|
||
|
#include <string.hxx>
|
||
|
#include <uitrace.hxx>
|
||
|
|
||
|
#include <lmoshare.hxx>
|
||
|
#include <lmoesh.hxx>
|
||
|
#include <lmoeconn.hxx>
|
||
|
#include <lmosrv.hxx>
|
||
|
#include <lmowks.hxx>
|
||
|
|
||
|
#include <strchlit.hxx> // for string and character constants
|
||
|
#include "sharemgt.hxx"
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: SHARE_MANAGEMENT_DIALOG::SHARE_MANAGEMENT_DIALOG
|
||
|
|
||
|
SYNOPSIS: Constructor
|
||
|
|
||
|
ENTRY: hwndParent - hwnd of the parent window
|
||
|
pszComputer - name of the selected computer
|
||
|
ulHelpContextBase - the base help context
|
||
|
|
||
|
EXIT:
|
||
|
|
||
|
RETURNS:
|
||
|
|
||
|
NOTES:
|
||
|
|
||
|
HISTORY:
|
||
|
Yi-HsinS 1/6/92 Created
|
||
|
|
||
|
********************************************************************/
|
||
|
|
||
|
SHARE_MANAGEMENT_DIALOG::SHARE_MANAGEMENT_DIALOG( HWND hwndParent,
|
||
|
const TCHAR *pszComputer,
|
||
|
ULONG ulHelpContextBase )
|
||
|
: VIEW_SHARE_DIALOG_BASE( MAKEINTRESOURCE(IDD_SHAREMANAGEMENTDLG),
|
||
|
hwndParent,
|
||
|
ulHelpContextBase,
|
||
|
STYPE_DISK_SHARE | STYPE_IPC_SHARE ),
|
||
|
_buttonStopSharing( this, BUTTON_STOPSHARING ),
|
||
|
_buttonShareInfo ( this, BUTTON_SHAREINFO ),
|
||
|
_buttonClose ( this, IDOK )
|
||
|
{
|
||
|
if ( QueryError() != NERR_Success )
|
||
|
return;
|
||
|
|
||
|
UIASSERT( pszComputer != NULL );
|
||
|
|
||
|
APIERR err;
|
||
|
if ((err = Init( pszComputer )) != NERR_Success )
|
||
|
{
|
||
|
ReportError( err );
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: SHARING_MANAGEMENT_DIALOG::Init
|
||
|
|
||
|
SYNOPSIS: Initialize all information displayed in the dialog
|
||
|
|
||
|
ENTRY: pszComputer - the name of the computer we are focusing on
|
||
|
|
||
|
EXIT:
|
||
|
|
||
|
RETURNS:
|
||
|
|
||
|
NOTES:
|
||
|
|
||
|
HISTORY:
|
||
|
Yi-HsinS 4/2/92 Created
|
||
|
|
||
|
********************************************************************/
|
||
|
|
||
|
APIERR SHARE_MANAGEMENT_DIALOG::Init( const TCHAR *pszComputer )
|
||
|
{
|
||
|
AUTO_CURSOR autocur;
|
||
|
|
||
|
//
|
||
|
// Update the listbox and the title of the listbox
|
||
|
//
|
||
|
APIERR err = InitComputer( pszComputer );
|
||
|
ResetControls();
|
||
|
return err;
|
||
|
}
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: SHARE_MANAGEMENT_DIALOG::Refresh
|
||
|
|
||
|
SYNOPSIS: Refresh the share listbox
|
||
|
|
||
|
ENTRY:
|
||
|
|
||
|
EXIT:
|
||
|
|
||
|
RETURNS:
|
||
|
|
||
|
NOTES:
|
||
|
|
||
|
HISTORY:
|
||
|
Yi-HsinS 1/7/92 Created
|
||
|
|
||
|
********************************************************************/
|
||
|
|
||
|
APIERR SHARE_MANAGEMENT_DIALOG::Refresh( VOID )
|
||
|
{
|
||
|
APIERR err = VIEW_SHARE_DIALOG_BASE::Refresh();
|
||
|
ResetControls();
|
||
|
return err;
|
||
|
}
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: SHARE_MANAGEMENT_DIALOG::ResetControls
|
||
|
|
||
|
SYNOPSIS: Enable/Disable/MakeDefault the push buttons according
|
||
|
to whether there are items in the listbox
|
||
|
|
||
|
ENTRY:
|
||
|
|
||
|
EXIT:
|
||
|
|
||
|
RETURNS:
|
||
|
|
||
|
NOTES:
|
||
|
|
||
|
HISTORY:
|
||
|
Yi-HsinS 1/8/92 Created
|
||
|
|
||
|
********************************************************************/
|
||
|
|
||
|
VOID SHARE_MANAGEMENT_DIALOG::ResetControls( VOID )
|
||
|
{
|
||
|
INT nCount = QueryLBShare()->QueryCount();
|
||
|
|
||
|
//
|
||
|
// If there are items in the listbox, select the first one
|
||
|
// and set focus to the listbox.
|
||
|
//
|
||
|
if ( nCount > 0 )
|
||
|
{
|
||
|
QueryLBShare()->SelectItem( 0 );
|
||
|
QueryLBShare()->ClaimFocus();
|
||
|
// JonN 01/27/99: PREFIX bug 444908
|
||
|
_buttonShareInfo.Enable( NULL != QueryLBShare()->QueryItem()
|
||
|
&& !QueryLBShare()->QueryItem()->IsSticky());
|
||
|
}
|
||
|
//
|
||
|
// Else set focus to the Close button
|
||
|
//
|
||
|
else
|
||
|
{
|
||
|
_buttonClose.MakeDefault();
|
||
|
_buttonClose.ClaimFocus();
|
||
|
_buttonShareInfo.Enable( FALSE );
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Disable the stop sharing buttons if there are no
|
||
|
// items in the listbox
|
||
|
//
|
||
|
_buttonStopSharing.Enable( nCount > 0 );
|
||
|
}
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: SHARE_MANAGEMENT_DIALOG::OnCommand
|
||
|
|
||
|
SYNOPSIS: Handle all push buttons commands
|
||
|
|
||
|
ENTRY: event - the CONTROL_EVENT that occurred
|
||
|
|
||
|
EXIT:
|
||
|
|
||
|
RETURNS:
|
||
|
|
||
|
NOTES:
|
||
|
|
||
|
HISTORY:
|
||
|
Yi-HsinS 1/8/92 Created
|
||
|
|
||
|
********************************************************************/
|
||
|
BOOL SHARE_MANAGEMENT_DIALOG::OnCommand( const CONTROL_EVENT &event )
|
||
|
{
|
||
|
APIERR err = NERR_Success;
|
||
|
|
||
|
switch ( event.QueryCid() )
|
||
|
{
|
||
|
case LB_SHARE:
|
||
|
if ( event.QueryCode() == LBN_SELCHANGE )
|
||
|
{
|
||
|
if ( QueryLBShare()->QueryCount() > 0 )
|
||
|
_buttonShareInfo.Enable( !QueryLBShare()->QueryItem()->IsSticky());
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return VIEW_SHARE_DIALOG_BASE::OnCommand( event );
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
case BUTTON_STOPSHARING:
|
||
|
err = OnStopSharing();
|
||
|
break;
|
||
|
|
||
|
case BUTTON_SHAREINFO:
|
||
|
err = OnShareInfo();
|
||
|
break;
|
||
|
|
||
|
case BUTTON_ADDSHARE:
|
||
|
err = OnAddShare();
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
return VIEW_SHARE_DIALOG_BASE::OnCommand( event );
|
||
|
|
||
|
}
|
||
|
|
||
|
if ( err != NERR_Success )
|
||
|
::MsgPopup( this, err );
|
||
|
|
||
|
return TRUE;
|
||
|
|
||
|
}
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: SHARE_MANAGEMENT_DIALOG::OnStopSharing
|
||
|
|
||
|
SYNOPSIS: Called when the "Stop Sharing" button is pressed.
|
||
|
Delete the selected share and pop up any warning
|
||
|
message if there are users connected to the share.
|
||
|
|
||
|
ENTRY:
|
||
|
|
||
|
EXIT:
|
||
|
|
||
|
RETURNS:
|
||
|
|
||
|
NOTES:
|
||
|
|
||
|
HISTORY:
|
||
|
Yi-HsinS 1/8/92 Created
|
||
|
|
||
|
********************************************************************/
|
||
|
APIERR SHARE_MANAGEMENT_DIALOG::OnStopSharing( VOID )
|
||
|
{
|
||
|
AUTO_CURSOR autocur;
|
||
|
|
||
|
SHARE_LISTBOX *plbShare = QueryLBShare();
|
||
|
SHARE_LBI *pshlbi = plbShare->QueryItem();
|
||
|
|
||
|
//
|
||
|
// Stop sharing the selected item in the listbox
|
||
|
//
|
||
|
BOOL fCancel = FALSE;
|
||
|
APIERR err;
|
||
|
if ( pshlbi && pshlbi->IsSticky() ) // JonN 01/27/99 PREFIX bug 444912
|
||
|
{
|
||
|
err = ::MNetShareDelSticky( QueryComputerName(),
|
||
|
pshlbi->QueryShareName()->QueryPch(),
|
||
|
0 ); // Reserved
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
err = StopShare( *(pshlbi->QueryShareName()), &fCancel );
|
||
|
}
|
||
|
|
||
|
if ( err != NERR_Success )
|
||
|
{
|
||
|
::MsgPopup( this, err );
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// If the user successfully deleted the share or if the error
|
||
|
// from deleting the share is NERR_NetNameNotFound, refresh the
|
||
|
// listbox to reflect the latest information.
|
||
|
//
|
||
|
APIERR err1 = NERR_Success;
|
||
|
if ( (!fCancel && (err == NERR_Success )) // successfully deleted a share
|
||
|
|| ( err == NERR_NetNameNotFound )
|
||
|
)
|
||
|
{
|
||
|
err1 = Refresh();
|
||
|
}
|
||
|
|
||
|
return err1;
|
||
|
}
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: SHARING_MANAGEMENT_DIALOG::OnAddShare
|
||
|
|
||
|
SYNOPSIS: Called when the "New Share" button is pressed.
|
||
|
|
||
|
ENTRY:
|
||
|
|
||
|
EXIT:
|
||
|
|
||
|
RETURNS:
|
||
|
|
||
|
NOTES:
|
||
|
|
||
|
HISTORY:
|
||
|
Yi-HsinS 4/2/92 Created
|
||
|
|
||
|
********************************************************************/
|
||
|
|
||
|
APIERR SHARE_MANAGEMENT_DIALOG::OnAddShare( VOID )
|
||
|
{
|
||
|
APIERR err = NERR_Success; // JonN 01/27/00 PREFIX bug 444911
|
||
|
|
||
|
SVRMGR_NEW_SHARE_DIALOG *pdlg =
|
||
|
new SVRMGR_NEW_SHARE_DIALOG( QueryRobustHwnd(),
|
||
|
QueryServer2(),
|
||
|
QueryHelpContextBase() );
|
||
|
|
||
|
BOOL fSucceeded;
|
||
|
if ( ( pdlg == NULL )
|
||
|
|| ((err = pdlg->QueryError()) != NERR_Success )
|
||
|
|| ((err = pdlg->Process( &fSucceeded )) != NERR_Success )
|
||
|
)
|
||
|
{
|
||
|
err = err ? err : (APIERR) ERROR_NOT_ENOUGH_MEMORY;
|
||
|
::MsgPopup( this, err );
|
||
|
}
|
||
|
|
||
|
delete pdlg;
|
||
|
pdlg = NULL;
|
||
|
|
||
|
//
|
||
|
// If the user succeeded in creating a new share,
|
||
|
// refresh the share listbox.
|
||
|
//
|
||
|
return ( fSucceeded? Refresh() : NERR_Success );
|
||
|
}
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: SHARE_MANAGEMENT_DIALOG::OnShareInfo
|
||
|
|
||
|
SYNOPSIS: Called when the "Properties" button is pressed.
|
||
|
Will pop up a dialog showing the properties of the
|
||
|
selected share.
|
||
|
|
||
|
ENTRY:
|
||
|
|
||
|
EXIT:
|
||
|
|
||
|
RETURNS:
|
||
|
|
||
|
NOTES:
|
||
|
|
||
|
HISTORY:
|
||
|
Yi-HsinS 1/8/92 Created
|
||
|
|
||
|
********************************************************************/
|
||
|
|
||
|
APIERR SHARE_MANAGEMENT_DIALOG::OnShareInfo( VOID )
|
||
|
{
|
||
|
|
||
|
APIERR err = NERR_Success;
|
||
|
|
||
|
SHARE_LISTBOX *plbShare = QueryLBShare();
|
||
|
SHARE_LBI *pshlbi = plbShare->QueryItem();
|
||
|
|
||
|
SVRMGR_SHARE_PROP_DIALOG *pdlg =
|
||
|
new SVRMGR_SHARE_PROP_DIALOG( QueryRobustHwnd(),
|
||
|
QueryServer2(),
|
||
|
*(pshlbi->QueryShareName()),
|
||
|
QueryHelpContextBase() );
|
||
|
BOOL fChanged;
|
||
|
if ( ( pdlg == NULL )
|
||
|
|| ((err = pdlg->QueryError()) != NERR_Success )
|
||
|
|| ((err = pdlg->Process( &fChanged )) != NERR_Success )
|
||
|
)
|
||
|
{
|
||
|
err = err ? err : (APIERR) ERROR_NOT_ENOUGH_MEMORY;
|
||
|
}
|
||
|
|
||
|
delete pdlg;
|
||
|
pdlg = NULL;
|
||
|
|
||
|
//
|
||
|
// If the user successfully change the path of the share or if
|
||
|
// the error from getting the share properties is NERR_NetNameNotFound,
|
||
|
// refresh the listbox to reflect the latest information.
|
||
|
//
|
||
|
if ( (( err == NERR_Success) && fChanged )
|
||
|
|| ( err == NERR_NetNameNotFound )
|
||
|
)
|
||
|
{
|
||
|
APIERR err1 = Refresh();
|
||
|
err = err? err : err1;
|
||
|
}
|
||
|
|
||
|
plbShare->ClaimFocus();
|
||
|
return err;
|
||
|
}
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: SHARE_MANAGEMENT_DIALOG::OnShareLbDblClk
|
||
|
|
||
|
SYNOPSIS: This is called when the user double clicks on a share
|
||
|
in the listbox. Will pop up a dialog showing the
|
||
|
properties of the selected share.
|
||
|
|
||
|
ENTRY:
|
||
|
|
||
|
EXIT:
|
||
|
|
||
|
RETURNS:
|
||
|
|
||
|
NOTES:
|
||
|
|
||
|
HISTORY:
|
||
|
Yi-HsinS 1/8/92 Created
|
||
|
|
||
|
********************************************************************/
|
||
|
|
||
|
BOOL SHARE_MANAGEMENT_DIALOG::OnShareLbDblClk( VOID )
|
||
|
{
|
||
|
APIERR err = OnShareInfo();
|
||
|
if ( err != NERR_Success )
|
||
|
::MsgPopup( this, err );
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: SHARE_MANAGEMENT_DIALOG::QueryHelpContext
|
||
|
|
||
|
SYNOPSIS: Query the help context of the dialog
|
||
|
|
||
|
ENTRY:
|
||
|
|
||
|
EXIT:
|
||
|
|
||
|
RETURNS: Return the help context of the dialog
|
||
|
|
||
|
NOTES:
|
||
|
|
||
|
HISTORY:
|
||
|
Yi-HsinS 1/6/92 Created
|
||
|
|
||
|
********************************************************************/
|
||
|
|
||
|
ULONG SHARE_MANAGEMENT_DIALOG::QueryHelpContext( VOID )
|
||
|
{
|
||
|
return QueryHelpContextBase() + HC_SVRMGRSHAREMANAGEMENT;
|
||
|
}
|
||
|
|