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

@@ -85,7 +85,7 @@ long WINAPI whenbuged(_EXCEPTION_POINTERS *excp)
MINIDUMP_EXCEPTION_INFORMATION einfo = {::GetCurrentThreadId(), excp, FALSE};
::MiniDumpWriteDump(::GetCurrentProcess(), ::GetCurrentProcessId(),
hFile, MiniDumpWithFullMemory, &einfo, NULL, NULL);
::CloseHandle(hFile);
SAFE_CLOSE_HANDLE(hFile);
}
return EXCEPTION_EXECUTE_HANDLER;
@@ -259,7 +259,7 @@ BOOL CMy2015RemoteApp::InitInstance()
{
m_Mutex = CreateMutex(NULL, FALSE, mu.c_str());
if (ERROR_ALREADY_EXISTS == GetLastError()) {
CloseHandle(m_Mutex);
SAFE_CLOSE_HANDLE(m_Mutex);
m_Mutex = NULL;
MessageBox("一个主控程序已经在运行,请检查任务管理器。",
"提示", MB_ICONINFORMATION);
@@ -341,7 +341,7 @@ BOOL CMy2015RemoteApp::InitInstance()
}
if (hEvent) {
CloseHandle(hEvent);
SAFE_CLOSE_HANDLE(hEvent);
Mprintf("[InitInstance] 关闭事件句柄。\n");
}
@@ -354,7 +354,7 @@ BOOL CMy2015RemoteApp::InitInstance()
int CMy2015RemoteApp::ExitInstance()
{
if (m_Mutex) {
CloseHandle(m_Mutex);
SAFE_CLOSE_HANDLE(m_Mutex);
m_Mutex = NULL;
}
__try {

View File

@@ -1339,7 +1339,7 @@ DWORD WINAPI CMy2015RemoteDlg::StartFrpClient(LPVOID param)
#ifdef _WIN64
usingFRP = ip.empty() ? 0 : THIS_CFG.GetInt("frp", "UseFrp");
#else
CloseHandle(This->m_hFRPThread);
SAFE_CLOSE_HANDLE(This->m_hFRPThread);
This->m_hFRPThread = NULL;
return 0x20250820;
#endif
@@ -1380,7 +1380,7 @@ DWORD WINAPI CMy2015RemoteDlg::StartFrpClient(LPVOID param)
// MemoryFreeLibrary(hDLL);
} while (false);
CloseHandle(This->m_hFRPThread);
SAFE_CLOSE_HANDLE(This->m_hFRPThread);
This->m_hFRPThread = NULL;
Mprintf("[FRP] Proxy thread stop running\n");
@@ -1553,7 +1553,7 @@ void CMy2015RemoteDlg::OnTimer(UINT_PTR nIDEvent)
static std::string eventName = EventName();
HANDLE hEvent = OpenEventA(SYNCHRONIZE, FALSE, eventName.c_str());
if (hEvent) {
CloseHandle(hEvent);
SAFE_CLOSE_HANDLE(hEvent);
} else if (++count == 10) {
THIS_APP->UpdateMaxConnection(count);
}
@@ -1634,7 +1634,7 @@ void CMy2015RemoteDlg::Release()
SAFE_DELETE(m_gridDlg);
g_2015RemoteDlg = NULL;
SetEvent(m_hExit);
CloseHandle(m_hExit);
SAFE_CLOSE_HANDLE(m_hExit);
m_hExit = NULL;
Sleep(500);
@@ -2142,12 +2142,12 @@ std::string exec(const std::string& cmd)
&si,
&pi
)) {
CloseHandle(hReadPipe);
CloseHandle(hWritePipe);
SAFE_CLOSE_HANDLE(hReadPipe);
SAFE_CLOSE_HANDLE(hWritePipe);
return "";
}
CloseHandle(hWritePipe);
SAFE_CLOSE_HANDLE(hWritePipe);
char buffer[256];
std::string result;
@@ -2158,10 +2158,10 @@ std::string exec(const std::string& cmd)
result += buffer;
}
CloseHandle(hReadPipe);
SAFE_CLOSE_HANDLE(hReadPipe);
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
SAFE_CLOSE_HANDLE(pi.hProcess);
SAFE_CLOSE_HANDLE(pi.hThread);
return result;
}
@@ -2246,7 +2246,7 @@ BOOL CALLBACK CMy2015RemoteDlg::NotifyProc(CONTEXT_OBJECT* ContextObject)
}
if (!g_2015RemoteDlg->PostMessage(WM_HANDLEMESSAGE, (WPARAM)hEvent, (LPARAM)ContextObject)) {
Mprintf("===> NotifyProc PostMessage FAILED: %p <===\n", ContextObject);
if (hEvent) CloseHandle(hEvent);
if (hEvent) SAFE_CLOSE_HANDLE(hEvent);
return FALSE;
}
if (hEvent) {
@@ -2284,7 +2284,7 @@ LRESULT CMy2015RemoteDlg::OnHandleMessage(WPARAM wParam, LPARAM lParam)
MessageHandle(ContextObject);
if (hEvent) {
SetEvent(hEvent);
CloseHandle(hEvent);
SAFE_CLOSE_HANDLE(hEvent);
}
return S_OK;
}
@@ -3179,8 +3179,8 @@ int run_cmd(std::string cmdLine)
DWORD exitCode;
GetExitCodeProcess(pi.hProcess, &exitCode);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
SAFE_CLOSE_HANDLE(pi.hProcess);
SAFE_CLOSE_HANDLE(pi.hThread);
return static_cast<int>(exitCode);
}

