开源3389RDP协议远程桌面
功能说明:本程序是一个基于易语言开发的 Windows 终端服务(Terminal Services)会话监控与信息查询工具。程序的核心目标是实时监控操作系统中的远程桌面(RDP)会话状态变化,并在检测到会话变更时,自动枚举并获取当前所有活跃会话的详细用户连接信息,最终将这些日志信息显示在界面的编辑框中。
程序的功能逻辑主要可以分为以下几个部分:
1. **初始化与环境配置**
在程序启动窗口创建完毕后(`__启动窗口_创建完毕` 子程序),程序首先尝试获取当前控制台的会话 ID。随后,通过调用 `WTSOpenServerA` 函数打开本地终端服务服务器的句柄,这是后续查询会话信息的基础。接着,利用 `WTSRegisterSessionNotification` 函数向系统注册通知,确保当有远程会话连接、断开或切换时,当前窗口能收到系统消息。最关键的一步是使用 `SetWindowLong` 函数将窗口的默认消息处理过程替换为自定义的“子程序 1",这允许程序拦截并处理标准的 Windows 消息。
2. **消息拦截机制**
自定义的“子程序 1"充当了窗口过程回调函数。它接收窗口收到的所有消息参数(句柄、消息类型、wParam、lParam)。程序专门判断消息类型是否为 `689`,这正是 Windows API 中 `WM_WTSSESSION_CHANGE` 消息的值。这表明程序的触发条件完全依赖于系统层面的会话状态变更事件。
3. **会话信息枚举与采集**
一旦捕获到 `WM_WTSSESSION_CHANGE` 消息,程序立即执行信息采集流程:
- 调用 `WTSEnumerateSessionsA` 获取服务器上所有活动的会话列表及其计数。
- 使用循环遍历每一个会话 ID。
- 对于每个会话,依次调用 `WTSQuerySessionInformationA` 接口查询具体的会话属性。查询的项目包括:
- 登录用户名(WTSUserName)
- 工作站名称或协议类型(WTSWinStationName,例如显示为 RDP-Tcp)
- 域名或本机名称(WTSDomainName)
- 客户端计算机名称(WTSClientName,即发起远程连接的对方电脑名)
- 客户端目录(WTSClientDirectory)
4. **数据处理与界面展示**
为了减少冗余输出,程序内部维护了临时缓冲区(如 UserNameTmp、WinStationNameTmp 等)。在写入界面之前,会将新获取的信息与之前的记录进行比对。如果信息未发生变化,则不会重复追加;如果有新用户登录或信息更新,则将整理好的字符串(包含账号、客户 ID、协议、本机名、目录等信息)追加到主界面的“编辑框 1"控件中,形成一条新的日志记录。
5. **资源管理**
由于 `WTSQuerySessionInformationA` 返回的指针指向动态分配的内存,程序在处理完每条会话信息后,都会调用 `WTSFreeMemory` 释放对应的内存资源(如 UserNameBuf、WinStationNameBuf 等),以防止内存泄漏问题。
总结而言,该程序是一个典型的后台监控工具,它不依赖第三方库,直接使用 Windows 原生 WTS API,适合用于审计远程连接、监控多用户登录情况或开发自动化运维脚本中,帮助管理员掌握实时的远程访问状态。
======窗口程序集1
| |
| |------ __启动窗口_创建完毕
| |
| |------ 子程序1
| |
| |------ __启动窗口_将被销毁
| |
| |------ 取计算机名
| |
| |
======调用的Dll
| |
| |---[dll]------ CallWindowProc
| |
| |---[dll]------ SetWindowLong
| |
| |---[dll]------ _取当前进程ID
| |
| |---[dll]------ ProcessIdToSessionId
| |
| |---[dll]------ WTSGetActiveConsoleSessionId
| |
| |---[dll]------ WTSOpenServerA
| |
| |---[dll]------ WTSCloseServer
| |
| |---[dll]------ WTSFreeMemory
| |
| |---[dll]------ WTSEnumerateSessionsA
| |
| |---[dll]------ WTSQuerySessionInformationA
| |
| |---[dll]------ WTSRegisterSessionNotification
| |
| |---[dll]------ HandlerEx
| |
| |---[dll]------ SetConsoleCtrlHandler
| |
| |---[dll]------ GetComputerNameA
注:本站源码主要来源于网络收集。如有侵犯您的利益,请联系我们,我们将及时删除!
部分源码可能含有危险代码,(如关机、格式化磁盘等),请看清代码在运行。
由此产生的一切后果本站均不负责。源码仅用于学习使用,如需运用到商业场景请咨询原作者。
使用本站源码开发的产品均与本站无任何关系,请大家遵守国家相关法律。