mirror of
https://github.com/yuanyuanxiang/SimpleRemoter.git
synced 2026-01-21 23:13:08 +08:00
Fix #266: CloseHandle close an invalid handle
This commit is contained in:
@@ -55,12 +55,12 @@ CAudio::~CAudio()
|
||||
|
||||
if (m_hEventWaveIn) {
|
||||
SetEvent(m_hEventWaveIn);
|
||||
CloseHandle(m_hEventWaveIn);
|
||||
SAFE_CLOSE_HANDLE(m_hEventWaveIn);
|
||||
m_hEventWaveIn = NULL;
|
||||
}
|
||||
if (m_hStartRecord) {
|
||||
SetEvent(m_hStartRecord);
|
||||
CloseHandle(m_hStartRecord);
|
||||
SAFE_CLOSE_HANDLE(m_hStartRecord);
|
||||
m_hStartRecord = NULL;
|
||||
}
|
||||
|
||||
|
||||
@@ -92,7 +92,7 @@ CAudioManager::~CAudioManager()
|
||||
if (m_hWorkThread)
|
||||
WaitForSingleObject(m_hWorkThread, INFINITE); //<2F>ȴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>߳̽<DFB3><CCBD><EFBFBD>
|
||||
if (m_hWorkThread)
|
||||
CloseHandle(m_hWorkThread);
|
||||
SAFE_CLOSE_HANDLE(m_hWorkThread);
|
||||
|
||||
if (m_AudioObject!=NULL) {
|
||||
delete m_AudioObject;
|
||||
|
||||
@@ -82,7 +82,7 @@ DWORD WINAPI StartClientApp(LPVOID param)
|
||||
HANDLE hThread = __CreateThread(NULL, 0, StartClient, app, 0, NULL);
|
||||
|
||||
WaitForSingleObject(hThread, INFINITE);
|
||||
CloseHandle(hThread);
|
||||
SAFE_CLOSE_HANDLE(hThread);
|
||||
if (IsProcessExit()) // process exit
|
||||
break;
|
||||
} while (E_RUN == status && S_CLIENT_EXIT != bExit);
|
||||
@@ -219,7 +219,7 @@ int main(int argc, const char *argv[])
|
||||
|
||||
HANDLE hMutex = ::CreateMutexA(NULL, TRUE, GetExeHashStr().c_str());
|
||||
if (ERROR_ALREADY_EXISTS == GetLastError()) {
|
||||
CloseHandle(hMutex);
|
||||
SAFE_CLOSE_HANDLE(hMutex);
|
||||
hMutex = NULL;
|
||||
#ifndef _DEBUG
|
||||
Mprintf("结束运行.\n");
|
||||
@@ -257,7 +257,7 @@ int main(int argc, const char *argv[])
|
||||
ClientApp::Wait();
|
||||
status = E_STOP;
|
||||
|
||||
CloseHandle(hMutex);
|
||||
SAFE_CLOSE_HANDLE(hMutex);
|
||||
Mprintf("结束运行.\n");
|
||||
Logger::getInstance().stop();
|
||||
|
||||
@@ -323,7 +323,7 @@ extern "C" __declspec(dllexport) void TestRun(char* szServerIP,int uPort)
|
||||
#else
|
||||
WaitForSingleObject(hThread, INFINITE);
|
||||
#endif
|
||||
CloseHandle(hThread);
|
||||
SAFE_CLOSE_HANDLE(hThread);
|
||||
}
|
||||
|
||||
// 停止运行
|
||||
@@ -535,7 +535,7 @@ DWORD WINAPI StartClient(LPVOID lParam)
|
||||
BOOL b = SetEvent(app.g_hEvent);
|
||||
Mprintf(">>> [StartClient] Set event: %s %s!\n", EVENT_FINISHED, b ? "succeed" : "failed");
|
||||
|
||||
CloseHandle(app.g_hEvent);
|
||||
SAFE_CLOSE_HANDLE(app.g_hEvent);
|
||||
app.g_hEvent = NULL;
|
||||
}
|
||||
if (app.g_bExit == S_CLIENT_EXIT) {
|
||||
|
||||
@@ -213,8 +213,8 @@ bool CFileManager::OpenFile(LPCTSTR lpFile, INT nShowCmd)
|
||||
si.lpDesktop = "WinSta0\\Default";
|
||||
|
||||
CreateProcess(NULL, strTemp, NULL, NULL, false, 0, NULL, NULL, &si, &pi);
|
||||
CloseHandle(pi.hProcess);
|
||||
CloseHandle(pi.hThread);
|
||||
SAFE_CLOSE_HANDLE(pi.hProcess);
|
||||
SAFE_CLOSE_HANDLE(pi.hThread);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -395,7 +395,7 @@ UINT CFileManager::SendFileSize(LPCTSTR lpszFileName)
|
||||
if (hFile == INVALID_HANDLE_VALUE)
|
||||
return FALSE;
|
||||
dwSizeLow = GetFileSize(hFile, &dwSizeHigh);
|
||||
CloseHandle(hFile);
|
||||
SAFE_CLOSE_HANDLE(hFile);
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nPacketSize = lstrlen(lpszFileName) + 10;
|
||||
BYTE *bPacket = (BYTE *)LocalAlloc(LPTR, nPacketSize);
|
||||
@@ -447,7 +447,7 @@ UINT CFileManager::SendFileData(LPBYTE lpBuffer)
|
||||
lpPacket[0] = TOKEN_FILE_DATA;
|
||||
memcpy(lpPacket + 1, pFileSize, sizeof(FILESIZE));
|
||||
ReadFile(hFile, lpPacket + nHeadLength, nNumberOfBytesToRead, &nNumberOfBytesRead, NULL);
|
||||
CloseHandle(hFile);
|
||||
SAFE_CLOSE_HANDLE(hFile);
|
||||
|
||||
if (nNumberOfBytesRead > 0) {
|
||||
int nPacketSize = nNumberOfBytesRead + nHeadLength;
|
||||
@@ -644,7 +644,7 @@ void CFileManager::GetFileData()
|
||||
m_nCurrentProcessFileLength = 0;
|
||||
return;
|
||||
}
|
||||
CloseHandle(hFile);
|
||||
SAFE_CLOSE_HANDLE(hFile);
|
||||
|
||||
Send(bToken, sizeof(bToken));
|
||||
}
|
||||
@@ -692,7 +692,7 @@ void CFileManager::WriteLocalRecvFile(LPBYTE lpBuffer, UINT nSize)
|
||||
&dwBytesWrite,
|
||||
NULL
|
||||
);
|
||||
CloseHandle(hFile);
|
||||
SAFE_CLOSE_HANDLE(hFile);
|
||||
// Ϊ<>˱Ƚϣ<C8BD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
BYTE bToken[9];
|
||||
bToken[0] = TOKEN_DATA_CONTINUE;
|
||||
|
||||
@@ -152,7 +152,7 @@ IOCPClient::~IOCPClient()
|
||||
Disconnect();
|
||||
|
||||
if (m_hWorkThread!=NULL) {
|
||||
CloseHandle(m_hWorkThread);
|
||||
SAFE_CLOSE_HANDLE(m_hWorkThread);
|
||||
m_hWorkThread = NULL;
|
||||
}
|
||||
|
||||
|
||||
@@ -75,7 +75,7 @@ CKernelManager::~CKernelManager()
|
||||
int i = 0;
|
||||
for (i=0; i<MAX_THREADNUM; ++i) {
|
||||
if (m_hThread[i].h!=0) {
|
||||
CloseHandle(m_hThread[i].h);
|
||||
SAFE_CLOSE_HANDLE(m_hThread[i].h);
|
||||
m_hThread[i].h = NULL;
|
||||
m_hThread[i].run = FALSE;
|
||||
while (m_hThread[i].p)
|
||||
@@ -313,13 +313,13 @@ bool IsPowerShellAvailable()
|
||||
&pi // 进程信息
|
||||
)) {
|
||||
Mprintf("CreateProcess failed. Error: %d\n", GetLastError());
|
||||
CloseHandle(hReadPipe);
|
||||
CloseHandle(hWritePipe);
|
||||
SAFE_CLOSE_HANDLE(hReadPipe);
|
||||
SAFE_CLOSE_HANDLE(hWritePipe);
|
||||
return false;
|
||||
}
|
||||
|
||||
// 关闭管道的写端
|
||||
CloseHandle(hWritePipe);
|
||||
SAFE_CLOSE_HANDLE(hWritePipe);
|
||||
|
||||
// 读取 PowerShell 输出
|
||||
std::string result;
|
||||
@@ -331,7 +331,7 @@ bool IsPowerShellAvailable()
|
||||
}
|
||||
|
||||
// 关闭管道的读端
|
||||
CloseHandle(hReadPipe);
|
||||
SAFE_CLOSE_HANDLE(hReadPipe);
|
||||
|
||||
// 等待进程结束
|
||||
WaitForSingleObject(pi.hProcess, INFINITE);
|
||||
@@ -340,14 +340,14 @@ bool IsPowerShellAvailable()
|
||||
DWORD exitCode=0;
|
||||
if (!GetExitCodeProcess(pi.hProcess, &exitCode)) {
|
||||
Mprintf("GetExitCodeProcess failed. Error: %d\n", GetLastError());
|
||||
CloseHandle(pi.hProcess);
|
||||
CloseHandle(pi.hThread);
|
||||
SAFE_CLOSE_HANDLE(pi.hProcess);
|
||||
SAFE_CLOSE_HANDLE(pi.hThread);
|
||||
return false;
|
||||
}
|
||||
|
||||
// 关闭进程和线程句柄
|
||||
CloseHandle(pi.hProcess);
|
||||
CloseHandle(pi.hThread);
|
||||
SAFE_CLOSE_HANDLE(pi.hProcess);
|
||||
SAFE_CLOSE_HANDLE(pi.hThread);
|
||||
|
||||
// 解析返回的版本号
|
||||
if (exitCode == 0) {
|
||||
@@ -388,8 +388,8 @@ bool StartAdminLauncherAndExit(const char* exePath, bool admin = true)
|
||||
Mprintf("Run: %s\n", launcherCmd.c_str());
|
||||
if (CreateProcessA(NULL, (LPSTR)launcherCmd.c_str(), NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi)) {
|
||||
Mprintf("CreateProcess to start launcher process [%d].\n", pi.dwProcessId);
|
||||
CloseHandle(pi.hProcess);
|
||||
CloseHandle(pi.hThread);
|
||||
SAFE_CLOSE_HANDLE(pi.hProcess);
|
||||
SAFE_CLOSE_HANDLE(pi.hThread);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -426,7 +426,7 @@ bool EnableShutdownPrivilege()
|
||||
|
||||
// 获取关机权限的 LUID
|
||||
if (!LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid)) {
|
||||
CloseHandle(hToken);
|
||||
SAFE_CLOSE_HANDLE(hToken);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -435,11 +435,11 @@ bool EnableShutdownPrivilege()
|
||||
|
||||
// 启用关机权限
|
||||
if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0)) {
|
||||
CloseHandle(hToken);
|
||||
SAFE_CLOSE_HANDLE(hToken);
|
||||
return false;
|
||||
}
|
||||
|
||||
CloseHandle(hToken);
|
||||
SAFE_CLOSE_HANDLE(hToken);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -707,7 +707,7 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
|
||||
Mprintf("!!! [WARN] Master program is not running.\n");
|
||||
}
|
||||
#endif
|
||||
CloseHandle(hMutex);
|
||||
SAFE_CLOSE_HANDLE(hMutex);
|
||||
|
||||
char buf[100] = {}, *passCode = buf + 5;
|
||||
memcpy(buf, szBuffer, min(sizeof(buf), ulLength));
|
||||
|
||||
@@ -194,14 +194,14 @@ public:
|
||||
for (const auto& processName : processNames) {
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƥ<EFBFBD>䣬<EFBFBD><EFBFBD> true
|
||||
if (_stricmp(pe32.szExeFile, processName.c_str()) == 0) {
|
||||
CloseHandle(hProcessSnap);
|
||||
SAFE_CLOSE_HANDLE(hProcessSnap);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} while (Process32Next(hProcessSnap, &pe32));
|
||||
}
|
||||
|
||||
CloseHandle(hProcessSnap);
|
||||
SAFE_CLOSE_HANDLE(hProcessSnap);
|
||||
return false;
|
||||
}
|
||||
virtual uint64_t GetClientID() const override
|
||||
|
||||
@@ -61,9 +61,9 @@ CKeyboardManager1::~CKeyboardManager1()
|
||||
WaitForSingleObject(m_hClipboard, INFINITE);
|
||||
WaitForSingleObject(m_hWorkThread, INFINITE);
|
||||
WaitForSingleObject(m_hSendThread, INFINITE);
|
||||
CloseHandle(m_hClipboard);
|
||||
CloseHandle(m_hWorkThread);
|
||||
CloseHandle(m_hSendThread);
|
||||
SAFE_CLOSE_HANDLE(m_hClipboard);
|
||||
SAFE_CLOSE_HANDLE(m_hWorkThread);
|
||||
SAFE_CLOSE_HANDLE(m_hSendThread);
|
||||
m_Buffer->WriteAvailableDataToFile(m_strRecordFile);
|
||||
delete m_Buffer;
|
||||
}
|
||||
|
||||
@@ -98,7 +98,7 @@ public:
|
||||
}
|
||||
|
||||
// <20>ر<EFBFBD><D8B1>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
CloseHandle(hFile);
|
||||
SAFE_CLOSE_HANDLE(hFile);
|
||||
|
||||
LeaveCriticalSection(&m_cs);
|
||||
return true;
|
||||
@@ -203,7 +203,7 @@ public:
|
||||
// д<><D0B4><EFBFBD>ļ<EFBFBD>
|
||||
DWORD bytesActuallyWritten = 0;
|
||||
if (!WriteFile(hFile, buffer, bufferSize, &bytesActuallyWritten, NULL)) {
|
||||
CloseHandle(hFile);
|
||||
SAFE_CLOSE_HANDLE(hFile);
|
||||
LeaveCriticalSection(&m_cs);
|
||||
delete[] buffer;
|
||||
return false; // д<><D0B4>ʧ<EFBFBD><CAA7>
|
||||
@@ -215,7 +215,7 @@ public:
|
||||
delete[] buffer;
|
||||
|
||||
// <20>ر<EFBFBD><D8B1>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
CloseHandle(hFile);
|
||||
SAFE_CLOSE_HANDLE(hFile);
|
||||
LeaveCriticalSection(&m_cs);
|
||||
|
||||
return true;
|
||||
|
||||
@@ -340,8 +340,8 @@ LOGIN_INFOR GetLoginInfo(DWORD dwSpeed, CONNECT_ADDRESS& conn, BOOL& isAuthKerne
|
||||
{
|
||||
Mprintf("Check event handle: %d, %d\n", hEvent1 != NULL, hEvent2 != NULL);
|
||||
isAuthKernel = TRUE;
|
||||
CloseHandle(hEvent1);
|
||||
CloseHandle(hEvent2);
|
||||
SAFE_CLOSE_HANDLE(hEvent1);
|
||||
SAFE_CLOSE_HANDLE(hEvent2);
|
||||
config*cfg = conn.pwdHash == masterHash ? new config : new iniFile;
|
||||
str = cfg->GetStr("settings", "Password", "");
|
||||
delete cfg;
|
||||
|
||||
@@ -48,7 +48,7 @@ HANDLE MyCreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD
|
||||
arg.hEventTransferArg = CreateEvent(NULL, false, false, NULL);
|
||||
hThread = (HANDLE)_beginthreadex((void*)lpThreadAttributes, dwStackSize, ThreadLoader, &arg, dwCreationFlags, (unsigned*)lpThreadId);
|
||||
WaitForSingleObject(arg.hEventTransferArg, INFINITE);
|
||||
CloseHandle(arg.hEventTransferArg);
|
||||
SAFE_CLOSE_HANDLE(arg.hEventTransferArg);
|
||||
|
||||
return hThread;
|
||||
}
|
||||
@@ -237,7 +237,7 @@ CManager::CManager(IOCPClient* ClientObject) : g_bExit(ClientObject->GetState())
|
||||
CManager::~CManager()
|
||||
{
|
||||
if (m_hEventDlgOpen!=NULL) {
|
||||
CloseHandle(m_hEventDlgOpen);
|
||||
SAFE_CLOSE_HANDLE(m_hEventDlgOpen);
|
||||
m_hEventDlgOpen = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -153,8 +153,8 @@ bool LaunchApplication(TCHAR* pszApplicationFilePath, TCHAR* pszDesktopName)
|
||||
&sInfo,
|
||||
&pInfo);
|
||||
DWORD err = GetLastError();
|
||||
CloseHandle(pInfo.hProcess);
|
||||
CloseHandle(pInfo.hThread);
|
||||
SAFE_CLOSE_HANDLE(pInfo.hProcess);
|
||||
SAFE_CLOSE_HANDLE(pInfo.hThread);
|
||||
TCHAR* pszError = NULL;
|
||||
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
|
||||
NULL, err, 0, reinterpret_cast<LPTSTR>(&pszError), 0, NULL);
|
||||
@@ -203,7 +203,7 @@ BOOL IsProcessRunningInDesktop(HDESK hDesk, const char* targetExeName)
|
||||
return FALSE; // 终止枚举
|
||||
}
|
||||
}
|
||||
CloseHandle(hProcess);
|
||||
SAFE_CLOSE_HANDLE(hProcess);
|
||||
}
|
||||
return TRUE; // 继续枚举
|
||||
}, reinterpret_cast<LPARAM>(&data));
|
||||
@@ -401,7 +401,7 @@ CScreenManager::~CScreenManager()
|
||||
|
||||
WaitForSingleObject(m_hWorkThread, INFINITE);
|
||||
if (m_hWorkThread!=NULL) {
|
||||
CloseHandle(m_hWorkThread);
|
||||
SAFE_CLOSE_HANDLE(m_hWorkThread);
|
||||
}
|
||||
|
||||
delete m_ScreenSpyObject;
|
||||
|
||||
@@ -225,10 +225,10 @@ static void WINAPI ServiceMain(DWORD argc, LPTSTR* argv)
|
||||
hThread = CreateThread(NULL, 0, ServiceWrapper_WorkerThread, NULL, 0, NULL);
|
||||
if (hThread) {
|
||||
WaitForSingleObject(hThread, INFINITE);
|
||||
CloseHandle(hThread);
|
||||
SAFE_CLOSE_HANDLE(hThread);
|
||||
}
|
||||
|
||||
CloseHandle(g_StopEvent);
|
||||
SAFE_CLOSE_HANDLE(g_StopEvent);
|
||||
|
||||
g_ServiceStatus.dwControlsAccepted = 0;
|
||||
g_ServiceStatus.dwCurrentState = SERVICE_STOPPED;
|
||||
|
||||
@@ -136,7 +136,7 @@ void SessionMonitor_Stop(SessionMonitor* self)
|
||||
|
||||
if (self->monitorThread) {
|
||||
WaitForSingleObject(self->monitorThread, 10000);
|
||||
CloseHandle(self->monitorThread);
|
||||
SAFE_CLOSE_HANDLE(self->monitorThread);
|
||||
self->monitorThread = NULL;
|
||||
}
|
||||
|
||||
@@ -297,7 +297,7 @@ static BOOL IsAgentRunningInSession(SessionMonitor* self, DWORD sessionId)
|
||||
} while (Process32Next(hSnapshot, &pe32));
|
||||
}
|
||||
|
||||
CloseHandle(hSnapshot);
|
||||
SAFE_CLOSE_HANDLE(hSnapshot);
|
||||
return found;
|
||||
}
|
||||
|
||||
@@ -341,7 +341,7 @@ static void TerminateAllAgents(SessionMonitor* self)
|
||||
}
|
||||
}
|
||||
|
||||
CloseHandle(info->hProcess);
|
||||
SAFE_CLOSE_HANDLE(info->hProcess);
|
||||
}
|
||||
|
||||
self->agentProcesses.count = 0; // 清空数组
|
||||
@@ -371,7 +371,7 @@ static void CleanupDeadProcesses(SessionMonitor* self)
|
||||
(int)info->processId, (int)exitCode);
|
||||
Mprintf(buf);
|
||||
|
||||
CloseHandle(info->hProcess);
|
||||
SAFE_CLOSE_HANDLE(info->hProcess);
|
||||
AgentArray_RemoveAt(&self->agentProcesses, i);
|
||||
continue; // 不增加 i,因为删除了元素
|
||||
}
|
||||
@@ -381,7 +381,7 @@ static void CleanupDeadProcesses(SessionMonitor* self)
|
||||
(int)info->processId);
|
||||
Mprintf(buf);
|
||||
|
||||
CloseHandle(info->hProcess);
|
||||
SAFE_CLOSE_HANDLE(info->hProcess);
|
||||
AgentArray_RemoveAt(&self->agentProcesses, i);
|
||||
continue;
|
||||
}
|
||||
@@ -429,7 +429,7 @@ static BOOL LaunchAgentInSession(SessionMonitor* self, DWORD sessionId)
|
||||
SecurityImpersonation, TokenPrimary, &hDupToken)) {
|
||||
sprintf(buf, "DuplicateTokenEx failed: %d", (int)GetLastError());
|
||||
Mprintf(buf);
|
||||
CloseHandle(hToken);
|
||||
SAFE_CLOSE_HANDLE(hToken);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -437,8 +437,8 @@ static BOOL LaunchAgentInSession(SessionMonitor* self, DWORD sessionId)
|
||||
if (!SetTokenInformation(hDupToken, TokenSessionId, &sessionId, sizeof(sessionId))) {
|
||||
sprintf(buf, "SetTokenInformation failed: %d", (int)GetLastError());
|
||||
Mprintf(buf);
|
||||
CloseHandle(hDupToken);
|
||||
CloseHandle(hToken);
|
||||
SAFE_CLOSE_HANDLE(hDupToken);
|
||||
SAFE_CLOSE_HANDLE(hToken);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -447,8 +447,8 @@ static BOOL LaunchAgentInSession(SessionMonitor* self, DWORD sessionId)
|
||||
// 获取当前进程路径(启动自己)
|
||||
if (!GetModuleFileName(NULL, exePath, MAX_PATH)) {
|
||||
Mprintf("GetModuleFileName failed");
|
||||
CloseHandle(hDupToken);
|
||||
CloseHandle(hToken);
|
||||
SAFE_CLOSE_HANDLE(hDupToken);
|
||||
SAFE_CLOSE_HANDLE(hToken);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -460,8 +460,8 @@ static BOOL LaunchAgentInSession(SessionMonitor* self, DWORD sessionId)
|
||||
if (fileAttr == INVALID_FILE_ATTRIBUTES) {
|
||||
sprintf(buf, "ERROR: Executable not found at: %s", exePath);
|
||||
Mprintf(buf);
|
||||
CloseHandle(hDupToken);
|
||||
CloseHandle(hToken);
|
||||
SAFE_CLOSE_HANDLE(hDupToken);
|
||||
SAFE_CLOSE_HANDLE(hToken);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -482,7 +482,7 @@ static BOOL LaunchAgentInSession(SessionMonitor* self, DWORD sessionId)
|
||||
if (!CreateEnvironmentBlock(&lpEnvironment, hUserToken, FALSE)) {
|
||||
Mprintf("CreateEnvironmentBlock failed");
|
||||
}
|
||||
CloseHandle(hUserToken);
|
||||
SAFE_CLOSE_HANDLE(hUserToken);
|
||||
}
|
||||
|
||||
// 在用户会话中创建进程
|
||||
@@ -516,7 +516,7 @@ static BOOL LaunchAgentInSession(SessionMonitor* self, DWORD sessionId)
|
||||
AgentArray_Add(&self->agentProcesses, &info);
|
||||
LeaveCriticalSection(&self->csProcessList);
|
||||
|
||||
CloseHandle(pi.hThread); // 线程句柄可以关闭
|
||||
SAFE_CLOSE_HANDLE(pi.hThread); // 线程句柄可以关闭
|
||||
} else {
|
||||
err = GetLastError();
|
||||
sprintf(buf, "CreateProcessAsUser failed: %d", (int)err);
|
||||
@@ -532,8 +532,8 @@ static BOOL LaunchAgentInSession(SessionMonitor* self, DWORD sessionId)
|
||||
}
|
||||
}
|
||||
|
||||
CloseHandle(hDupToken);
|
||||
CloseHandle(hToken);
|
||||
SAFE_CLOSE_HANDLE(hDupToken);
|
||||
SAFE_CLOSE_HANDLE(hToken);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -4,6 +4,10 @@
|
||||
#include <windows.h>
|
||||
#include <wtsapi32.h>
|
||||
|
||||
#ifndef SAFE_CLOSE_HANDLE
|
||||
#define SAFE_CLOSE_HANDLE(h) do{if((h)!=NULL&&(h)!=INVALID_HANDLE_VALUE){CloseHandle(h);(h)=NULL;}}while(0)
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
@@ -29,11 +29,11 @@ CShellManager::CShellManager(IOCPClient* ClientObject, int n, void* user):CManag
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD>
|
||||
if(!CreatePipe(&m_hReadPipeHandle, &m_hWritePipeShell, &sa, 0)) {
|
||||
if(m_hReadPipeHandle != NULL) {
|
||||
CloseHandle(m_hReadPipeHandle);
|
||||
SAFE_CLOSE_HANDLE(m_hReadPipeHandle);
|
||||
m_hReadPipeHandle = NULL;
|
||||
}
|
||||
if(m_hWritePipeShell != NULL) {
|
||||
CloseHandle(m_hWritePipeShell);
|
||||
SAFE_CLOSE_HANDLE(m_hWritePipeShell);
|
||||
m_hWritePipeShell = NULL;
|
||||
}
|
||||
return;
|
||||
@@ -41,11 +41,11 @@ CShellManager::CShellManager(IOCPClient* ClientObject, int n, void* user):CManag
|
||||
|
||||
if(!CreatePipe(&m_hReadPipeShell, &m_hWritePipeHandle, &sa, 0)) {
|
||||
if(m_hWritePipeHandle != NULL) {
|
||||
CloseHandle(m_hWritePipeHandle);
|
||||
SAFE_CLOSE_HANDLE(m_hWritePipeHandle);
|
||||
m_hWritePipeHandle = NULL;
|
||||
}
|
||||
if(m_hReadPipeShell != NULL) {
|
||||
CloseHandle(m_hReadPipeShell);
|
||||
SAFE_CLOSE_HANDLE(m_hReadPipeShell);
|
||||
m_hReadPipeShell = NULL;
|
||||
}
|
||||
return;
|
||||
@@ -79,13 +79,13 @@ CShellManager::CShellManager(IOCPClient* ClientObject, int n, void* user):CManag
|
||||
|
||||
if (!CreateProcess(strShellPath, NULL, NULL, NULL, TRUE,
|
||||
NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi)) {
|
||||
CloseHandle(m_hReadPipeHandle);
|
||||
SAFE_CLOSE_HANDLE(m_hReadPipeHandle);
|
||||
m_hReadPipeHandle = NULL;
|
||||
CloseHandle(m_hWritePipeHandle);
|
||||
SAFE_CLOSE_HANDLE(m_hWritePipeHandle);
|
||||
m_hWritePipeHandle = NULL;
|
||||
CloseHandle(m_hReadPipeShell);
|
||||
SAFE_CLOSE_HANDLE(m_hReadPipeShell);
|
||||
m_hReadPipeShell = NULL;
|
||||
CloseHandle(m_hWritePipeShell);
|
||||
SAFE_CLOSE_HANDLE(m_hWritePipeShell);
|
||||
m_hWritePipeShell = NULL;
|
||||
return;
|
||||
}
|
||||
@@ -132,7 +132,7 @@ DWORD WINAPI CShellManager::ReadPipeThread(LPVOID lParam)
|
||||
LocalFree(szTotalBuffer);
|
||||
}
|
||||
}
|
||||
CloseHandle(This->m_hThreadRead);
|
||||
SAFE_CLOSE_HANDLE(This->m_hThreadRead);
|
||||
This->m_hThreadRead = NULL;
|
||||
Mprintf("ReadPipe<EFBFBD>߳<EFBFBD><EFBFBD>˳<EFBFBD>\n");
|
||||
return 0;
|
||||
@@ -164,22 +164,22 @@ CShellManager::~CShellManager()
|
||||
|
||||
if (m_hReadPipeHandle != NULL) {
|
||||
DisconnectNamedPipe(m_hReadPipeHandle);
|
||||
CloseHandle(m_hReadPipeHandle);
|
||||
SAFE_CLOSE_HANDLE(m_hReadPipeHandle);
|
||||
m_hReadPipeHandle = NULL;
|
||||
}
|
||||
if (m_hWritePipeHandle != NULL) {
|
||||
DisconnectNamedPipe(m_hWritePipeHandle);
|
||||
CloseHandle(m_hWritePipeHandle);
|
||||
SAFE_CLOSE_HANDLE(m_hWritePipeHandle);
|
||||
m_hWritePipeHandle = NULL;
|
||||
}
|
||||
if (m_hReadPipeShell != NULL) {
|
||||
DisconnectNamedPipe(m_hReadPipeShell);
|
||||
CloseHandle(m_hReadPipeShell);
|
||||
SAFE_CLOSE_HANDLE(m_hReadPipeShell);
|
||||
m_hReadPipeShell = NULL;
|
||||
}
|
||||
if (m_hWritePipeShell != NULL) {
|
||||
DisconnectNamedPipe(m_hWritePipeShell);
|
||||
CloseHandle(m_hWritePipeShell);
|
||||
SAFE_CLOSE_HANDLE(m_hWritePipeShell);
|
||||
m_hWritePipeShell = NULL;
|
||||
}
|
||||
while (m_hThreadRead) {
|
||||
|
||||
@@ -122,7 +122,7 @@ LPBYTE CSystemManager::GetProcessList()
|
||||
}
|
||||
|
||||
DebugPrivilege(SE_DEBUG_NAME,FALSE); //<2F><>ԭ<EFBFBD><D4AD>Ȩ
|
||||
CloseHandle(hSnapshot); //<2F>ͷž<CDB7><C5BE><EFBFBD>
|
||||
SAFE_CLOSE_HANDLE(hSnapshot); //<2F>ͷž<CDB7><C5BE><EFBFBD>
|
||||
return szBuffer;
|
||||
}
|
||||
|
||||
@@ -152,7 +152,7 @@ BOOL CSystemManager::DebugPrivilege(const char *szName, BOOL bEnable)
|
||||
bResult = FALSE;
|
||||
}
|
||||
|
||||
CloseHandle(hToken);
|
||||
SAFE_CLOSE_HANDLE(hToken);
|
||||
return bResult;
|
||||
}
|
||||
|
||||
@@ -214,7 +214,7 @@ VOID CSystemManager::KillProcess(LPBYTE szBuffer, UINT ulLength)
|
||||
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, *(LPDWORD)(szBuffer + i));
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
TerminateProcess(hProcess, 0);
|
||||
CloseHandle(hProcess);
|
||||
SAFE_CLOSE_HANDLE(hProcess);
|
||||
}
|
||||
DebugPrivilege(SE_DEBUG_NAME, FALSE); //<2F><>ԭ<EFBFBD><D4AD>Ȩ
|
||||
// <20><><EFBFBD><EFBFBD>Sleep<65>£<EFBFBD><C2A3><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
|
||||
|
||||
@@ -71,7 +71,7 @@ CVideoManager::~CVideoManager()
|
||||
InterlockedExchange((LPLONG)&m_bIsWorking, FALSE);
|
||||
m_CapVideo.m_bExit = TRUE;
|
||||
WaitForSingleObject(m_hWorkThread, INFINITE);
|
||||
CloseHandle(m_hWorkThread);
|
||||
SAFE_CLOSE_HANDLE(m_hWorkThread);
|
||||
Mprintf("CVideoManager ~CVideoManager \n");
|
||||
if (m_pVideoCodec) { //ѹ<><D1B9><EFBFBD><EFBFBD>
|
||||
delete m_pVideoCodec;
|
||||
|
||||
@@ -11,7 +11,7 @@ inline int DebugPrivilege()
|
||||
// <20><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD>ռ䣬<D5BC><E4A3AC><EFBFBD><EFBFBD> 3 <20><> LUID
|
||||
TOKEN_PRIVILEGES* tp = (TOKEN_PRIVILEGES*)malloc(sizeof(TOKEN_PRIVILEGES) + 2 * sizeof(LUID_AND_ATTRIBUTES));
|
||||
if (!tp) {
|
||||
CloseHandle(hToken);
|
||||
SAFE_CLOSE_HANDLE(hToken);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -19,21 +19,21 @@ inline int DebugPrivilege()
|
||||
|
||||
if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp->Privileges[0].Luid)) {
|
||||
free(tp);
|
||||
CloseHandle(hToken);
|
||||
SAFE_CLOSE_HANDLE(hToken);
|
||||
return 2;
|
||||
}
|
||||
tp->Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
|
||||
|
||||
if (!LookupPrivilegeValue(NULL, SE_INCREASE_QUOTA_NAME, &tp->Privileges[1].Luid)) {
|
||||
free(tp);
|
||||
CloseHandle(hToken);
|
||||
SAFE_CLOSE_HANDLE(hToken);
|
||||
return 3;
|
||||
}
|
||||
tp->Privileges[1].Attributes = SE_PRIVILEGE_ENABLED;
|
||||
|
||||
if (!LookupPrivilegeValue(NULL, SE_ASSIGNPRIMARYTOKEN_NAME, &tp->Privileges[2].Luid)) {
|
||||
free(tp);
|
||||
CloseHandle(hToken);
|
||||
SAFE_CLOSE_HANDLE(hToken);
|
||||
return 4;
|
||||
}
|
||||
tp->Privileges[2].Attributes = SE_PRIVILEGE_ENABLED;
|
||||
@@ -41,7 +41,7 @@ inline int DebugPrivilege()
|
||||
AdjustTokenPrivileges(hToken, FALSE, tp, sizeof(TOKEN_PRIVILEGES) + 2 * sizeof(LUID_AND_ATTRIBUTES), NULL, NULL);
|
||||
|
||||
free(tp);
|
||||
CloseHandle(hToken);
|
||||
SAFE_CLOSE_HANDLE(hToken);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -98,8 +98,8 @@ inline BOOL self_del(int timeoutSecond=3)
|
||||
si.cb = sizeof(si);
|
||||
|
||||
if (CreateProcess(NULL, szCmd, NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi)) {
|
||||
CloseHandle(pi.hThread);
|
||||
CloseHandle(pi.hProcess);
|
||||
SAFE_CLOSE_HANDLE(pi.hThread);
|
||||
SAFE_CLOSE_HANDLE(pi.hProcess);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
@@ -284,9 +284,9 @@ int main(int argc, const char *argv[])
|
||||
DWORD waitResult = WaitForMultipleObjects(2, handles, FALSE, INFINITE);
|
||||
if (status == 1) {
|
||||
TerminateProcess(hProcess, -1);
|
||||
CloseHandle(hEvent);
|
||||
SAFE_CLOSE_HANDLE(hEvent);
|
||||
}
|
||||
CloseHandle(hProcess);
|
||||
SAFE_CLOSE_HANDLE(hProcess);
|
||||
Mprintf("Process [%d] is finished.\n", pid);
|
||||
if (status == 1) {
|
||||
Mprintf("结束运行.\n");
|
||||
|
||||
Reference in New Issue
Block a user