コード例 #1
0
ファイル: Memory.cpp プロジェクト: DoubleHub/SimpleBunnyHop
	MemoryManager::MemoryManager()
	{
		hProcess = NULL;
		dwPID = NULL;
		try
		{
		if (!AttachProcess("csgo.exe")) throw 1;
		ClientDLL = GetModule("client.dll");
		EngineDLL = GetModule("engine.dll");
		ClientDLL_Base = (DWORD)ClientDLL.modBaseAddr;
		EngineDLL_Base = (DWORD)EngineDLL.modBaseAddr;
		if (ClientDLL_Base == 0x0) throw 2;
		if (EngineDLL_Base == 0x0) throw 3;
		ClientDLL_Size = ClientDLL.dwSize;
		EngineDLL_Size = EngineDLL.dwSize;
		//std::cout<<MEM<<" MemoryManager succesfully started."<<std::endl;
		}
		catch (int iEx) {
			switch (iEx)
			{
			case 1: std::cout<<MEM<<" Failed to attach csgo.exe process. Process not found."<<std::endl; Sleep(3000); break;
			case 2: std::cout<<MEM<<" Failed to get module entry of client.dll"<<std::endl; Sleep(3000); break;
			case 3: std::cout<<MEM<<" Failed to get module entry of engine.dll"<<std::endl; Sleep(3000); break;
			default: throw;
			}
		}
		catch (...) { std::cout<<MEM<<" Unhandled exception thrown."<<std::endl; }
	}