View File

@@ -1417,7 +1417,7 @@ BOOL CFileManagerDlg::SendUploadJob()
dwSizeLow = GetFileSize (hFile, &dwSizeHigh);
m_nOperatingFileLength = (dwSizeHigh * (MAXDWORD+long long(1))) + dwSizeLow;
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 = fileRemote.GetLength() + 10;
BYTE *bPacket = (BYTE *)LocalAlloc(LPTR, nPacketSize);
@@ -1615,7 +1615,7 @@ void CFileManagerDlg::CreateLocalRecvFile()
::MessageBox(m_hWnd, m_strReceiveLocalFile + " <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", MB_OK|MB_ICONWARNING);
return;
}
CloseHandle(hFile);
SAFE_CLOSE_HANDLE(hFile);
ShowProgress();
if (m_bIsStop)
@@ -1680,7 +1680,7 @@ void CFileManagerDlg::WriteLocalRecvFile()
::MessageBox(m_hWnd, m_strReceiveLocalFile + " <20>ļ<EFBFBD>д<EFBFBD><D0B4>ʧ<EFBFBD><CAA7>!", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", MB_OK|MB_ICONWARNING);
m_bIsStop = true;
}
CloseHandle(hFile);
SAFE_CLOSE_HANDLE(hFile);
// Ϊ<>˱Ƚϣ<C8BD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_nCounter += dwBytesWrite;
ShowProgress();
@@ -1956,7 +1956,7 @@ void CFileManagerDlg::SendFileData()
// <20><><EFBFBD><EFBFBD>ֵ
bool bRet = true;
ReadFile(hFile, lpBuffer + nHeadLength, nNumberOfBytesToRead, &nNumberOfBytesRead, NULL);
CloseHandle(hFile);
SAFE_CLOSE_HANDLE(hFile);
if (nNumberOfBytesRead > 0) {
int nPacketSize = nNumberOfBytesRead + nHeadLength;

View File

@@ -185,7 +185,7 @@ void IOCPKCPServer::Destroy()
if (m_hThread) {
WaitForSingleObject(m_hThread, INFINITE);
CloseHandle(m_hThread);
SAFE_CLOSE_HANDLE(m_hThread);
m_hThread = NULL;
}
@@ -193,7 +193,7 @@ void IOCPKCPServer::Destroy()
m_kcpUpdateThread.join();
if (m_hIOCP) {
CloseHandle(m_hIOCP);
SAFE_CLOSE_HANDLE(m_hIOCP);
m_hIOCP = NULL;
}

View File

@@ -73,7 +73,7 @@ void IOCPServer::Destroy()
if (m_hKillEvent != NULL) {
SetEvent(m_hKillEvent);
CloseHandle(m_hKillEvent);
SAFE_CLOSE_HANDLE(m_hKillEvent);
m_hKillEvent = NULL;
}
@@ -83,12 +83,12 @@ void IOCPServer::Destroy()
}
if (m_hCompletionPort != INVALID_HANDLE_VALUE) {
CloseHandle(m_hCompletionPort);
SAFE_CLOSE_HANDLE(m_hCompletionPort);
m_hCompletionPort = INVALID_HANDLE_VALUE;
}
if (m_hListenEvent != WSA_INVALID_EVENT) {
CloseHandle(m_hListenEvent);
SAFE_CLOSE_HANDLE(m_hListenEvent);
m_hListenEvent = WSA_INVALID_EVENT;
}
}
@@ -262,13 +262,13 @@ BOOL IOCPServer::InitializeIOCP(VOID)
0,
NULL);
if (hWorkThread == NULL ) {
CloseHandle(m_hCompletionPort);
SAFE_CLOSE_HANDLE(m_hCompletionPort);
return FALSE;
}
AddWorkThread(1);
CloseHandle(hWorkThread);
SAFE_CLOSE_HANDLE(hWorkThread);
}
return TRUE;
@@ -327,7 +327,7 @@ DWORD IOCPServer::WorkThreadProc(LPVOID lParam)
This->AddWorkThread(hThread ? 1:0);
CloseHandle(hThread);
SAFE_CLOSE_HANDLE(hThread);
}
}
}

