예제 #1
0
void VDThread::ThreadWait() {
	if (isThreadAttached()) {
		WaitForSingleObject((HANDLE)mhThread, INFINITE);
		ThreadDetach();
		mThreadID = 0;
	}
}
예제 #2
0
void calendar_manager_thread_init(void)
{
  thread_hdl thread_id;
  Bool ret = FAILURE;

  ret = ThreadCreate( &thread_id,
                      THREAD_CALENDAR_MANAGER_NAME,
                      THREAD_DEFAULT_PRIORITY,
                      NULL,
                      THREAD_DEFAULT_STACK_SIZE,
                      calendar_manager_thread_entry,
                      (void *)(NULL) );

  if(FAILURE == ret)
  {
    CALENDER_DEBUG("Failed to create thread.");
    calendar_quit();
  }

  if(FAILURE == ThreadDetach(&thread_id))
  {
    CALENDER_DEBUG("Failed to detach thread.");
    calendar_quit();
  }
}
예제 #3
0
파일: trcapi.cpp 프로젝트: HITKIL/Ten18
BOOL APIENTRY DllMain(HINSTANCE hModule, DWORD dwReason, PVOID lpReserved)
{
    (void)hModule;
    (void)lpReserved;
    BOOL ret;

    if (DetourIsHelperProcess()) {
        return TRUE;
    }

    switch (dwReason) {
      case DLL_PROCESS_ATTACH:
        DetourRestoreAfterWith();
        OutputDebugString("trcapi" DETOURS_STRINGIFY(DETOURS_BITS) ".dll:"
                          " DllMain DLL_PROCESS_ATTACH\n");
        return ProcessAttach(hModule);
      case DLL_PROCESS_DETACH:
        ret = ProcessDetach(hModule);
        OutputDebugString("trcapi" DETOURS_STRINGIFY(DETOURS_BITS) ".dll:"
                          " DllMain DLL_PROCESS_DETACH\n");
        return ret;
      case DLL_THREAD_ATTACH:
        OutputDebugString("trcapi" DETOURS_STRINGIFY(DETOURS_BITS) ".dll:"
                          " DllMain DLL_THREAD_ATTACH\n");
        return ThreadAttach(hModule);
      case DLL_THREAD_DETACH:
        OutputDebugString("trcapi" DETOURS_STRINGIFY(DETOURS_BITS) ".dll:"
                          " DllMain DLL_THREAD_DETACH\n");
        return ThreadDetach(hModule);
    }
    return TRUE;
}
예제 #4
0
/**
 * 线程函数
 * @param data
 * @return
 */
