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.
481 lines
12 KiB
481 lines
12 KiB
/**********************************************************************/
|
|
/** Microsoft Windows/NT **/
|
|
/** Copyright(c) Microsoft Corp., 1992 **/
|
|
/**********************************************************************/
|
|
|
|
/*
|
|
svccntl.hxx
|
|
Class declarations for the SVCCNTL_DIALOG class.
|
|
|
|
The SVCCNTL_DIALOG allows the user to directly manipulate the
|
|
network services on a remote server. The user can start, stop,
|
|
pause, and continue the available services.
|
|
|
|
|
|
FILE HISTORY:
|
|
KeithMo 15-Jan-1992 Created for the Server Manager.
|
|
KeithMo 27-Jan-1992 Added DisableControlButtons method.
|
|
KeithMo 31-Jan-1992 Changes from code review on 29-Jan-1992
|
|
attended by ChuckC, EricCh, TerryK.
|
|
KeithMo 24-Jul-1992 Added alternate constructor & other special
|
|
casing for the Services Manager Applet.
|
|
KeithMo 11-Nov-1992 DisplayName support.
|
|
KeithMo 22-Dec-1992 Now uses shared SVC_LISTBOX.
|
|
|
|
*/
|
|
|
|
|
|
#ifndef _SVCCNTL_HXX_
|
|
#define _SVCCNTL_HXX_
|
|
|
|
|
|
#include <lmobj.hxx>
|
|
#include <lmoenum.hxx>
|
|
#include <lmosrv.hxx>
|
|
#include <lmsvc.hxx>
|
|
#include <lmoesvc.hxx>
|
|
#include <svcman.hxx>
|
|
|
|
#include <srvbase.hxx>
|
|
#include <svclb.hxx>
|
|
|
|
|
|
//
|
|
// These are opcodes for the SVCCNTL_DIALOG :: ServiceControl method.
|
|
//
|
|
|
|
enum ServiceOperation
|
|
{
|
|
SvcOpStart,
|
|
SvcOpStop,
|
|
SvcOpPause,
|
|
SvcOpContinue
|
|
|
|
};
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
NAME: SVCCNTL_DIALOG
|
|
|
|
SYNOPSIS: This class represents the Service Control dialog which is
|
|
invoked from the Server Manager main property sheet.
|
|
|
|
INTERFACE: SVCCNTL_DIALOG - Class constructor.
|
|
|
|
~SVCCNTL_DIALOG - Class destructor.
|
|
|
|
OnCommand - Called when the user presses one
|
|
of the Close buttons.
|
|
|
|
QueryHelpContext - Called when the user presses "F1"
|
|
or the "Help" button. Used for
|
|
selecting the appropriate help
|
|
text for display.
|
|
|
|
Refresh - Refreshes the dialog.
|
|
|
|
SetupControlButtons - Enables the control buttons (start,
|
|
stop, pause, continue) as appropriate
|
|
for the service's current state and
|
|
control abilities.
|
|
|
|
DisableControlButtons - Disables all of the service control
|
|
buttons.
|
|
|
|
PARENT: DIALOG_WINDOW
|
|
|
|
USES: SVC_LISTBOX
|
|
SERVER_2
|
|
PUSH_BUTTON
|
|
SLE
|
|
NLS_STR
|
|
|
|
HISTORY:
|
|
KeithMo 15-Jan-1992 Created for the Server Manager.
|
|
KeithMo 24-Jul-1992 Added alternate constructor.
|
|
|
|
**************************************************************************/
|
|
class SVCCNTL_DIALOG : public DIALOG_WINDOW
|
|
{
|
|
private:
|
|
|
|
//
|
|
// This listbox contains the available services.
|
|
//
|
|
|
|
SVC_LISTBOX _lbServices;
|
|
|
|
//
|
|
// These push buttons are used to manipulate the
|
|
// selected service.
|
|
//
|
|
|
|
PUSH_BUTTON _pbStart;
|
|
PUSH_BUTTON _pbStop;
|
|
PUSH_BUTTON _pbPause;
|
|
PUSH_BUTTON _pbContinue;
|
|
|
|
PUSH_BUTTON _pbConfigure;
|
|
PUSH_BUTTON _pbHWProfile;
|
|
|
|
PUSH_BUTTON _pbClose;
|
|
|
|
//
|
|
// This edit control contains the service startup
|
|
// parameters. This is only used during the "Start Service"
|
|
// operation.
|
|
//
|
|
|
|
SLE _sleParameters;
|
|
|
|
//
|
|
// These contain the API name & server type bitmask for
|
|
// the target server.
|
|
//
|
|
|
|
const TCHAR * _pszServerName;
|
|
ULONG _nServerType;
|
|
|
|
//
|
|
// This string contains the "target" server for the account
|
|
// manipulation functions. This will always be the same as
|
|
// _pszServerName, except if _pszServerName is a BDC, in
|
|
// which case this will be the name of the PDC of the BDC's
|
|
// primary domain. If the PDC cannot be determined, then
|
|
// the service's logon account cannot be changed.
|
|
//
|
|
|
|
NLS_STR _nlsAccountTarget;
|
|
BOOL _fAccountTargetAvailable;
|
|
|
|
//
|
|
// This contains the display name of the target server.
|
|
//
|
|
|
|
NLS_STR _nlsSrvDspName;
|
|
|
|
//
|
|
// This contains the Configuration Manager handle for the
|
|
// Hardware Profiles dialog. It is stored here because this dialog
|
|
// must attempt to obtain one of these in order to determine whether to
|
|
// enable the HW Profiles button.
|
|
//
|
|
|
|
HANDLE _hCfgMgrHandle;
|
|
|
|
//
|
|
// This flag gets set if any services were manipulated.
|
|
//
|
|
|
|
BOOL _fServicesManipulated;
|
|
|
|
//
|
|
// Set to TRUE if the target server is local.
|
|
//
|
|
|
|
BOOL _fTargetServerIsLocal;
|
|
|
|
//
|
|
// This method enables & disables the service control
|
|
// buttons by interpreting a service's current state &
|
|
// controls accepted.
|
|
//
|
|
|
|
VOID SetupControlButtons( ULONG CurrentState,
|
|
ULONG ControlsAccepted,
|
|
ULONG StartType );
|
|
|
|
//
|
|
// Disable all of the service control buttons.
|
|
//
|
|
|
|
VOID DisableControlButtons( VOID );
|
|
|
|
//
|
|
// This method does most of the actual service control.
|
|
//
|
|
|
|
VOID ServiceControl( enum ServiceOperation OpCode,
|
|
BOOL * pfStoppedServer = NULL );
|
|
|
|
//
|
|
// Determine if this is a BDC, and the the PDC if it is.
|
|
//
|
|
|
|
BOOL GetAccountTarget( VOID );
|
|
|
|
protected:
|
|
|
|
//
|
|
// This method is called whenever a control
|
|
// is sending us a command. This is where
|
|
// we handle the manipulation buttons.
|
|
//
|
|
|
|
virtual BOOL OnCommand( const CONTROL_EVENT & event );
|
|
|
|
//
|
|
// Called during help processing to select the appropriate
|
|
// help text for display.
|
|
//
|
|
|
|
virtual ULONG QueryHelpContext( VOID );
|
|
|
|
//
|
|
// This method refreshes the data in the listbox.
|
|
//
|
|
|
|
APIERR Refresh( VOID );
|
|
|
|
virtual BOOL OnOK( VOID );
|
|
virtual BOOL OnCancel( VOID );
|
|
|
|
public:
|
|
|
|
//
|
|
// Usual constructor/destructor goodies.
|
|
//
|
|
|
|
SVCCNTL_DIALOG( HWND hWndOwner,
|
|
const TCHAR * pszServerName,
|
|
const TCHAR * pszSrvDspName,
|
|
ULONG nServerType );
|
|
|
|
SVCCNTL_DIALOG( HWND hWndOwner,
|
|
SERVER_2 * pserver );
|
|
|
|
~SVCCNTL_DIALOG( VOID );
|
|
|
|
}; // class SVCCNTL_DIALOG
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
NAME: SVCCFG_DIALOG
|
|
|
|
SYNOPSIS: This class represents the Service Configure dialog that is
|
|
invoked from the Service Control dialog.
|
|
|
|
INTERFACE: SVCCFG_DIALOG - Class constructor.
|
|
|
|
~SVCCFG_DIALOG - Class destructor.
|
|
|
|
QueryHelpContext - Called when the user presses "F1"
|
|
or the "Help" button. Used for
|
|
selecting the appropriate help
|
|
text for display.
|
|
|
|
OnOK - Called when the user presses the
|
|
"OK" button. Used to update the
|
|
status of the target service.
|
|
|
|
PARENT: DIALOG_WINDOW
|
|
|
|
USES: MAGIC_GROUP
|
|
SLE
|
|
|
|
HISTORY:
|
|
KeithMo 19-Jul-1992 Created for the Server Manager.
|
|
|
|
**************************************************************************/
|
|
class SVCCFG_DIALOG : public DIALOG_WINDOW
|
|
{
|
|
private:
|
|
|
|
//
|
|
// These hold the API & display names of the target server.
|
|
//
|
|
|
|
const TCHAR * _pszServerName;
|
|
const TCHAR * _pszSrvDspName;
|
|
|
|
//
|
|
// These hold the API & display names of the target service.
|
|
//
|
|
|
|
const TCHAR * _pszServiceName;
|
|
const TCHAR * _pszDisplayName;
|
|
|
|
//
|
|
// This holds the name of the server to use as
|
|
// a "target" for account operations.
|
|
//
|
|
|
|
const TCHAR * _pszAccountTarget;
|
|
|
|
//
|
|
// This SLT displays the name of the service
|
|
//
|
|
|
|
SLT _sltServiceName;
|
|
|
|
//
|
|
// This radio group represents the service start type.
|
|
//
|
|
|
|
RADIO_GROUP _rgStartType;
|
|
|
|
//
|
|
// This magic group manages the logon account.
|
|
//
|
|
|
|
MAGIC_GROUP _mgLogonAccount;
|
|
|
|
//
|
|
// These are the various controls that exist in the
|
|
// _mgLogonAccount magic group. They are used to
|
|
// manipulate the logon account used by the target
|
|
// service.
|
|
//
|
|
|
|
SLE _sleAccountName;
|
|
PASSWORD_CONTROL _slePassword;
|
|
PASSWORD_CONTROL _sleConfirmPassword;
|
|
|
|
PUSH_BUTTON _pbUserBrowser;
|
|
|
|
SLT _sltPasswordLabel;
|
|
SLT _sltConfirmLabel;
|
|
|
|
//
|
|
// This checkbox determines whether or not the service is allowed to present any UI (interact with the
|
|
// current user's desktop
|
|
//
|
|
|
|
CHECKBOX _cbInteractive;
|
|
|
|
//
|
|
// These point to the SC_* objects necessary to
|
|
// manipulate the target service.
|
|
//
|
|
|
|
SC_MANAGER * _pscman;
|
|
SC_SERVICE * _pscsvc;
|
|
|
|
//
|
|
// This will contain the "original" (entry) value of the
|
|
// logon account.
|
|
//
|
|
|
|
NLS_STR _nlsOldLogonAccount;
|
|
|
|
//
|
|
// These data & methods manipulate the lock state of the
|
|
// service database.
|
|
//
|
|
|
|
UINT _cLocks; // reference count
|
|
|
|
APIERR LockServiceDatabase( VOID );
|
|
|
|
APIERR UnlockServiceDatabase( VOID );
|
|
|
|
//
|
|
// These "worker" methods are used during object construction.
|
|
//
|
|
|
|
APIERR SetCaption( const TCHAR * pszServerName,
|
|
const TCHAR * pszServiceName );
|
|
|
|
APIERR SetupAssociations( VOID );
|
|
|
|
APIERR ConnectToTargetService( const TCHAR * pszServiceName );
|
|
|
|
APIERR SetupControls( VOID );
|
|
|
|
//
|
|
// This method invokes the User Browser. It is responsible
|
|
// for updating the dialog with the selected user (if any)
|
|
// and displaying any appropriate error messages.
|
|
//
|
|
|
|
VOID InvokeUserBrowser( VOID );
|
|
|
|
//
|
|
// This method makes some minor "tweaks" to a qualified
|
|
// account name.
|
|
//
|
|
|
|
APIERR TweakQualifiedAccount( NLS_STR * pnlsQualifiedAccount );
|
|
|
|
//
|
|
// This method will ensure the specified account has the
|
|
// Service Logon privilege. It will also do some special
|
|
// casing for the Replicator service (ensure the account
|
|
// is in the Replicators local group).
|
|
//
|
|
|
|
APIERR AdjustAccountPrivileges( const TCHAR * pszUnqualifiedAccount );
|
|
|
|
//
|
|
// Add the specified system access mode to the account.
|
|
//
|
|
|
|
APIERR AddSystemAccessMode( LSA_POLICY * plsapol,
|
|
PSID psid,
|
|
ULONG accessAdd,
|
|
BOOL * pfAddedMode );
|
|
|
|
//
|
|
// Add the account to the specified local group if it
|
|
// isn't already a member.
|
|
//
|
|
|
|
APIERR AddToLocalGroup( PSID psid,
|
|
const TCHAR * pszLocalGroup,
|
|
BOOL * pfAddedToGroup );
|
|
|
|
//
|
|
// Lookup the name of a system SID.
|
|
//
|
|
|
|
APIERR LookupSystemSidName( LSA_POLICY * plsapol,
|
|
enum UI_SystemSid SystemSid,
|
|
NLS_STR * pnlsName );
|
|
|
|
protected:
|
|
|
|
//
|
|
// This method is called whenever a control
|
|
// is sending us a command. This is where
|
|
// we handle the user browser button.
|
|
//
|
|
|
|
virtual BOOL OnCommand( const CONTROL_EVENT & event );
|
|
|
|
//
|
|
// Called when the user presses the "OK" or "Cancel" buttons.
|
|
//
|
|
|
|
virtual BOOL OnOK( VOID );
|
|
|
|
virtual BOOL OnCancel( VOID );
|
|
|
|
//
|
|
// Called during help processing to select the appropriate
|
|
// help text for display.
|
|
//
|
|
|
|
virtual ULONG QueryHelpContext( VOID );
|
|
|
|
public:
|
|
|
|
//
|
|
// Usual constructor/destructor goodies.
|
|
//
|
|
|
|
SVCCFG_DIALOG( HWND hwndOwner,
|
|
const TCHAR * pszServerName,
|
|
const TCHAR * pszSrvDspName,
|
|
const TCHAR * pszServiceName,
|
|
const TCHAR * pszDisplayName,
|
|
const TCHAR * pszAccountTarget );
|
|
|
|
~SVCCFG_DIALOG( VOID );
|
|
|
|
}; // class SVCCFG_DIALOG
|
|
|
|
|
|
#endif // _SVCCNTL_HXX_
|
|
|