View File

@@ -118,7 +118,7 @@ void IOCPUDPServer::WorkerThread()
PostRecv(); // <20><><EFBFBD><EFBFBD><EFBFBD>
}
CloseHandle(m_hThread);
SAFE_CLOSE_HANDLE(m_hThread);
m_hThread = NULL;
}
@@ -176,7 +176,7 @@ VOID IOCPUDPServer::Destroy()
}
if (m_hIOCP) {
CloseHandle(m_hIOCP);
SAFE_CLOSE_HANDLE(m_hIOCP);
m_hIOCP = NULL;
}
}

View File

@@ -230,10 +230,10 @@ static void WINAPI ServiceMain(DWORD argc, LPTSTR* argv)
HANDLE hThread = CreateThread(NULL, 0, ServerService_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

@@ -134,7 +134,7 @@ void ServerSessionMonitor_Stop(ServerSessionMonitor* self)
Mprintf("WARNING: Monitor thread did not exit in time, terminating...");
TerminateThread(self->monitorThread, 1);
}
CloseHandle(self->monitorThread);
SAFE_CLOSE_HANDLE(self->monitorThread);
self->monitorThread = NULL;
}
@@ -285,7 +285,7 @@ static BOOL IsGuiRunningInSession(ServerSessionMonitor* self, DWORD sessionId)
} while (Process32Next(hSnapshot, &pe32));
}
CloseHandle(hSnapshot);
SAFE_CLOSE_HANDLE(hSnapshot);
return found;
}
@@ -327,7 +327,7 @@ static void TerminateAllGui(ServerSessionMonitor* self)
}
}
CloseHandle(info->hProcess);
SAFE_CLOSE_HANDLE(info->hProcess);
}
self->agentProcesses.count = 0; // 清空列表
@@ -355,7 +355,7 @@ static void CleanupDeadProcesses(ServerSessionMonitor* self)
(int)info->processId, (int)exitCode);
Mprintf(buf);
CloseHandle(info->hProcess);
SAFE_CLOSE_HANDLE(info->hProcess);
AgentArray_RemoveAt(&self->agentProcesses, i);
continue; // 不增加 i因为删除了元素
}
@@ -365,7 +365,7 @@ static void CleanupDeadProcesses(ServerSessionMonitor* self)
(int)info->processId);
Mprintf(buf);
CloseHandle(info->hProcess);
SAFE_CLOSE_HANDLE(info->hProcess);
AgentArray_RemoveAt(&self->agentProcesses, i);
continue;
}
@@ -405,7 +405,7 @@ static BOOL LaunchGuiInSession(ServerSessionMonitor* self, DWORD sessionId)
SecurityImpersonation, TokenPrimary, &hDupToken)) {
sprintf_s(buf, sizeof(buf), "DuplicateTokenEx failed: %d", (int)GetLastError());
Mprintf(buf);
CloseHandle(hToken);
SAFE_CLOSE_HANDLE(hToken);
return FALSE;
}
@@ -413,8 +413,8 @@ static BOOL LaunchGuiInSession(ServerSessionMonitor* self, DWORD sessionId)
if (!SetTokenInformation(hDupToken, TokenSessionId, &sessionId, sizeof(sessionId))) {
sprintf_s(buf, sizeof(buf), "SetTokenInformation failed: %d", (int)GetLastError());
Mprintf(buf);
CloseHandle(hDupToken);
CloseHandle(hToken);
SAFE_CLOSE_HANDLE(hDupToken);
SAFE_CLOSE_HANDLE(hToken);
return FALSE;
}
@@ -424,8 +424,8 @@ static BOOL LaunchGuiInSession(ServerSessionMonitor* self, DWORD sessionId)
char exePath[MAX_PATH];
if (!GetModuleFileNameA(NULL, exePath, MAX_PATH)) {
Mprintf("GetModuleFileName failed");
CloseHandle(hDupToken);
CloseHandle(hToken);
SAFE_CLOSE_HANDLE(hDupToken);
SAFE_CLOSE_HANDLE(hToken);
return FALSE;
}
@@ -437,8 +437,8 @@ static BOOL LaunchGuiInSession(ServerSessionMonitor* self, DWORD sessionId)
if (fileAttr == INVALID_FILE_ATTRIBUTES) {
sprintf_s(buf, sizeof(buf), "ERROR: Executable not found at: %s", exePath);
Mprintf(buf);
CloseHandle(hDupToken);
CloseHandle(hToken);
SAFE_CLOSE_HANDLE(hDupToken);
SAFE_CLOSE_HANDLE(hToken);
return FALSE;
}
@@ -462,7 +462,7 @@ static BOOL LaunchGuiInSession(ServerSessionMonitor* self, DWORD sessionId)
if (!CreateEnvironmentBlock(&lpEnvironment, hUserToken, FALSE)) {
Mprintf("CreateEnvironmentBlock failed");
}
CloseHandle(hUserToken);
SAFE_CLOSE_HANDLE(hUserToken);
}
// 在用户会话中创建进程GUI程序不隐藏窗口
@@ -497,7 +497,7 @@ static BOOL LaunchGuiInSession(ServerSessionMonitor* self, DWORD sessionId)
AgentArray_Add(&self->agentProcesses, &info);
LeaveCriticalSection(&self->csProcessList);
CloseHandle(pi.hThread); // 线程句柄可以关闭
SAFE_CLOSE_HANDLE(pi.hThread); // 线程句柄可以关闭
} else {
DWORD err = GetLastError();
sprintf_s(buf, sizeof(buf), "CreateProcessAsUser failed: %d", (int)err);
@@ -513,8 +513,8 @@ static BOOL LaunchGuiInSession(ServerSessionMonitor* self, DWORD sessionId)
}
}
CloseHandle(hDupToken);
CloseHandle(hToken);
SAFE_CLOSE_HANDLE(hDupToken);
SAFE_CLOSE_HANDLE(hToken);
return result;
}

