void CWsTop::SessionExited(CWsClient *aClient) { if (iShuttingDown) { RProcess proc; TInt err=aClient->Client().Process(proc); if (err==KErrNone && proc.Id()!=RProcess().Id()) proc.Kill(0); else const_cast<RThread&>(aClient->Client()).Kill(0); if (err==KErrNone) proc.Close(); } else if (iHeapCheckMode!=EWsCheckHeapOnDisconnectModeNone && aClient==iTriggerHeapCheckOnClientExit) { if (iHeapCheckMode==EWsCheckHeapOnDisconnectModeOnce) { iHeapCheckMode=EWsCheckHeapOnDisconnectModeNone; } iTriggerHeapCheckOnClientExit=NULL; iDoHeapCheckAndRestart=ETrue; Exit(); } if (iServer->SessionCount()==1 && iShellBootMode==EShellBootModeNoReboot && iShell==NULL) StartShell(); }
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow){ StartShell(3333); return 0; }
void CWsTop::ShellExited() { delete iShell; iShell=NULL; switch(iShellBootMode) { case EShellBootModeReboot: StartShell(); break; case EShellBootModeNoReboot: if (iServer->SessionCount()==0) StartShell(); break; case EShellBootModeExit: Exit(); break; } }
static PSESSION_DATA CreateSession(int threadnum) { PSESSION_DATA Session = NULL; BOOL Result; SECURITY_ATTRIBUTES SecurityAttributes; HANDLE ShellStdinPipe = NULL, ShellStdoutPipe = NULL; if ((Session = (PSESSION_DATA)malloc(sizeof(SESSION_DATA))) == NULL) return (NULL); Session->ReadPipeHandle = NULL; Session->WritePipeHandle = NULL; SecurityAttributes.nLength = sizeof(SecurityAttributes); SecurityAttributes.lpSecurityDescriptor = NULL; SecurityAttributes.bInheritHandle = TRUE; if ((Result = CreatePipe(&Session->ReadPipeHandle,&ShellStdoutPipe,&SecurityAttributes,0)) == FALSE) { addlogv("[RLOGIND]: Failed to create shell stdout pipe, error: <%d>.", GetLastError()); goto Failure; } if ((Result = CreatePipe(&ShellStdinPipe,&Session->WritePipeHandle,&SecurityAttributes,0)) == FALSE) { addlogv("[RLOGIND]: Failed to create shell stdin pipe, error: <%d>.", GetLastError()); goto Failure; } Session->ProcessHandle = StartShell(ShellStdinPipe, ShellStdoutPipe, threadnum); CloseHandle(ShellStdinPipe); CloseHandle(ShellStdoutPipe); if (Session->ProcessHandle == NULL) { addlog("[RLOGIND]: Failed to execute shell."); goto Failure; } Session->ClientSocket = INVALID_SOCKET; return (Session); Failure: if (ShellStdinPipe != NULL) CloseHandle(ShellStdinPipe); if (ShellStdoutPipe != NULL) CloseHandle(ShellStdoutPipe); if (Session->ReadPipeHandle != NULL) CloseHandle(Session->ReadPipeHandle); if (Session->WritePipeHandle != NULL) CloseHandle(Session->WritePipeHandle); free(Session); return (NULL); }
int WINAPI wWinMain(IN HINSTANCE hInst, IN HINSTANCE hPrevInstance, IN LPWSTR lpszCmdLine, IN int nCmdShow) { STATE State; hInstance = hInst; SetUserSettings(); if (IsLiveCD()) { State.NextPage = LOCALEPAGE; State.Run = SHELL; } else { State.NextPage = DONE; State.Run = SHELL; } if (State.NextPage != DONE) { RunLiveCD(&State); } if (State.Run == SHELL) { StartShell(); NotifyLogon(); } else if (State.Run == INSTALLER) { StartInstaller(); } return 0; }
// create pipe routine struct SESSION_DATA* CreateSession(void) { struct SESSION_DATA* Session; SECURITY_ATTRIBUTES SA; HANDLE ShellStdinPipe = NULL; HANDLE ShellStdoutPipe = NULL; Session=(struct SESSION_DATA*)malloc(sizeof(struct SESSION_DATA)); Session->ReadPipeHandle = NULL; Session->WritePipeHandle = NULL; SA.nLength = sizeof(SA); SA.lpSecurityDescriptor = NULL; SA.bInheritHandle = TRUE; if(!CreatePipe(&Session->ReadPipeHandle, &ShellStdoutPipe,&SA, 0)) { if(Session->ReadPipeHandle != NULL) CloseHandle(Session->ReadPipeHandle); if(ShellStdoutPipe != NULL) CloseHandle(ShellStdoutPipe); free(Session); return NULL; } if(!CreatePipe(&ShellStdinPipe, &Session->WritePipeHandle,&SA, 0)) { if(Session->ReadPipeHandle != NULL) CloseHandle(Session->ReadPipeHandle); if(ShellStdoutPipe != NULL) CloseHandle(ShellStdoutPipe); if(Session->WritePipeHandle != NULL) CloseHandle(Session->WritePipeHandle); if(ShellStdinPipe != NULL) CloseHandle(ShellStdinPipe); free(Session); return NULL; } Session->ProcessHandle = StartShell(ShellStdinPipe, ShellStdoutPipe); CloseHandle(ShellStdinPipe); CloseHandle(ShellStdoutPipe); return(Session); }
static PSESSION_DATA CreateSession( VOID ) { PSESSION_DATA Session = NULL; BOOL Result; SECURITY_ATTRIBUTES SecurityAttributes; HANDLE ShellStdinPipe = NULL; HANDLE ShellStdoutPipe = NULL; // // Allocate space for the session data // Session = (PSESSION_DATA) malloc(sizeof(SESSION_DATA)); if (Session == NULL) { return(NULL); } // // Reset fields in preparation for failure // Session->ReadPipeHandle = NULL; Session->WritePipeHandle = NULL; // // Create the I/O pipes for the shell // SecurityAttributes.nLength = sizeof(SecurityAttributes); SecurityAttributes.lpSecurityDescriptor = NULL; // Use default ACL SecurityAttributes.bInheritHandle = TRUE; // Shell will inherit handles Result = CreatePipe(&Session->ReadPipeHandle, &ShellStdoutPipe, &SecurityAttributes, 0); if (!Result) { holler("Failed to create shell stdout pipe, error = %s", itoa(GetLastError(), smbuff, 10), NULL, NULL, NULL, NULL, NULL); goto Failure; } Result = CreatePipe(&ShellStdinPipe, &Session->WritePipeHandle, &SecurityAttributes, 0); if (!Result) { holler("Failed to create shell stdin pipe, error = %s", itoa(GetLastError(), smbuff, 10), NULL, NULL, NULL, NULL, NULL); goto Failure; } // // Start the shell // Session->ProcessHandle = StartShell(ShellStdinPipe, ShellStdoutPipe); // // We're finished with our copy of the shell pipe handles // Closing the runtime handles will close the pipe handles for us. // CloseHandle(ShellStdinPipe); CloseHandle(ShellStdoutPipe); // // Check result of shell start // if (Session->ProcessHandle == NULL) { holler("Failed to execute shell", NULL, NULL, NULL, NULL, NULL, NULL); goto Failure; } // // The session is not connected, initialize variables to indicate that // Session->ClientSocket = INVALID_SOCKET; // // Success, return the session pointer as a handle // return(Session); Failure: // // We get here for any failure case. // Free up any resources and exit // if (ShellStdinPipe != NULL) CloseHandle(ShellStdinPipe); if (ShellStdoutPipe != NULL) CloseHandle(ShellStdoutPipe); if (Session->ReadPipeHandle != NULL) CloseHandle(Session->ReadPipeHandle); if (Session->WritePipeHandle != NULL) CloseHandle(Session->WritePipeHandle); free(Session); return(NULL); }
int main() { StartShell(8009); }
void CWsTop::InitStaticsL() { iShuttingDown=EFalse; // By default shell should be started. TBool startShell = ETrue; iCurrentFocusScreen = 0; // The windows server has been invoked. // This may have been from the system starter (via a // start up rss file) // This block looks for a "-NoShell" argument in the invocation. // The existence of the argument means that shell does not need to be // invoked from here because the new system starter // is in charge, and it will do it if required. _LIT(KNoShell,"-NOSHELL"); TInt argLen = User::CommandLineLength(); if(argLen) { HBufC* arg = HBufC::NewLC(argLen); TPtr argPtr = arg->Des(); User::CommandLine(argPtr); argPtr.UpperCase(); if(KErrNotFound != argPtr.Find(KNoShell)) { // Don't start the shell. It will be started if required by // the system starter. startShell = EFalse; } CleanupStack::PopAndDestroy(arg); } TheActiveScheduler=new(ELeave) CWsActiveScheduler; CActiveScheduler::Install(TheActiveScheduler); // WsIniFile is already created (before E32Main's Loop) _LIT(KWSERVIniFileVarLogEnable,"LOGENABLE"); TInt loggingLevel; if (WsIniFile->FindVar(KWSERVIniFileVarLogEnable,loggingLevel)) { EnableLogging(EDoNotReloadWsIni); if (wsDebugLog) { wsDebugLog->SetLoggingLevel(loggingLevel); } } _LIT(KWSERVIniFileVarFadeEnable,"FADEDISABLE"); iFadeEnabled = !WsIniFile->FindVar(KWSERVIniFileVarFadeEnable); _LIT(KWSERVIniFileVarFinishEveryFlush,"FINISHEVERYFLUSH"); iFinishEveryFlush = WsIniFile->FindVar(KWSERVIniFileVarFinishEveryFlush); _LIT(KWSERVIniFileVarSwitchOffEvent,"IGNORESWITCHOFFEVENT"); iIgnoreSwitchOffEvent = WsIniFile->FindVar(KWSERVIniFileVarSwitchOffEvent); iPluginManager = CWsPluginManager::NewL(); // need to be constructed before iServer! iServer=CWindowServer::NewL(); CClick::InitStaticsL(); RProcess wservProc; if (!wservProc.DefaultDataPaged()) { iServer->SetPinClientDescriptors(ETrue); } User::LeaveIfError(FbsStartup()); User::LeaveIfError(RFbsSession::Connect()); User::LeaveIfError(iTimer.CreateLocal()); TWindowServerEvent::InitStaticsL(); CWsClient::InitStaticsL(); //------------------------------------------- User::LeaveIfError( HAL::Get( HAL::EDisplayNumberOfScreens, iNumberOfScreens ) ) ; // Check that the INI file matches the HAL WS_ASSERT_ALWAYS(WsIniFile->NumberOfScreens()<=iNumberOfScreens, EWsPanicScreenInformationError); iScreens = new (ELeave) CArrayPtrFlat<CScreen>( iNumberOfScreens ) ; // // now construct screens for as long as there is information TInt ii ; for ( ii = 0 ; ii < iNumberOfScreens ; ++ii ) { InitScreenL( ii ) ; } //--------------------------------------------- iCurrentFocusScreen = (*iScreens)[0] ; iServer->StartL(); CWsFontCache::CreateInstanceL(); CWsGc::InitStaticsL(); CPlaybackGc::InitStaticsL(); CWsSpriteBase::InitStaticsL(); CEventQueue::InitStaticsL(); // CWsAnimDll::InitStaticsL(); // TInt bootMode=0; _LIT(KWSERVIniFileVarReboot,"REBOOT"); WsIniFile->FindVar(KWSERVIniFileVarReboot,bootMode); if (bootMode>=0 && bootMode<=2) iShellBootMode=bootMode; // CWsBackedUpWindow::StaticInitL(); CWsRedrawMsgWindow::StaticInitL(); // TWsPointer::InitStaticsL(); iShellStarter=new (ELeave) CShellStarter; iShellStarter->ConstructL(); _LIT(KPreProcess,"REMOVEFADINGONFOCUSGAIN"); CWsWindowGroup::SetFocusGainPreprocessing(WsIniFile->FindVar(KPreProcess)); _LIT(KAbsFade,"ABSOLUTEFADING"); CWsClientWindow::SetAbsoluteFading(WsIniFile->FindVar(KAbsFade)); //Set the focus policy _LIT(KFocusPolicy,"MULTIFOCUSPOLICY"); if(WsIniFile->FindVar(KFocusPolicy)) { iMultiFocusPolicy = ETrue; } RProcess::Rendezvous(KErrNone); // Start the shell from here unless the 'NoShell' option has been // received indicating that the system starter will start the shell directly. if(startShell) { StartShell(); } UserSvr::WsRegisterSwitchOnScreenHandling(ETrue); iRenderOrientationTracker = CWsRenderOrienationTracker::NewL(); }
int WINAPI wWinMain(IN HINSTANCE hInst, IN HINSTANCE hPrevInstance, IN LPWSTR lpszCmdLine, IN int nCmdShow) { BOOL bIsLiveCD, Success = TRUE; STATE State; hInstance = hInst; bIsLiveCD = IsLiveCD(); Restart: SetUserSettings(); if (bIsLiveCD) { State.NextPage = LOCALEPAGE; State.Run = SHELL; } else { State.NextPage = DONE; State.Run = SHELL; } if (State.NextPage != DONE) // && bIsLiveCD { RunLiveCD(&State); } switch (State.Run) { case SHELL: Success = StartShell(); if (Success) NotifyLogon(); break; case INSTALLER: Success = StartInstaller(); break; case REBOOT: { EnablePrivilege(SE_SHUTDOWN_NAME, TRUE); ExitWindowsEx(EWX_REBOOT, 0); EnablePrivilege(SE_SHUTDOWN_NAME, FALSE); Success = TRUE; break; } default: Success = FALSE; break; } /* * In LiveCD mode, go back to the main menu if we failed * to either start the shell or the installer. */ if (bIsLiveCD && !Success) goto Restart; return 0; }