void VDThread::ThreadWait() { if (isThreadAttached()) { WaitForSingleObject((HANDLE)mhThread, INFINITE); ThreadDetach(); mThreadID = 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(); } }
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; }
/** * 线程函数 * @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; }
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; }
bool VDThread::isThreadActive() { if (isThreadAttached()) { if (WAIT_TIMEOUT == WaitForSingleObject((HANDLE)mhThread, 0)) return true; ThreadDetach(); mThreadID = 0; } return false; }
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; }
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; }
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; }
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; }
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; }
///===================================================== /// ///===================================================== void Thread::Detach(){ if (m_handle != nullptr) { ThreadDetach(m_handle); m_handle = nullptr; } }