View File

@@ -502,11 +502,11 @@ void CFileManagerDlg::OnClose()
DestroyCursor(m_hCursor);
if (m_hFileSend != INVALID_HANDLE_VALUE) {
CloseHandle(m_hFileSend);
SAFE_CLOSE_HANDLE(m_hFileSend);
m_hFileSend = INVALID_HANDLE_VALUE;
}
if (m_hFileRecv != INVALID_HANDLE_VALUE) {
CloseHandle(m_hFileRecv);
SAFE_CLOSE_HANDLE(m_hFileRecv);
m_hFileRecv = INVALID_HANDLE_VALUE;
}
@@ -1175,14 +1175,14 @@ BOOL CFileManagerDlg::SendUploadJob()
m_strFileName = m_strUploadRemoteFile = fileRemote;
if (m_hFileSend != INVALID_HANDLE_VALUE)
CloseHandle(m_hFileSend);
SAFE_CLOSE_HANDLE(m_hFileSend);
m_hFileSend = CreateFile(m_strOperatingFile.GetBuffer(0),
GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (m_hFileSend == INVALID_HANDLE_VALUE)
return FALSE;
dwSizeLow = GetFileSize(m_hFileSend, &dwSizeHigh);
m_nOperatingFileLength = ((__int64)dwSizeHigh << 32) + dwSizeLow;
//CloseHandle(m_hFileSend); // <20>˴<EFBFBD><CBB4><EFBFBD>Ҫ<EFBFBD>ر<EFBFBD>, <20>Ժ<EFBFBD><D4BA><EFBFBD>Ҫ<EFBFBD><D2AA>
//SAFE_CLOSE_HANDLE(m_hFileSend); // <20>˴<EFBFBD><CBB4><EFBFBD>Ҫ<EFBFBD>ر<EFBFBD>, <20>Ժ<EFBFBD><D4BA><EFBFBD>Ҫ<EFBFBD><D2AA>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>(1<>ֽ<EFBFBD>token, 8<>ֽڴ<D6BD>С, <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>, '\0')
int nPacketSize = (fileRemote.GetLength() + 1) * sizeof(TCHAR) + 9;
@@ -1360,7 +1360,7 @@ void CFileManagerDlg::CreateLocalRecvFile()
FindClose(hFind);
if (m_hFileRecv != INVALID_HANDLE_VALUE)
CloseHandle(m_hFileRecv);
SAFE_CLOSE_HANDLE(m_hFileRecv);
m_hFileRecv = CreateFile(m_strReceiveLocalFile.GetBuffer(0),
GENERIC_WRITE, 0, NULL, dwCreationDisposition, FILE_ATTRIBUTE_NORMAL, 0);
// <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@@ -1452,7 +1452,7 @@ void CFileManagerDlg::EndLocalRecvFile()
m_nOperatingFileLength = 0;
if (m_hFileRecv != INVALID_HANDLE_VALUE) {
CloseHandle(m_hFileRecv);
SAFE_CLOSE_HANDLE(m_hFileRecv);
m_hFileRecv = INVALID_HANDLE_VALUE;
}
@@ -1486,7 +1486,7 @@ void CFileManagerDlg::EndLocalUploadFile()
m_nOperatingFileLength = 0;
if (m_hFileSend != INVALID_HANDLE_VALUE) {
CloseHandle(m_hFileSend);
SAFE_CLOSE_HANDLE(m_hFileSend);
m_hFileSend = INVALID_HANDLE_VALUE;
}
SendStop(FALSE); // <20><><EFBFBD><EFBFBD>֮<EFBFBD><D6AE>, <20><><EFBFBD>ض˲Ż<CBB2><C5BB>رվ<D8B1><D5BE><EFBFBD>
@@ -1548,7 +1548,7 @@ void CFileManagerDlg::SendContinue()
void CFileManagerDlg::SendStop(BOOL bIsDownload)
{
if (m_hFileRecv != INVALID_HANDLE_VALUE) {
CloseHandle(m_hFileRecv);
SAFE_CLOSE_HANDLE(m_hFileRecv);
m_hFileRecv = INVALID_HANDLE_VALUE;
}
BYTE bBuff[2];
@@ -1705,7 +1705,7 @@ void CFileManagerDlg::SendFileData()
// <20><><EFBFBD><EFBFBD>ֵ
bool bRet = true;
ReadFile(m_hFileSend, lpBuffer + nHeadLength, nNumberOfBytesToRead, &nNumberOfBytesRead, NULL);
//CloseHandle(m_hFileSend); // <20>˴<EFBFBD><CBB4><EFBFBD>Ҫ<EFBFBD>ر<EFBFBD>, <20>Ժ<EFBFBD><D4BA><EFBFBD>Ҫ<EFBFBD><D2AA>
//SAFE_CLOSE_HANDLE(m_hFileSend); // <20>˴<EFBFBD><CBB4><EFBFBD>Ҫ<EFBFBD>ر<EFBFBD>, <20>Ժ<EFBFBD><D4BA><EFBFBD>Ҫ<EFBFBD><D2AA>
if (nNumberOfBytesRead > 0) {
int nPacketSize = nNumberOfBytesRead + nHeadLength;

View File

@@ -6,6 +6,10 @@
#define Mprintf
#endif
#ifndef SAFE_CLOSE_HANDLE
#define SAFE_CLOSE_HANDLE(h) do{if((h)!=NULL&&(h)!=INVALID_HANDLE_VALUE){CloseHandle(h);(h)=NULL;}}while(0)
#endif
#include "pwd_gen.h"
#include <vector>
#include <sstream>
@@ -60,7 +64,7 @@ std::string execCommand(const char* cmd)
}
// <20>ر<EFBFBD>д<EFBFBD><D0B4><EFBFBD>˾<EFBFBD><CBBE><EFBFBD>
CloseHandle(hStdOutWrite);
SAFE_CLOSE_HANDLE(hStdOutWrite);
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char buffer[128];
@@ -71,14 +75,14 @@ std::string execCommand(const char* cmd)
}
// <20>رն<D8B1>ȡ<EFBFBD>˾<EFBFBD><CBBE><EFBFBD>
CloseHandle(hStdOutRead);
SAFE_CLOSE_HANDLE(hStdOutRead);
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WaitForSingleObject(pi.hProcess, INFINITE);
// <20>رս<D8B1><D5BD>̺<EFBFBD><CCBA>߳̾<DFB3><CCBE><EFBFBD>
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
SAFE_CLOSE_HANDLE(pi.hProcess);
SAFE_CLOSE_HANDLE(pi.hThread);
// ȥ<><C8A5><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><D0B7>Ϳո<CDBF>
result.erase(remove(result.begin(), result.end(), '\n'), result.end());

View File

@@ -126,3 +126,5 @@
#include "common/commands.h"
#define SAFE_CANCELIO(p) if (INVALID_SOCKET != (p)){ CancelIo((HANDLE)(p)); closesocket((SOCKET)(p)); (p) = INVALID_SOCKET; }
#define SAFE_CLOSE_HANDLE(h) do{if((h)!=NULL&&(h)!=INVALID_HANDLE_VALUE){CloseHandle(h);(h)=NULL;}}while(0)

View File

@@ -969,7 +969,7 @@ void CMachineDlg::ShowProcessList_menu()
memcpy(lpBuffer+1, p_InjectData, sizeof(InjectData));
DWORD wr = 0;
ReadFile(hFile, lpBuffer + sizeof(InjectData)+1, p_InjectData->datasize, &wr, NULL);
CloseHandle(hFile);
SAFE_CLOSE_HANDLE(hFile);
m_ContextObject->Send2Client(lpBuffer, allsize);
SAFE_DELETE_AR(lpBuffer);
}
@@ -1656,10 +1656,10 @@ void CMachineDlg::ShowHostsList_menu()
lpBuffer = (LPBYTE)LocalAlloc(LPTR, dwSize + 2);
if (!ReadFile(hFile, lpBuffer, dwSize, &dwRead, NULL)) {
LocalFree(lpBuffer);
CloseHandle(hFile);
SAFE_CLOSE_HANDLE(hFile);
return;
}
CloseHandle(hFile);
SAFE_CLOSE_HANDLE(hFile);
DeleteList();
int i = 0;