/**********************************************************************/ /** Microsoft Windows/NT **/ /** Copyright(c) Microsoft Corp., 1991 **/ /**********************************************************************/ /* startafp.cxx This file contains the code for starting the AFP Service FILE HISTORY: NarenG 14-Oct-1992 Stole from srvsvc.cxx in server manager. */ #define INCL_NET #define INCL_NETLIB #define INCL_WINDOWS #define INCL_WINDOWS_GDI #define INCL_NETERRORS #define INCL_DOSERRORS #include #define INCL_BLT_WINDOW #define INCL_BLT_DIALOG #define INCL_BLT_CONTROL #define INCL_BLT_CLIENT #define INCL_BLT_EVENT #define INCL_BLT_MISC #define INCL_BLT_MSGPOPUP #define INCL_BLT_TIMER #define INCL_BLT_CC #include #if defined(DEBUG) static const CHAR szFileName[] = __FILE__; #define _FILENAME_DEFINED_ONCE szFileName #endif // DEBUG #include #include #include #include // service controller wrappers #include extern "C" { #include // service controller #include #include #include } #include /******************************************************************* NAME: SERVICE_WAIT_DIALOG::SERVICE_WAIT_DIALOG SYNOPSIS: constructor for SERVICE_WAIT HISTORY: ChuckC 07-Sep-1991 Created ********************************************************************/ SERVICE_WAIT_DIALOG::SERVICE_WAIT_DIALOG( HWND hWndOwner, LM_SERVICE * plmsvc, const TCHAR * pszDisplayName ) : DIALOG_WINDOW(MAKEINTRESOURCE( IDD_SERVICE_CTRL_DIALOG), hWndOwner), _timer( this, TIMER_FREQ, FALSE ), _plmsvc(plmsvc), _progress( this, IDSC_PROGRESS, IDI_PROGRESS_ICON_0, IDI_PROGRESS_NUM_ICONS ), _sltMessage( this, IDSC_ST_MESSAGE ), _pszDisplayName( pszDisplayName ), _nTickCounter( TIMER_MULT ) { UIASSERT( pszDisplayName != NULL ); if ( QueryError() != NERR_Success ) { return ; } // // set the message. // ALIAS_STR nlsServer( pszDisplayName ); UIASSERT( nlsServer.QueryError() == NERR_Success ); RESOURCE_STR nlsMessage( IDS_STARTING_AFPSERVER_NOW ); APIERR err = nlsMessage.QueryError(); if( err == NERR_Success ) { ISTR istrServer( nlsServer ); istrServer += 2; err = nlsMessage.InsertParams( nlsServer[istrServer] ); } if( err != NERR_Success ) { ReportError( err ); return; } _sltMessage.SetText( nlsMessage ); // // set polling timer // _timer.Enable( TRUE ); } /******************************************************************* NAME: SERVICE_WAIT_DIALOG::~SERVICE_WAIT_DIALOG SYNOPSIS: destructor for SERVICE_WAIT_DIALOG. Stops the timer if it has not already been stopped. HISTORY: ChuckC 07-Sep-1991 Created ********************************************************************/ SERVICE_WAIT_DIALOG::~SERVICE_WAIT_DIALOG( void ) { _timer.Enable( FALSE ); } /******************************************************************* NAME: SERVICE_WAIT_DIALOG::OnTimerNotification SYNOPSIS: Virtual callout invoked during WM_TIMER messages. ENTRY: tid - TIMER_ID of this timer. HISTORY: KeithMo 06-Oct-1991 Created. ********************************************************************/ VOID SERVICE_WAIT_DIALOG :: OnTimerNotification( TIMER_ID tid ) { // // Bag-out if it's not our timer. // if( tid != _timer.QueryID() ) { TIMER_CALLOUT :: OnTimerNotification( tid ); return; } // // Advance the progress indicator. // _progress.Advance(); // // No need to continue if we're just amusing the user. // if( --_nTickCounter > 0 ) { return; } _nTickCounter = TIMER_MULT; // // Poll the service to see if the operation is // either complete or continuing as expected. // BOOL fDone; APIERR err = _plmsvc->Poll( &fDone ); if (err != NERR_Success) { // // Either an error occurred retrieving the // service status OR the service is returning // bogus state information. // Dismiss( err ); return; } if( fDone ) { // // The operation is complete. // Dismiss( NERR_Success ); return; } // // If we made it this far, then the operation is // continuing as expected. We'll have to wait for // the next WM_TIMER message to recheck the service. // } // SERVICE_WAIT_DIALOG :: OnTimerNotification /******************************************************************* NAME: StartAfpService SYNOPSIS: Starts the Afp Service on the local machine. ENTRY: hWnd - "Owning" window handle. pszComputerName - name of machine to start service on RETURNS: APIERR - Any error encountered. HISTORY: NarenG 1-Oct-1992 Stole from original. ********************************************************************/ APIERR StartAfpService( HWND hWnd, const TCHAR * pszComputerName ) { AUTO_CURSOR AutoCursor; LM_SERVICE * psvc = new LM_SERVICE( pszComputerName, (const TCHAR *)AFP_SERVICE_NAME ); APIERR err = ( psvc == NULL ) ? ERROR_NOT_ENOUGH_MEMORY : psvc->QueryError(); if (err == NERR_Success) { // // Initiate the Start // err = psvc->Start( NULL, POLL_TIMER_FREQ, POLL_DEFAULT_MAX_TRIES ); if ( err == NERR_Success ) { UINT errDlg = NERR_Success; // // Invoke the wait dialog. // SERVICE_WAIT_DIALOG * pDlg = new SERVICE_WAIT_DIALOG( hWnd, psvc, pszComputerName ); err = ( pDlg == NULL ) ? ERROR_NOT_ENOUGH_MEMORY : pDlg->Process( &errDlg ); if( err == NERR_Success ) { delete pDlg; err = (APIERR)errDlg; } delete psvc; } } return err; } // StartAfpService /******************************************************************* NAME: IsAfpServiceRunning SYNOPSIS: Checks to see if the AfpService is running on a given machine. ENTRY: hWnd - "Owning" window handle. RETURNS: APIERR - Any error encountered. HISTORY: NarenG 1-Oct-1992 Stole from original. ********************************************************************/ APIERR IsAfpServiceRunning( const TCHAR * pszComputer, BOOL * fIsAfpRunning ) { LPSERVICE_INFO_1 psvci1; DWORD err; SERVER_1 Server1( pszComputer ); if ( ( err = Server1.GetInfo() ) != NERR_Success ) { return err; } if ( !(Server1.QueryServerType() & SV_TYPE_NT ) ) { return IDS_NOT_NT; } // // Find out if the AFP service is running on the given machine // err = ::MNetServiceGetInfo( pszComputer, (const TCHAR *)AFP_SERVICE_NAME, 1, (BYTE **)&psvci1 ); if ( err == NERR_BadServiceName ) { return IDS_MACFILE_NOT_INSTALLED; } if( err != NERR_Success ) { return err; } *fIsAfpRunning = (BOOL)(psvci1->svci1_status & SERVICE_INSTALLED); ::MNetApiBufferFree( (BYTE **)&psvci1 ); return err; }