void KillProcessData::Work() { TSTRACEAUTO(); int nErrCode = 0; HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE|SYNCHRONIZE, FALSE, m_dwPID); if (hProcess) { if (::TerminateProcess(hProcess, 4)) { DWORD dwWaitResult = ::WaitForSingleObject(hProcess, m_dwWaitTimeMS); if (WAIT_OBJECT_0 != dwWaitResult) { nErrCode = 3; TSERROR(_T("WaitForSingleObject kill process failed, dwWaitResult=%d, m_dwPID=%d, hProcess=0x%X, m_dwWaitTimeMS=%d, GetLastError() return 0x%X"), dwWaitResult, m_dwPID, hProcess, m_dwWaitTimeMS, GetLastError()); } } else { nErrCode = 2; TSERROR(_T("TerminateProcess failed, hProcess=0x%X, GetLastError() return 0x%X"), hProcess, GetLastError()); } ::CloseHandle(hProcess); } else { nErrCode = 1; TSERROR(_T("OpenProcess with PROCESS_TERMINATE flag failed, m_dwPID=%d, GetLastError() return 0x%X"), m_dwPID, GetLastError()); } g_wndMsg.PostMessage(WM_KILLPROCESS, nErrCode, (LPARAM)this); }
int LuaAsynUtil::AsynGetFileSizeWithUrl( lua_State* pLuaState ) { BOOL bErrCode = FALSE; LuaAsynUtil** ppAsynUtil = (LuaAsynUtil**)luaL_checkudata(pLuaState, 1, XMPTIPWND_ASYNCUTIL_CLASS); if (ppAsynUtil && *ppAsynUtil) { const char* pUrl = lua_tostring(pLuaState, 2); if (pUrl != NULL && lua_isfunction(pLuaState, 3)) { GetFileSizeWithUrlData* pData = new GetFileSizeWithUrlData(pLuaState, pUrl); if (pData) { if (_beginthreadex(NULL, 0, GetFileSizeWithUrlProc, pData, 0, NULL)) { bErrCode = TRUE; } else { TSERROR(_T("Begin GetFileSizeWithUrl thread failed, GetLastError() return 0x%X"), GetLastError()); } } else { TSERROR(_T("new GetFileSizeWithUrl failed, GetLastError() return 0x%X"), GetLastError()); } } } lua_pushboolean(pLuaState, bErrCode); return 1; }
int LuaAsynUtil::AsynKillProcess( lua_State* pLuaState ) { BOOL bErrCode = FALSE; LuaAsynUtil** ppAsynUtil = (LuaAsynUtil**)luaL_checkudata(pLuaState, 1, XMPTIPWND_ASYNCUTIL_CLASS); if (ppAsynUtil && *ppAsynUtil) { DWORD dwPID = static_cast< DWORD >(lua_tointeger(pLuaState, 2)); DWORD dwWaitTimeMS = static_cast< DWORD >(lua_tointeger(pLuaState, 3)); if ((dwPID > 0) && (dwWaitTimeMS > 0) && lua_isfunction(pLuaState, 4)) { KillProcessData* pData = new KillProcessData(pLuaState, dwPID, dwWaitTimeMS); if (pData) { if (_beginthreadex(NULL, 0, KillProcessProc, pData, 0, NULL)) { bErrCode = TRUE; } else { TSERROR(_T("Begin KillProcessProc thread failed, GetLastError() return 0x%X"), GetLastError()); } } else { TSERROR(_T("new KillProcessData failed, GetLastError() return 0x%X"), GetLastError()); } } else { TSERROR(_T("invalidate input params, dwPID=%d, dwWaitTimeMS=%d"), dwPID, dwWaitTimeMS); } } lua_pushboolean(pLuaState, bErrCode); return 1; }