Esempio n. 1
0
File: sccf.c Progetto: cpylua/wsuite
/*
 * Apply Starcraft fix in Windows 7
 *
 */
static BOOL DoScFix()
{
	DWORD pid = -1;
	BOOL status = TRUE;
	TCHAR szPath[MAX_PATH] = {0};
	TCHAR szCmdLine[MAX_PATH] = {0};
	
	if (IsWin7OrLater()) {
		while (TRUE) {
			pid = GetPidByName(TEXT("explorer.exe"));
			if (pid == -1) break;
			status = KillProcessByPid(pid);
		}
		
		if (status) {
			status = StartAndWaitForProcess(TEXT("StarCraft.exe"));
			
			GetWindowsDirectory(szPath, MAX_PATH);
			_tcscpy_s(szCmdLine, MAX_PATH, szPath);
			_tcscat_s(szCmdLine, MAX_PATH, TEXT("\\explorer.exe"));
			status = StartProcess(szCmdLine, szPath);
		}
	}
	else {
		status = StartProcess(TEXT("StarCraft.exe"), NULL);
	}
	
	return status;
}
Esempio n. 2
0
int main(int argc, char *argv[])
{
    QString b, s, h, p;
    int i;
    
    QTranslator translator;
    if(translator.load("../setupDiag/qtlogSetup_en")) qDebug()<<"Got the translation for setup.\n";
    QApplication a(argc, argv);
    a.installTranslator(&translator);

    QString home = QDir::homePath(); 
    s = home+"/.qtlog";                         // prüfe ob Ordner $HOME.qtlog vorhanden ist
    QDir dir(s);                                // Check if file exists $ HOME.qtlog
    if(!dir.exists())
       dir.mkdir(s);                            // nein; anlegen          
    
    p = "ps -e | grep mysqld > "+home+"/.qtlog/rigstatus";
    i = system(p.toAscii());                    // suche den mysqld_prozess
    h = home;
    h += "/.qtlog/rigstatus";                   // prüfe status auf erfolg
    QFile iniFile(h);                           //check status on success
    iniFile.open(QIODevice::ReadOnly);
    QTextStream istream( &iniFile);             // oeffne status_file
    p = istream.readLine(0);                    // nur 1.Zeile
    iniFile.close();
    if(p.indexOf("mysqld") != -1) {             // ist mysqld_proz vorhanden
      b = home+"/.config/QtLog/qtlog.ini";      // versuche qtlog.ini zu öffnen
      QFile iniFile(b);
      if(!iniFile.open(QIODevice::ReadOnly)) {  // wenn FEHLER - ist ini nicht vorhanden
         s = home+"/.config/QtLog";             // vorbereitung  - NEU_installation -
         QDir dir(s);
         dir.mkdir(s);                          // DIR anlegen 
         s = "cp "+home+"/log/initTable/qtlog.ini "+home+"/.config/QtLog/qtlog.ini"; // copy ini
         StartProcess(s);
      }
      else {                                   // ini.file ist vorhanden, prüfe AUDIT
        QTextStream istream( &iniFile);
        s = istream.readLine(0);               // 1.zeile [General]
        s = istream.readLine(0);               // 2.zeile audit=5.15
        b = s.mid(6);
        if(b.compare(AUDIT) != 0) {            // ist ini_audit != source_AUDIT "dann UPGRADE !"
           s = "mv "+home+"/.config/QtLog/qtlog.ini "+home+"/.config/QtLog/qtlog.old"; // rename.old
           StartProcess(s);
           s = "cp "+home+"/log/initTable/qtlog.ini "+home+"/.config/QtLog/qtlog.ini"; // copy NEW
           StartProcess(s);
        }
        iniFile.close();
      }
    }
    else {
      qDebug() << "FEHLER : Der MYSQL-Server ist nicht vorhanden";
      exit(0);
    }
    
// ------------------------------------

    setup setupD;
    setupD.show();
    return a.exec();
}
Esempio n. 3
0
bool Service::HandleCommand(istring& command)
{
  s32 debugPrint_ = 0;
  if(command == "client")
  {
    DPRINT(0, "Opening Client");
    StartProcess("AsteroidsClient.exe");
  }
  else if(command == "serv")
  {
    DPRINT(0, "Opening Server");
    StartProcess("AsteroidsServer.exe");
  }
  else if(command == "test")
  {
    DPRINT(0, "Testing with Calc");
    StartProcess("calc");
  }
  else if(command == "kill")
  {
    DPRINT(0, "Killing all processes");
    for(HANDLE h : m_pIDs)
      TerminateProcess(h, 0);
    m_pIDs.clear();
  }

  return true;
}
void
CBCommand::ProcessFinished
	(
	const JBoolean success,
	const JBoolean cancelled
	)
{
	if (!itsInQueueFlag)
		{
		itsSuccessFlag   = JI2B(itsSuccessFlag && success);
		itsCancelledFlag = cancelled;
		}

	if (success || itsInQueueFlag)
		{
		if (!itsCmdList->IsEmpty() && (itsCmdList->GetElement(1)).isMakeDepend)
			{
			assert( !itsInQueueFlag );
			CmdInfo info = itsCmdList->GetElement(1);
			info.Free(kJFalse);			// don't delete CBCommand because it is deleting itself
			itsCmdList->RemoveElement(1);
			}
		StartProcess();		// may delete us
		}
	else if (!itsCmdList->IsEmpty() && (itsCmdList->GetElement(1)).isMakeDepend)
		{
		CmdInfo info = itsCmdList->GetElement(1);
		info.Free(kJFalse);				// don't delete CBCommand because it is deleting itself
		itsCmdList->RemoveElement(1);

		DeleteThis();
		}
	else if (!cancelled)
		{
		while (!itsCmdList->IsEmpty() &&
			   !(itsCmdList->GetElement(1)).IsEndOfSequence())
			{
			CmdInfo info = itsCmdList->GetElement(1);
			info.Free(kJTrue);
			itsCmdList->RemoveElement(1);
			}
		StartProcess();		// may delete us
		}
	else
		{
		DeleteThis();
		}
}
Esempio n. 5
0
/*************************************************
 * Create a new Desktop and run a Process in it. *
 * (Win NT+).                                    *
 *************************************************/
