|
@@ -1,6 +1,7 @@
|
|
|
#include "StdAfx.h"
|
|
|
#include "PipeClient.h"
|
|
|
#include "Utility.h"
|
|
|
+#include "OGCAssist.h"
|
|
|
|
|
|
std::string CPipeClient::m_LastData;
|
|
|
PER_IO_CONTEXT CPipeClient::m_IoRead;
|
|
@@ -96,18 +97,37 @@ DWORD CPipeClient::ConnectThread(LPVOID lpParam)
|
|
|
}
|
|
|
|
|
|
#pragma region 向服务端发送消息:劫持状态+按钮状态;
|
|
|
- MSG_INFO msg_info;
|
|
|
- msg_info.dwClientId = GetCurrentProcessId();
|
|
|
- _stprintf(msg_info.szClientName, _T("%s"), _T("OGCAssist"));
|
|
|
- msg_info.byResult = TRUE;
|
|
|
- _stprintf((TCHAR*)msg_info.byData, _T("%s"), _T("OGCAssist dfdfdfdfdfdfdfdfdf"));
|
|
|
-
|
|
|
- PACKAGE pak;
|
|
|
- pak.header.byMsgType = C2S_CONNECT;
|
|
|
- pak.header.dwPackageLen = sizeof(DATAHEADER) + sizeof(MSG_INFO);
|
|
|
- pak.buf = &msg_info;
|
|
|
+ {
|
|
|
+ MSG_INFO msg;
|
|
|
+ msg.dwClientId = GetCurrentProcessId();
|
|
|
+ _stprintf(msg.szClientName, _T("%s"), _T("OGCAssist"));
|
|
|
+ // 连接状态;
|
|
|
+ msg.byResult = Assist::bConnectStatus;
|
|
|
+ _stprintf((TCHAR*)msg.byData, _T("%s"), _T("OGCAssist Connect"));
|
|
|
+
|
|
|
+ DATAHEADER head;
|
|
|
+ head.byMsgType = C2S_CONNECT;
|
|
|
+ head.dwPackageLen = sizeof(DATAHEADER) + sizeof(MSG_INFO);
|
|
|
+
|
|
|
+ pInstance->SendPackage(head, msg);
|
|
|
+ }
|
|
|
+#pragma endregion
|
|
|
|
|
|
- pInstance->SendPackage(pak);
|
|
|
+#pragma region 通知服务端劫持状态;
|
|
|
+ {
|
|
|
+ MSG_INFO msg;
|
|
|
+ msg.dwClientId = GetCurrentProcessId();
|
|
|
+ _stprintf(msg.szClientName, _T("%s"), _T("OGCAssist"));
|
|
|
+ // 劫持状态;
|
|
|
+ msg.byResult = Assist::bHijacked;
|
|
|
+ _stprintf((TCHAR*)msg.byData, _T("%s"), _T("OGCAssist Hijact"));
|
|
|
+
|
|
|
+ DATAHEADER head;
|
|
|
+ head.byMsgType = C2S_INJECT;
|
|
|
+ head.dwPackageLen = sizeof(DATAHEADER) + sizeof(MSG_INFO);
|
|
|
+
|
|
|
+ Utility::g_pPipeClient->SendPackage(head, msg);
|
|
|
+ }
|
|
|
#pragma endregion
|
|
|
}
|
|
|
else
|
|
@@ -146,7 +166,7 @@ DWORD CPipeClient::ReadMsgThread(LPVOID lpParam)
|
|
|
if ( bSuccess )
|
|
|
{
|
|
|
// 打印结果;
|
|
|
- Utility::dprintf(_T("读取数据:Error=%ld, Len=%ld, Data=%s\n"), dwError, m_IoRead.m_Overlapped.InternalHigh, m_IoRead.szBuffer);
|
|
|
+ //Utility::dprintf(_T("读取数据:Error=%ld, Len=%ld, Data=%s\n"), dwError, m_IoRead.m_Overlapped.InternalHigh, m_IoRead.szBuffer);
|
|
|
// 处理结果;
|
|
|
}
|
|
|
else
|
|
@@ -162,16 +182,21 @@ DWORD CPipeClient::ReadMsgThread(LPVOID lpParam)
|
|
|
else
|
|
|
{
|
|
|
// 打印结果;
|
|
|
- Utility::dprintf(_T("读取数据:Error=%ld, Len=%ld, Data=%s\n"), dwError, m_IoRead.m_Overlapped.InternalHigh, m_IoRead.szBuffer);
|
|
|
+ bSuccess = TRUE;
|
|
|
+ //Utility::dprintf(_T("读取数据:Error=%ld, Len=%ld, Data=%s\n"), dwError, m_IoRead.m_Overlapped.InternalHigh, m_IoRead.szBuffer);
|
|
|
// 处理结果;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- DATAHEADER header;
|
|
|
- MSG_INFO msg_info;
|
|
|
- memcpy(&header, m_IoRead.szBuffer, sizeof(DATAHEADER));
|
|
|
- memcpy(&msg_info, m_IoRead.szBuffer+sizeof(DATAHEADER), sizeof(MSG_INFO));
|
|
|
-
|
|
|
+ if ( bSuccess )
|
|
|
+ {
|
|
|
+ DATAHEADER header;
|
|
|
+ MSG_INFO msg_info;
|
|
|
+ memcpy(&header, m_IoRead.szBuffer, sizeof(DATAHEADER));
|
|
|
+ memcpy(&msg_info, m_IoRead.szBuffer+sizeof(DATAHEADER), sizeof(MSG_INFO));
|
|
|
+ HandleMsg(header, msg_info);
|
|
|
+ }
|
|
|
+
|
|
|
// 重置Buffer;
|
|
|
memset(m_IoRead.szBuffer, 0, BUFSIZE);
|
|
|
#else // 分配的缓冲区,不足以一次性存储C/S两端的通信内容时;
|
|
@@ -296,12 +321,83 @@ BOOL CPipeClient::WaitFinish(HANDLE hPipe, PER_IO_CONTEXT *pIoContext)
|
|
|
return TRUE;
|
|
|
}
|
|
|
|
|
|
+void CPipeClient::HandleMsg(DATAHEADER &head, MSG_INFO &msg)
|
|
|
+{
|
|
|
+ if ( head.byProtocol != 0xAC )
|
|
|
+ {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( head.dwPackageLen != (sizeof(DATAHEADER)+sizeof(MSG_INFO)) )
|
|
|
+ {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( msg.dwClientId != GetCurrentProcessId() )
|
|
|
+ {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( _tcscmp(msg.szClientName, _T("OGCAssist")) != 0 )
|
|
|
+ {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ Utility::dprintf(_T("接收到服务端消息:Result=%d, Tpye=%d, Proctocl=%d, Len=%ld, Name=%s, Id=%ld, Data=%s"),
|
|
|
+ msg.byResult,
|
|
|
+ head.byMsgType,
|
|
|
+ head.byProtocol,
|
|
|
+ head.dwPackageLen,
|
|
|
+ msg.szClientName,
|
|
|
+ msg.dwClientId,
|
|
|
+ msg.byData
|
|
|
+ );
|
|
|
+
|
|
|
+ // 正常处理流程;
|
|
|
+ switch(head.byMsgType)
|
|
|
+ {
|
|
|
+ case S2C_INJECT: // 劫持dll;
|
|
|
+ break;
|
|
|
+ case S2C_EJECT: // 恢复dll;
|
|
|
+ break;
|
|
|
+ case S2C_CONNECT: // 触发connect按钮;
|
|
|
+ break;
|
|
|
+ case S2C_DISCONNECT: // 触发disconnect按钮;
|
|
|
+ break;
|
|
|
+ case S2C_CHECKFW: // 触发checkfw按钮;
|
|
|
+ break;
|
|
|
+ case S2C_GO: // 触发go按钮;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
BOOL CPipeClient::SendPackage(PACKAGE &pak)
|
|
|
{
|
|
|
std::string data;
|
|
|
data.append((char*)&pak.header, sizeof(DATAHEADER));
|
|
|
//data.append((char*)(MSG_INFO*)pak.buf, sizeof(MSG_INFO));
|
|
|
data.append((char*)pak.buf, sizeof(MSG_INFO));
|
|
|
+
|
|
|
+ return SendData((LPBYTE)data.data(), data.size());
|
|
|
+}
|
|
|
+
|
|
|
+BOOL CPipeClient::SendPackage(DATAHEADER &head, MSG_INFO &msg)
|
|
|
+{
|
|
|
+ std::string data;
|
|
|
+ data.append((char*)&head, sizeof(DATAHEADER));
|
|
|
+ //data.append((char*)(MSG_INFO*)pak.buf, sizeof(MSG_INFO));
|
|
|
+ data.append((char*)&msg, sizeof(MSG_INFO));
|
|
|
+ Utility::dprintf(_T("发送消息:Result=%d, Tpye=%d, Proctocl=%d, Len=%ld, Name=%s, Id=%ld, Data=%s"),
|
|
|
+ msg.byResult,
|
|
|
+ head.byMsgType,
|
|
|
+ head.byProtocol,
|
|
|
+ head.dwPackageLen,
|
|
|
+ msg.szClientName,
|
|
|
+ msg.dwClientId,
|
|
|
+ msg.byData
|
|
|
+ );
|
|
|
return SendData((LPBYTE)data.data(), data.size());
|
|
|
}
|
|
|
|
|
@@ -316,7 +412,7 @@ BOOL CPipeClient::SendData(LPBYTE lpData, DWORD dwDataLen)
|
|
|
// 发送数据使用同步模式;
|
|
|
DWORD dwNumberOfBytesWritten = 0;
|
|
|
BOOL fWrite = WriteFile(m_hPipeInst, lpData, dwDataLen, &dwNumberOfBytesWritten, NULL);
|
|
|
- Utility::dprintf(_T("SendData:Error=%ld, %s\n"), GetLastError(), lpData);
|
|
|
+ Utility::dprintf(_T("SendData:Error=%ld, %d\n"), GetLastError(), fWrite);
|
|
|
|
|
|
return fWrite;
|
|
|
}
|