コード例 #2
0
/****************************** Public Functions *****************************/
EXTERN_C BOOL WINAPI DllMain(HINSTANCE hmod, DWORD dwReason, PVOID pvReserved)
{
    switch (dwReason)
    {
    case DLL_PROCESS_ATTACH:
    {
        return AttachProcess(hmod);
    }
    case DLL_THREAD_ATTACH:
        ThreadContextTLSEntry::InitializeThread();
#ifdef HEAP_TRACK_ALLOC
        HeapAllocator::InitializeThread();
#endif
        return TRUE;

    case DLL_THREAD_DETACH:
        // If we are not doing DllCanUnloadNow, so we should clean up. Otherwise, DllCanUnloadNow is already running,
        // so the ThreadContext global lock is already taken.  If we try to clean up, we will block on the ThreadContext
        // global lock while holding the loader lock, which DllCanUnloadNow may block on waiting for thread termination
        // which requires the loader lock. DllCanUnloadNow will clean up for us anyway, so we can just skip the whole thing.
        ThreadBoundThreadContextManager::DestroyContextAndEntryForCurrentThread();
        return TRUE;

    case DLL_PROCESS_DETACH:
        lockedDll = ::DeleteAtom(lockedDll);
        AssertMsg(lockedDll == 0, "Failed to release the lock for chakracore.dll");

#ifdef DYNAMIC_PROFILE_STORAGE
        DynamicProfileStorage::Uninitialize();
#endif
#ifdef ENABLE_JS_ETW
        // Do this before DetachProcess() so that we won't have ETW rundown callbacks while destroying threadContexts.
        EtwTrace::UnRegister();
#endif
#ifdef VTUNE_PROFILING
        VTuneChakraProfile::UnRegister();
#endif

        // don't do anything if we are in forceful shutdown
        // try to clean up handles in graceful shutdown
        if (pvReserved == NULL)
        {
            DetachProcess();
        }
#if defined(CHECK_MEMORY_LEAK) || defined(LEAK_REPORT)
        else
        {
            ThreadBoundThreadContextManager::DestroyAllContexts();
            DetachProcess();
            ThreadContext::ReportAndCheckLeaksOnProcessDetach();
        }
#endif
        return TRUE;

    default:
        AssertMsg(FALSE, "DllMain() called with unrecognized dwReason.");
        return FALSE;
    }
}
コード例 #3
0
BOOL APIENTRY DllMain (HMODULE hModule,
					   DWORD ul_reason_for_call,
					   LPVOID lpReserved
					   )
{
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
		AttachProcess(hModule);
		break;
	case DLL_PROCESS_DETACH:
		if (gOrigHookAddress != 0)
			RemoveHook();
		break;
	}
	return TRUE;
}
コード例 #4
0
ファイル: ProcessManager.cpp プロジェクト: Polydash/Gomez
void ProcessManager::UpdateProcesses(unsigned int elapsedTime)
{
	ProcessList::iterator nextIt = m_processList.begin();
	ProcessList::iterator currIt;
	
	while(nextIt != m_processList.end())
	{
		ProcessSharedPtr pProcess = (*nextIt);
		
		currIt = nextIt;
		nextIt++;
		
		if(pProcess->GetState() == PS_UNINITIALIZED)
		{
			if(!pProcess->Init())
				pProcess->Abort();
		}
		
		if(pProcess->GetState() == PS_RUNNING)
			pProcess->VUpdate(elapsedTime);
			
		if(pProcess->IsDone())
		{
			switch(pProcess->GetState())
			{
				case PS_SUCCEEDED :
					{
						ProcessSharedPtr pChild = pProcess->RemoveChild();
						if(pChild)
							AttachProcess(pChild);
					}
					break;
				
				case PS_ABORTED :
					break;
				
				default :
					break;
			}
			
			m_processList.erase(currIt);
		}
	}
}
コード例 #5
0
unsigned int ProcessManager::UpdateProcesses(const float deltaMs)
{
	unsigned short int successCount = 0;
	unsigned short int failCount = 0;

	ProcessList::iterator it = m_processList.begin();
	while (it != m_processList.end())
	{
		Process* pCurrProcess = (*it);

		ProcessList::iterator thisIt = it;
		it++;

		if (pCurrProcess->GetState() == Process::UNINITIALIZED)
		{
			pCurrProcess->VOnInit();
		}

		if (pCurrProcess->GetState() == Process::RUNNING)
		{
			pCurrProcess->VOnUpdate(deltaMs);
		}

		if (pCurrProcess->IsDead())
		{
			switch (pCurrProcess->GetState())
			{
				case Process::SUCCEEDED:
				{
					pCurrProcess->VOnSuccess();
					Process* pChild = pCurrProcess->RemoveChild();
					if (pChild)
					{
						AttachProcess(pChild);
					}
					else
					{
						successCount++;
					}

					break;
				}

				case Process::FAILED:
				{
					pCurrProcess->VOnFail();
					failCount++;
					break;
				}

				case Process::ABORTED:
				{
					pCurrProcess->VOnAbort();
					failCount++;
					break;
				}
			}

			m_processList.erase(thisIt);
		}
	}

	return ((successCount << 16) | failCount);
}
コード例 #6
0
unsigned int ProcessManager::UpdateProcesses(float deltaTime)
{
	unsigned short int successCount = 0;
	unsigned short int failCount = 0;

	auto it = m_ProcessList.begin();
	while (it != m_ProcessList.end())
	{
		StrongProcessPtr pCurrentProcess = (*it);
		
		// save an iterator to this process and increment our list iterator
		auto thisIt = it;
		++it;

		// init the current process if it has not intialized yet
		if (pCurrentProcess->GetState() == Process::UNINITIALIZED)
		{
			pCurrentProcess->OnInit();
		}

		// update a running process
		if (pCurrentProcess->GetState() == Process::RUNNING)
		{
			pCurrentProcess->OnUpdate(deltaTime);
		}

		// if a process is dead, run the correct exit method
		if (pCurrentProcess->IsDead())
		{
			switch (pCurrentProcess->GetState())
			{
			case Process::SUCCEEDED:
				{
					pCurrentProcess->OnSuccess();
					StrongProcessPtr pChild = pCurrentProcess->RemoveChild();
					if (pChild)
						AttachProcess(pChild);
					else
						++successCount;
					break;
				}
			case Process::FAILED:
				{
					pCurrentProcess->OnFail();
					++failCount;
					break;
				}
			case Process::ABORTED:
				{
					pCurrentProcess->OnAbort();
					++failCount;
					break;
				}
			}

			// destroy the dead process
			m_ProcessList.erase(thisIt);
		}
	}

	return (successCount << 16) | failCount;
}
コード例 #7
0
ファイル: ProcessManager.cpp プロジェクト: wsantas/gamecode4
//---------------------------------------------------------------------------------------------------------------------
// The process update tick.  Called every logic tick.  This function returns the number of process chains that 
// succeeded in the upper 32 bits and the number of process chains that failed or were aborted in the lower 32 bits.
//---------------------------------------------------------------------------------------------------------------------
unsigned int ProcessManager::UpdateProcesses(unsigned long deltaMs)
{
    unsigned short int successCount = 0;
    unsigned short int failCount = 0;

    ProcessList::iterator it = m_processList.begin();
    while (it != m_processList.end())
    {
        // grab the next process
        StrongProcessPtr pCurrProcess = (*it);

        // save the iterator and increment the old one in case we need to remove this process from the list
        ProcessList::iterator thisIt = it;
        ++it;

        // process is uninitialized, so initialize it
        if (pCurrProcess->GetState() == Process::UNINITIALIZED)
            pCurrProcess->VOnInit();

        // give the process an update tick if it's running
        if (pCurrProcess->GetState() == Process::RUNNING)
            pCurrProcess->VOnUpdate(deltaMs);

        // check to see if the process is dead
        if (pCurrProcess->IsDead())
        {
            // run the appropriate exit function
            switch (pCurrProcess->GetState())
            {
                case Process::SUCCEEDED :
                {
                    pCurrProcess->VOnSuccess();
                    StrongProcessPtr pChild = pCurrProcess->RemoveChild();
                    if (pChild)
                        AttachProcess(pChild);
                    else
                        ++successCount;  // only counts if the whole chain completed
                    break;
                }

                case Process::FAILED :
                {
                    pCurrProcess->VOnFail();
                    ++failCount;
                    break;
                }

                case Process::ABORTED :
                {
                    pCurrProcess->VOnAbort();
                    ++failCount;
                    break;
                }
            }

            // remove the process and destroy it
            m_processList.erase(thisIt);
        }
    }

    return ((successCount << 16) | failCount);
}