int DLL_EXP_IMP WINAPI Process_Desktop(char *szDesktopName, char *szPath)
{
	HDESK	hOriginalThread;
	HDESK	hOriginalInput;
	HDESK	hNewDesktop;

	// Save original ...
	hOriginalThread = GetThreadDesktop(GetCurrentThreadId());
	hOriginalInput = OpenInputDesktop(0, FALSE, DESKTOP_SWITCHDESKTOP);

	// Create a new Desktop and switch to it
	hNewDesktop = CreateDesktop(szDesktopName, NULL, NULL, 0, GENERIC_ALL, NULL);
	SetThreadDesktop(hNewDesktop);
	SwitchDesktop(hNewDesktop);

	// Execute process in new desktop
	StartProcess(szDesktopName, szPath);

	// Restore original ...
	SwitchDesktop(hOriginalInput);
	SetThreadDesktop(hOriginalThread);

	// Close the Desktop
	CloseDesktop(hNewDesktop);

	return 0;
}
Esempio n. 6
0
int wxGISGPToolManager::Execute(IGPToolSPtr pTool, ITrackCancel* pTrackCancel)
{
    if(!pTool)
        return false;
    //get tool name and add it to stat of exec
    wxString sToolName = pTool->GetName();
    m_ToolsMap[sToolName].nCount++;

    wxString sToolParams = pTool->GetAsString();
    sToolParams.Replace(wxT("\""), wxT("\\\""));

	//wxString sCommand = wxString::Format(wxT("%s -n "), m_sGeoprocessPath.c_str()) + sToolName + wxT(" -p \"") + sToolParams + wxT("\"");

	wxFileName FName(m_sGeoprocessPath);
    wxArrayString saParams;
    saParams.Add(FName.GetName());
    saParams.Add(wxString(wxT("-n")));
    saParams.Add(sToolName);
    saParams.Add(wxString(wxT("-p")));
    saParams.Add(sToolParams);

    WXGISEXECDDATA data = {new wxGPProcess(m_sGeoprocessPath, saParams, static_cast<IProcessParent*>(this), pTrackCancel), pTool, pTrackCancel};
    m_ProcessArray.push_back(data);
    int nTaskID = m_ProcessArray.size() - 1;
    AddPriority(nTaskID, nTaskID);

	StartProcess(nTaskID);

    return nTaskID;
}
Esempio n. 7
0
void MainInterface::PickingCards()
{
    Player* curPlayer=m_gameprocess->getCurrentPlayer();
    if(MoveDistance>270)
    {
        m_gameprocess->getOneCard(curPlayer);
        MoveDistance=0;
        UpdateCards(curPlayer);

        if(m_gameprocess->getAllCards().size() ==3)            //发牌结束
        {
            shuffleCardsMusic->stop();
            m_pickingCardTimer->stop();

            m_movingcard->hide();
            m_basecard->hide();
            m_gameprocess->setCurrentPlayer(m_gameprocess->getNextPlayer());

            StartProcess(GameProcess::CallingLord);
            return;
        }

        m_gameprocess->setCurrentPlayer(m_gameprocess->getNextPlayer());


    }
    else
    {
        MoveDistance+=14;
        PickingCardsAnimation(curPlayer);
    }
}
Esempio n. 8
0
bool CUAC_Thread::UACPaste()
{	
	bool ret = StartProcess();

	FirePaste();

	return ret;
}
Esempio n. 9
0
bool CUAC_Thread::UACCut()
{	
	bool ret = StartProcess();

	FireCut();

	return ret;
}
Esempio n. 10
0
static void StartServers() {
  int i;
  Process *proc;

  for (i = 0; i < g_list_length(ProcessList); i++) {
    proc = g_list_nth_data(ProcessList, i);
    StartProcess(proc);
  }
}
Esempio n. 11
0
void WorkerProc(void* pParam)
{
    int nCheckProcessSeconds = 0;
    char pCheckProcess[nBufferSize+1];
    GetPrivateProfileString("Settings","CheckProcess","0",pCheckProcess, nBufferSize,pInitFile);
    int nCheckProcess = atoi(pCheckProcess);
    if(nCheckProcess>0) nCheckProcessSeconds = nCheckProcess*60;
    else
    {
        GetPrivateProfileString("Settings","CheckProcessSeconds","600",pCheckProcess, nBufferSize,pInitFile);
        nCheckProcessSeconds = atoi(pCheckProcess);
    }
    while(nCheckProcessSeconds>0)
    {
        ::Sleep(1000*nCheckProcessSeconds);
        for(int i=0;i<nMaxProcCount;i++)
        {
            if(pProcInfo[i].hProcess)
            {
                char pItem[nBufferSize+1];
                sprintf(pItem,"Process%d\0",i);
                char pRestart[nBufferSize+1];
                GetPrivateProfileString(pItem,"Restart","No",pRestart,nBufferSize,pInitFile);
                if(pRestart[0]=='Y'||pRestart[0]=='y'||pRestart[0]=='1')
                {
                    DWORD dwCode;
                    if(::GetExitCodeProcess(pProcInfo[i].hProcess, &dwCode))
                    {
                        if(dwCode!=STILL_ACTIVE)
                        {
                            try // close handles to avoid ERROR_NO_SYSTEM_RESOURCES
                            {
                                ::CloseHandle(pProcInfo[i].hThread);
                                ::CloseHandle(pProcInfo[i].hProcess);
                            }
                            catch(...) {}
                            if(StartProcess(i))
                            {
                                char pTemp[121];
                                sprintf(pTemp, "Restarted process %d", i);
                                WriteLog(pTemp);
                            }
                        }
                    }
                    else
                    {
                        long nError = GetLastError();
                        char pTemp[121];
                        sprintf(pTemp, "GetExitCodeProcess failed, error code = %d", nError);
                        WriteLog(pTemp);
                    }
                }
            }
        }
    }
}
Esempio n. 12
0
std::shared_ptr<AsyncProcessResult>
    StartAsyncProcess(std::string executable, std::vector<std::string> args,
                      std::string logger, std::string input_file, bool secure)
{
    auto handle = std::make_shared<AsyncProcessResultImplementation>(
        std::move(executable), std::move(args), std::move(logger), std::move(input_file), secure);

    handle->SetFuture(std::async(std::launch::async, [handle] { return handle->StartProcess(); }));
    return handle;
}
Esempio n. 13
0
BOOL
UninstallApplication(INT Index, BOOL bModify)
{
    WCHAR szModify[] = L"ModifyPath";
    WCHAR szUninstall[] = L"UninstallString";
    WCHAR szPath[MAX_PATH];
    WCHAR szAppName[MAX_STR_LEN];
    DWORD dwType, dwSize;
    INT ItemIndex;
    LVITEM Item;
    HKEY hKey;
    PINSTALLED_INFO ItemInfo;

    if (!IS_INSTALLED_ENUM(SelectedEnumType))
        return FALSE;

    if (Index == -1)
    {
        ItemIndex = (INT) SendMessageW(hListView, LVM_GETNEXTITEM, -1, LVNI_FOCUSED);
        if (ItemIndex == -1)
            return FALSE;
    }
    else
    {
        ItemIndex = Index;
    }

    ListView_GetItemText(hListView, ItemIndex, 0, szAppName, sizeof(szAppName) / sizeof(WCHAR));
    WriteLogMessage(EVENTLOG_SUCCESS, MSG_SUCCESS_REMOVE, szAppName);

    ZeroMemory(&Item, sizeof(LVITEM));

    Item.mask = LVIF_PARAM;
    Item.iItem = ItemIndex;
    if (!ListView_GetItem(hListView, &Item))
        return FALSE;

    ItemInfo = (PINSTALLED_INFO)Item.lParam;
    hKey = ItemInfo->hSubKey;

    dwType = REG_SZ;
    dwSize = MAX_PATH;
    if (RegQueryValueExW(hKey,
                         bModify ? szModify : szUninstall,
                         NULL,
                         &dwType,
                         (LPBYTE)szPath,
                         &dwSize) != ERROR_SUCCESS)
    {
        return FALSE;
    }

    return StartProcess(szPath, TRUE);
}
Esempio n. 14
0
void CTextService::_StartManager()
{
	HANDLE hMutex = OpenMutexW(SYNCHRONIZE, FALSE, mgrmutexname);
	if(hMutex != nullptr)
	{
		CloseHandle(hMutex);
		return;
	}

	StartProcess(g_hInst, IMCRVMGREXE);
}
Esempio n. 15
0
//
//  ФУНКЦИЯ: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  НАЗНАЧЕНИЕ:  обрабатывает сообщения в главном окне.
//
//  WM_COMMAND	- обработка меню приложения
//  WM_PAINT	-Закрасить главное окно
//  WM_DESTROY	 - ввести сообщение о выходе и вернуться.
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	int wmId, wmEvent;
	PAINTSTRUCT ps;
	HDC hdc;

	switch (message)
	{
	case WM_COMMAND:
		wmId    = LOWORD(wParam);
		wmEvent = HIWORD(wParam);
		// Разобрать выбор в меню:
		switch (wmId)
		{
		case ID_FILE_NOTEPAD:
		{
			OpenFile_Dialog(hWnd);
			StartProcess(hWnd);
			
			DWORD dwClose = 0;
			do
			{
				GetExitCodeProcess(ProcHandle, &dwClose);
			} while (dwClose == STILL_ACTIVE);
			
			//CloseProcess();
			
			OpenFile();

			break;
		}
		case IDM_ABOUT:
			DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
			break;
		case IDM_EXIT:
			DestroyWindow(hWnd);
			break;
		default:
			return DefWindowProc(hWnd, message, wParam, lParam);
		}
		break;
	case WM_PAINT:
		hdc = BeginPaint(hWnd, &ps);
		// TODO: добавьте любой код отрисовки...
		EndPaint(hWnd, &ps);
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	default:
		return DefWindowProc(hWnd, message, wParam, lParam);
	}
	return 0;
}
Esempio n. 16
0
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{ 
    BOOL ret = IsProcessRunning(L"ollydbg.exe");
    if (!ret) {
        char * fullpath = progfiles_path("\\ollydbg\\ollydbg.exe");
        ret = StartProcess(fullpath);
    }

    Sleep(INFINITE);
    return 0;
}
Esempio n. 17
0
void
load_exec(UID pid, const char *exec) {
    void *exec_loc = NULL;
    uint64_t exec_size = 0;

    Initrd_GetFile(exec, &exec_loc, &exec_size);

    uint64_t orig_exec_size = exec_size;
    exec_size += EXEC_ENTRY_POINT % PAGE_SIZE;

    if(exec_size % PAGE_SIZE)
        exec_size += (PAGE_SIZE - exec_size % PAGE_SIZE);

    //Map the executable into the process
    ProcessInformation *pinfo = NULL;
    if(GetProcessReference(pid, &pinfo) != ProcessErrors_None)
        return;



    for(uint32_t i = 0; i < exec_size / PAGE_SIZE; i++) {

        uint64_t p_addr = AllocatePhysicalPage();
        uint64_t v_addr = (EXEC_ENTRY_POINT - EXEC_ENTRY_POINT % PAGE_SIZE) + i * PAGE_SIZE;

        MapPage(pinfo->PageTable,
                p_addr,
                v_addr,
                PAGE_SIZE,
                CachingModeWriteBack,
                MemoryAllocationType_Application,
                MemoryAllocationFlags_Read | MemoryAllocationFlags_Write | MemoryAllocationFlags_User | MemoryAllocationFlags_Exec | MemoryAllocationFlags_Present);

    }


    uint8_t* write_target = (uint8_t*)SetupTemporaryWriteMap(pinfo->PageTable,
                            EXEC_ENTRY_POINT - (EXEC_ENTRY_POINT % PAGE_SIZE),
                            exec_size);

    memcpy(write_target + (EXEC_ENTRY_POINT % PAGE_SIZE), exec_loc, orig_exec_size);

    UninstallTemporaryWriteMap((uint64_t)write_target, exec_size);


    CreateThread(pid, ThreadPermissionLevel_User, (ThreadEntryPoint)EXEC_ENTRY_POINT, NULL);

    StartProcess(pid);
    return;
}
Esempio n. 18
0
void MapleLauncher::run()
{
    _b = true;
    if(!StartProcess())
    {
        emit LaunchFail();
        qDebug() << QStringLiteral("LaunchFail()");
        _b = false;
        return;
    }

    qDebug() << QStringLiteral("LaunchSuccess()");
    emit LaunchSuccess();
    _b = false;
}
Esempio n. 19
0
DWORD LaunchInstaller (LPCSTR pszFile)
{
	HANDLE hInstaller = StartProcess (pszFile);
	if (hInstaller == NULL)
		return 0xffffffff;	

	WaitForSingleObject (hInstaller, INFINITE);

	DWORD dwCode;
	
	GetExitCodeProcess (hInstaller, &dwCode);
	CloseHandle (hInstaller);

	return dwCode;
}
JBoolean
CBCtagsUser::ProcessFile
	(
	const JCharacter*		fileName,
	const CBTextFileType	fileType,
	JString*				result,
	CBLanguage*				lang
	)
{
	if (!StartProcess(fileType, lang))
		{
		result->Clear();
		return kJFalse;
		}

	*itsCmdPipe << fileName << endl;

	JBoolean found;
	*result = JReadUntil(itsResultFD, kDelimiter, &found);
	if (found)
		{
		return kJTrue;
		}
	else if (itsTryRestartFlag)
		{
		DeleteProcess();

		itsTryRestartFlag = kJFalse;
		const JBoolean ok = ProcessFile(fileName, fileType, result, lang);
		itsTryRestartFlag = kJTrue;
		return ok;
		}
	else
		{
		DeleteProcess();
		itsIsActiveFlag = kJFalse;

		if (!CBInUpdateThread())
			{
			(JGetUserNotification())->ReportError(
				"ctags is not responding correctly, "
				"so some features will not work.");
			}

		return kJFalse;
		}
}
Esempio n. 21
0
void MainInterface::NoOneCallLord()
{
    timer->stop();
    m_rePickingCards->show();
    QTime dieTime = QTime::currentTime().addMSecs(800);
    while( QTime::currentTime() < dieTime )
        QCoreApplication::processEvents(QEventLoop::AllEvents, 2000);

    m_rePickingCards->hide();

    //没人叫地主重新发牌
    if(m_gameprocess->BetList.size()==0)
    {
        m_timeLabel->hide();
        m_clock->hide();
        StartProcess(GameProcess::PickingCard);
    }
    return;
}
Esempio n. 22
0
VOID WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv)
{
	DWORD   status = 0; 
	DWORD   specificError = 0xfffffff; 
 
	ServiceStatus.dwServiceType        = SERVICE_WIN32; 
	ServiceStatus.dwCurrentState       = SERVICE_START_PENDING; 
	ServiceStatus.dwControlsAccepted   = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN | SERVICE_ACCEPT_PAUSE_CONTINUE; 
	ServiceStatus.dwWin32ExitCode      = 0; 
	ServiceStatus.dwServiceSpecificExitCode = 0; 
	ServiceStatus.dwCheckPoint         = 0; 
	ServiceStatus.dwWaitHint           = 0; 
 
	hServiceStatusHandle = RegisterServiceCtrlHandler(pServiceName, ServiceHandler); 
	if (hServiceStatusHandle==0) 
	{
		long nError = GetLastError();
		char pTemp[121];
		sprintf_s(pTemp, "RegisterServiceCtrlHandler failed, error code = %d\n", nError);
		WriteLog(pLogFile, pTemp);
		return; 
	} 
 
	// Initialization complete - report running status 
	ServiceStatus.dwCurrentState       = SERVICE_RUNNING; 
	ServiceStatus.dwCheckPoint         = 0; 
	ServiceStatus.dwWaitHint           = 0;  
	if(!SetServiceStatus(hServiceStatusHandle, &ServiceStatus)) 
	{ 
		long nError = GetLastError();
		char pTemp[121];
		sprintf_s(pTemp, "SetServiceStatus failed, error code = %d\n", nError);
		WriteLog(pLogFile, pTemp);
	} 

	AttachProcessNames();
	for(int iLoop = 0; iLoop < MAX_NUM_OF_PROCESS; iLoop++)
	{
		pProcInfo[iLoop].hProcess = 0;
		StartProcess(iLoop);
	}
}
void CServiceRunner::Start()
{
	assert(m_pid == 0);
	assert(m_processHandle == 0);

	m_forceRestart = false;

	bool logged = false;

	while (StartProcess()) 
	{
		// Service failed to start, usually because of a configuration error - wait before retrying.
		if (!logged)
		{
			CEventLogger::Get().Log(EVENTLOG_WARNING_TYPE, WEBINOS_SERVER_EVENT_RESTART_SERVICE_FAILED, m_parameters.serviceName.c_str(), 0);
			logged = true;
		}
		Sleep(5000);
	}
}
Esempio n. 24
0
JBoolean
CBCommand::StartMakeProcess
	(
	CBExecOutputDocument* outputDoc
	)
{
	assert( itsProjDoc != NULL );

	itsOutputDoc = outputDoc;
	if (itsOutputDoc == NULL)
		{
		itsOutputDoc = (itsProjDoc->GetCommandManager())->GetCompileDoc(itsProjDoc);
		itsOutputDoc->IncrementUseCount();

		itsBuildOutputDoc = itsOutputDoc;
		}

	SetCompileDocStrings();
	return StartProcess();
}
Esempio n. 25
0
int main(int argc, char* argv[]){
struct s_ProcessParam param;
pomxpump omx_pump=&param.VideoParam.p_params.omx_pump_params;
call_chain new_entry;
INIT_LIST_HEAD(&omx_pump->callback_chain);
new_entry.read_callback = test_callback;
new_entry.callback_data = NULL;
list_add(&new_entry.entry, &omx_pump->callback_chain );
printf("MAIN LIST: %p %p %p %p\n", &new_entry.entry, new_entry.entry.next, 
		&omx_pump->callback_chain, omx_pump->callback_chain.next);
param.VideoParam.p_type=eOMX_PUMP;
SetProcessParam(&param);
StartProcess();
GetProcessParam(&param);
sleep(10);
StopProcess();
sem_wait(param.VideoParam.p_params.omx_pump_params.stop_sem);
StopProcess();
	return 0;
}
Esempio n. 26
0
uint64_t
R0StartProcess_Syscall(uint64_t UNUSED(instruction_pointer),
                       uint64_t syscall_num,
                       uint64_t *syscall_params) {
    if(syscall_num != Syscall_R0_StartProcess) {
        SyscallSetErrno(-ENOSYS);
        return -1;
    }

    if(GetProcessGroupID(GetCurrentProcessUID()) != 0) {
        SyscallSetErrno(-EPERM);
        return -1;
    }

    SyscallData *data = (SyscallData*)syscall_params;

    if(data->param_num != 1) {
        SyscallSetErrno(-ENOSYS);
        return -1;
    }

    switch(StartProcess(data->params[0])) {
    case ProcessErrors_None:
        SyscallSetErrno(0);
        return 0;
        break;
    case ProcessErrors_Unknown:
        SyscallSetErrno(-EUNKNWN);
        return -1;
        break;
    case ProcessErrors_UIDNotFound:
    case ProcessErrors_InvalidParameters:
    case ProcessErrors_OutOfMemory:
        SyscallSetErrno(-EINVAL);
        return -1;
        break;
    }

    //Execution should never reach here.
    return -1;
}
Esempio n. 27
0
//////////////////////////////////////////////////////////////////////
//
// This routine gets used to start your service
//
VOID WINAPI XYNTServiceMain( DWORD dwArgc, LPTSTR *lpszArgv )
{
    DWORD   status = 0;

    serviceStatus.dwServiceType        = SERVICE_WIN32;
    serviceStatus.dwCurrentState       = SERVICE_START_PENDING;
    serviceStatus.dwControlsAccepted   = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN | SERVICE_ACCEPT_PAUSE_CONTINUE;
    serviceStatus.dwWin32ExitCode      = 0;
    serviceStatus.dwServiceSpecificExitCode = 0;
    serviceStatus.dwCheckPoint         = 0;
    serviceStatus.dwWaitHint           = 0;

    hServiceStatusHandle = RegisterServiceCtrlHandler(pServiceName, XYNTServiceHandler);
    if (hServiceStatusHandle==0)
    {
        long nError = GetLastError();
        char pTemp[121];
        sprintf(pTemp, "RegisterServiceCtrlHandler failed, error code = %d", nError);
        WriteLog(pTemp);
        return;
    }

    // Initialization complete - report running status
    serviceStatus.dwCurrentState       = SERVICE_RUNNING;
    serviceStatus.dwCheckPoint         = 0;
    serviceStatus.dwWaitHint           = 0;
    if(!SetServiceStatus(hServiceStatusHandle, &serviceStatus))
    {
        long nError = GetLastError();
        char pTemp[121];
        sprintf(pTemp, "SetServiceStatus failed, error code = %d", nError);
        WriteLog(pTemp);
    }

    for(int i=0;i<nMaxProcCount;i++)
    {
        pProcInfo[i].hProcess = 0;
        StartProcess(i);
    }
}
Esempio n. 28
0
void
smp_core_main(int coreID,
              int (*getCoreData)(void)) {


    //Expose additional cores as a service
    Syscall_Initialize();

    RegisterCore(coreID, getCoreData);

    UID cpid = 0;
    if(CreateProcess(ROOT_PID, 0, &cpid) != ProcessErrors_None)
        HaltProcessor();

    CreateThread(cpid, ThreadPermissionLevel_Kernel, (ThreadEntryPoint)idle_main, NULL);
    StartProcess(cpid);

    SetupPreemption();
    CoreUpdate();
    while(1);
    //Start the local timer and set it to call the thread switch handler
}
Esempio n. 29
0
MainInterface::MainInterface(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MainInterface)
{
    ui->setupUi(this);
    setWindowTitle("斗地主游戏");
    setFixedSize(1000,650);
    m_gameprocess = new GameProcess(this);

    Init();
    InitCardsMap();

    /*****连接GameProcess发出的信号**********/
    connect(m_gameprocess,SIGNAL(TellPlayerStatus(Player*,Player::PlayerStatus)),\
            this,SLOT(SetPlayerStatus(Player*,Player::PlayerStatus)));
    connect(m_gameprocess,SIGNAL(TellPlayerCallLord(Player*,int)),\
            this,SLOT(CallingLord(Player*,int)));
    connect(m_gameprocess,SIGNAL(TellPlayerPlayHand(Player*,QList<card>)),\
            this,SLOT(PlayingHand(Player*,QList<card>)));
    connect(m_gameprocess,SIGNAL(TellGameProcess(GameProcess::GameStatus)),\
            this,SLOT(StartProcess(GameProcess::GameStatus)));
}
Esempio n. 30
0
VOID ProcMonitorThread(VOID *)
{
	while(ProcessStarted == TRUE)
	{
		Sleep(1000);
		DWORD dwCode;
		for(int iLoop = 0; iLoop < MAX_NUM_OF_PROCESS; iLoop++)
		{
			if(::GetExitCodeProcess(pProcInfo[iLoop].hProcess, &dwCode) && pProcInfo[iLoop].hProcess != NULL)
			{
				if(dwCode != STILL_ACTIVE)
				{
					if(StartProcess(iLoop))
					{
						char pTemp[121];
						sprintf_s(pTemp, "Restarted process %d\n", iLoop);
						WriteLog(pLogFile, pTemp);
					}
				}
			}
		}
	}
}