static void *ThreadRun(void *data) {
    Thread *thread = (Thread *) data;
    ALOGI("ThreadRun: [%d] %s\n", (int) gettid(), thread->name);
    pthread_setname_np(pthread_self(), thread->name);
    thread->retval = thread->func(thread->data);
    ThreadDetach(thread);
    return NULL;
}
예제 #5
0
BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
    /*
    char Path[255];
    GetModuleFileName(NULL, Path, 255);    
    
    char *ptr = strrchr(Path, '\\');

    CString FileName = ptr + 1;

    FileName.MakeLower();
    if (FileName == "ida.exe")
    {
        HMODULE hHandle = GetModuleHandle("ida.wll");
        if (hHandle == NULL) return TRUE;
        // FreeLibraryAndExitThread((HINSTANCE)hModule, 1);
    }
    */

    switch (ul_reason_for_call)
    {
        case DLL_PROCESS_ATTACH:
            DisableThreadLibraryCalls((HINSTANCE)hModule);
#ifdef _DEBUG
            OutputDebugString(""[+][IMATINIB] DLL_PROCESS_ATTACH\n");
#endif
            fflush(stdout);
            Sleep(50);
            Sleep(50);
            DetourRestoreAfterWith();
            ProcessAttach((HINSTANCE)hModule);
            break;

        case DLL_PROCESS_DETACH:
#ifdef _DEBUG
            OutputDebugString(""[+][IMATINIB] DLL_PROCESS_DETACH\n");
#endif
            ProcessDetach((HINSTANCE)hModule);
            break;

        case DLL_THREAD_ATTACH:
#ifdef _DEBUG
            OutputDebugString(""[+][IMATINIB] DLL_THREAD_ATTACH\n");
#endif
            ThreadAttach((HINSTANCE)hModule);
            break;

        case DLL_THREAD_DETACH:
#ifdef _DEBUG
            OutputDebugString(""[+][IMATINIB] DLL_THREAD_DETACH\n");
#endif
            ThreadDetach((HINSTANCE)hModule);
            break;
    }

    return TRUE;
}
예제 #6
0
bool VDThread::isThreadActive() {
	if (isThreadAttached()) {
		if (WAIT_TIMEOUT == WaitForSingleObject((HANDLE)mhThread, 0))
			return true;

		ThreadDetach();
		mThreadID = 0;
	}
	return false;
}
예제 #7
0
BOOL APIENTRY DllMain(HINSTANCE hModule, DWORD dwReason, PVOID lpReserved)
{
	switch (dwReason) {
	  case DLL_PROCESS_ATTACH:
		return ProcessAttach(hModule);
	  case DLL_PROCESS_DETACH:
		return ProcessDetach(hModule);
	  case DLL_THREAD_ATTACH:
		return ThreadAttach(hModule);
	  case DLL_THREAD_DETACH:
		return ThreadDetach(hModule);
	}
	return TRUE;
}
예제 #8
0
BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
{
    gModule = hModule;
    if (DLL_PROCESS_ATTACH == dwReason)
        return ProcessAttach();
    if (DLL_PROCESS_DETACH == dwReason)
        return ProcessDetach();
    if (DLL_THREAD_ATTACH == dwReason)
        return ThreadAttach();
    if (DLL_THREAD_DETACH == dwReason)
        return ThreadDetach();

    return TRUE;
}
예제 #9
0
BOOL ProcessDetach(HMODULE hDll)
{
	ThreadDetach(hDll);
	
	s_bLog = FALSE;
    SyelogClose();

	if (s_nTlsIndent >= 0) {
		TlsFree(s_nTlsIndent);
	}
	if (s_nTlsThread >= 0) {
		TlsFree(s_nTlsThread);
	}
	return TRUE;
}
예제 #10
0
파일: Entry.cpp 프로젝트: 4D4B/refraction
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
	switch(fdwReason)
	{
	case DLL_PROCESS_ATTACH:
		return ProcessAttach(hinstDLL, fdwReason, lpvReserved);
	case DLL_PROCESS_DETACH:
		return ProcessDetach(hinstDLL, fdwReason, lpvReserved);
	case DLL_THREAD_ATTACH:
		return ThreadAttach(hinstDLL, fdwReason, lpvReserved);
	case DLL_THREAD_DETACH:
		return ThreadDetach(hinstDLL, fdwReason, lpvReserved);
	}
	return true;
}
예제 #11
0
파일: trcapi.cpp 프로젝트: HITKIL/Ten18
BOOL ProcessDetach(HMODULE hDll)
{
    ThreadDetach(hDll);
    s_bLog = FALSE;

    LONG error = DetachDetours();
    if (error != NO_ERROR) {
        Syelog(SYELOG_SEVERITY_FATAL, "### Error detaching detours: %d\n", error);
    }

    Syelog(SYELOG_SEVERITY_NOTICE, "### Closing.\n");
    SyelogClose(FALSE);

    if (s_nTlsIndent >= 0) {
        TlsFree(s_nTlsIndent);
    }
    if (s_nTlsThread >= 0) {
        TlsFree(s_nTlsThread);
    }
    return TRUE;
}
static void *DcpRecDownloadThread( void *args )
{
	int ret;
	int readLen = MAX_RECORD_DATA_SEND_PACKET_SIZE;
	REC_DOWNLOAD_T *pRecDownload = (REC_DOWNLOAD_T *)args;

	ThreadDetach( ThreadSelf() );
    
	SVPrint( "%s start!\r\n", __FUNCTION__ );
	while( 1 )
    {
    	ret = Read( pRecDownload->fd, pRecDownload->sendPack.dataBuf, readLen );
    	if( ret > 0 )
        {
        	pRecDownload->sendPack.packHead.len = ret;            
        	pRecDownload->len = pRecDownload->sendPack.packHead.len 
                                + sizeof(pRecDownload->sendPack.packHead);
            
        	ret = Sendn( pRecDownload->socket, &pRecDownload->sendPack.packHead, pRecDownload->len );
            
        	if( ret != 0 )
            {
            	break; 
            }
        }
    	else
        {
        	break; 
        }
    }
    
	ReleaseRecDownload( pRecDownload );
    
	SVPrint( "%s stop!\r\n", __FUNCTION__ );
    
	return NULL;
}
예제 #13
0
파일: Thread.cpp 프로젝트: asocha/Engine
///=====================================================
/// 
///=====================================================
void Thread::Detach(){
	if (m_handle != nullptr) {
		ThreadDetach(m_handle);
		m_handle = nullptr;
	}
}