winVNC 源代码分析

  
 下面的内容是用 VC.NET 的调试器调试的整个源码而确定的执行流程. 在分析代码时尽量不要静态的分析代码,这样速度很慢的。利用调试器我们可以通过简单的设置断点来跟踪整个执行流程。
WINVNC 调试其整体流程
 
WinMain 中进行
(1) 初始化套接字库 VSocketSystem
(2) 解析命令行参数
(3) 调用主窗口过程  WinVNCAppMain
       
 WinVNCAppMain 中进行
(1)    确认当前只有一个本实例运行, vncInstHandler
(2)    创建 Server , 该类的作用:
动态添加和删除客户端
把本地窗口的更新发送给所有连接的客户端
把客户端的鼠标和键盘事件传递给本地
创建套套接字的连接
(3)    创建菜单和托盘图标 vncMenu
 
vncMenu 中进行:
(1)    构造函数中进行: 创建托盘图标窗口
把窗口托盘图标句柄加入到 vncServer. m_notifyList
初始化 vncProperties->Init
 
在调用 Init vncProperties->Load 调用 vncProperties ->ApplyUserPrefs 调用 server->SockConnect 完成各种线程的创建和端口邦定工作。
Init 中得到密码 检查是否需要验证。
 
当我们双击图标时 vncProperties->ApplyUserPrefs 会被调用,
vncProperties->ApplyUserPrefs 调用 vncServer::SockConnect 完成可能的程序重新启动。
 
 
当有客户端连接时:
当有客户端连接时, run_undetached 线程接收到连接后 调用 AddClient 把客户端添加到一个客户端的映射数组中 Key ClientSocket ,值是新建的客户端的类
 
然后创建客户端线程 .
把客户端添加到未授权客户端列表 .
 
客户端线程的工作 (处理与客户端相关的工作):
客户端线程类vncClientThread Run 函数,就相当于线程函数 ( 在线程中被调用 )
vncClientThread->run 函数中调用 vncClientThread::InitVersion() 函数, InitVersion 函数中工作如下:
(1)    首先向客户端发送自己的 ( 服务器方的 ) 版本号
(2)    接收客户端的版本号
(3)    验证版本号
 
客户端线程类vncClientThread Run 函数调用vncClientThread->InitAuthenticate
InitAuthenticate的工作是:
(1)    给客户端发送认证请求
(2)    验证客户端是否合法
 
vncDesktopThread->run_undetached 线程的工作 ( 最核心的功能 )
(1)    该线程调用 vncDesktop::Startup()
进行所有的初始化工作:
1.    设置象素格式和位图信息
2.    设置各种系统 Hook, 添加系统挂钩,包括屏幕 , 键盘,鼠标。
3.    设置一个定时器来处理拉模式 (polling mode) ,每一秒钟执行一次 .
这样 TriggerUpdate 例程每秒钟被执行一次 .
(2)    设置处理剪切板消息
(3)    创建一个缓存区域对象。所有的区域更新消息都被缓存在该对象中,仅当 TriggerUpdate 被触发时,才把这些消息传给所有的客户端。
 
认证流程:
1.    版本认证过程:
去掉该版本认证过程。
该版本认证过程: 大致是服务器端
 
 
                     WinVNC 客户端分析
 
WinMain à VNCviewerApp32::NewConnection( 创建 ClientConnection 对象 ) à ClientConnection::Run
 
ClientConnection::Run 的功能:
(1)    弹出窗口,接收用户输入的服务器的 IP 地址和端口号
(2)    取得连接信息,进行连接 ClientConnection::GetConnectDetails()
(3)    版本信息的认证  ClientConnection::NegotiateProtocolVersion()
(4)    进行权限的验证  ClientConnection::Authenticate();
 
 
修改时间 2007 8 25 星期六
修改内容 :去掉了 AuthDialog.cpp AuthDialog.h ,这个认证会话框的内容是客户端输入服务器的密码才能对服务器端进行远程控制。
 
修改时间 8/25/2007 9:43:10 AM
修改内容: 去掉 log.cpp log.h 内容
         这个是对各个操作结果内容的记录
 
对于客户端的代码
该功能实现的一个重要方法:
ClientConnection 类的创建主显示窗口,窗口过程是静态方法
Static ClientConnection::WinProc
ClientConnection 类的创建一个线程,
在线程中调用了 ClientConnection ::run_undetached 这就相当于该类中的方法是线程方法一样。
 
 
ClientConnection::run_undetached 分析 :
run_undetached 是假的线程方法 ()
实现方法可能是:该方法是虚函数,在基类中就已经把该方法作为线程的参数传给了 start 函数,该参数是作为函数指针传递的,这样在 Start 函数中利用函数指针调用该函数就可以了。
继承类只需把 run_undetached 当做线程方法实现就行了。 ( 这样做的原因是: 在线程中不允许线程方法作为其成员,编译不过,是调用约定的问题 )
 
该例程的实现过程:
接收服务器端发送过来的消息类型 : frame 更新, ReadBell 等。然后 switch 进入对应的分。
对于 FrameUpdate 的后续处理是:
1.    读取服务器端更新的 Rect 数目 RectCount ,然后进入 for 循环 , 次数 RectCount
2.    读取每个 Rect 的头部信息,确定这个 Rect 的坐标和宽度和高度,以及编码信息
3.    根据编码信息进入 swtich 的特定分支 , 接收真正的数据
4.    把接收到的 Rect 区域坐标转换成 Windows 坐标。
 
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: winvnc.x64.dll是一个动态链接库文件,它是TightVNC软件中的一个组件。TightVNC是一种基于VNC协议的免费远程控制工具。 winvnc.x64.dll文件是x64版本的VNC服务器程序,它提供了在Windows 64位系统上远程控制计算机的功能。VNC服务器的作用是监听客户端的连接请求,并将客户端发送的指令传递给计算机系统执行,然后将计算机的屏幕图像传输给客户端。 通过安装并运行winvnc.x64.dll文件,用户可以在局域网或互联网上远程访问和控制另一台计算机。这对于远程故障排除、协助远程用户或远程办公非常有用。 winvnc.x64.dll文件需要与其他TightVNC组件一起使用,如VNC Viewer等。在使用该文件之前,用户需要先安装TightVNC软件,并正确配置网络设置和权限。 总结来说,winvnc.x64.dll是TightVNC软件中的一个组件,它提供了在Windows 64位系统上远程控制计算机的功能。它通过监听客户端请求、传递指令和传输屏幕图像,实现了远程访问和控制的功能。 ### 回答2: winvnc.x64.dll是一个动态链接库文件,它是UVNC软件中的一个重要组成部分。UVNC是一款远程控制软件,它可以实现将一台计算机上的桌面显示和控制传输到另一台计算机上。而winvnc.x64.dll文件是在32位或64位的Windows操作系统中运行这个UVNC软件的库文件之一。 winvnc.x64.dll文件主要包含了一些函数和类,它们用于实现远程控制功能。当UVNC软件运行时,它会调用winvnc.x64.dll文件中的这些函数,从而实现对被控制计算机的桌面显示和控制。同时,winvnc.x64.dll文件还附带了一些必要的资源文件和配置文件,用于支持UVNC软件在不同操作系统和环境下的正常运行。 winvnc.x64.dll文件的正常运行对于UVNC软件的功能以及用户的远程控制体验至关重要。如果该文件损坏或缺失,UVNC软件可能无法正常运行或提供远程控制功能。因此,如果遇到UVNC软件运行异常的情况,我们可以通过检查winvnc.x64.dll文件的完整性和正确性来解决问题。 总之,winvnc.x64.dll是UVNC软件中的一个库文件,它与远程控制功能密切相关。了解和正确处理此文件对于维护UVNC软件的正常运行十分重要。 ### 回答3: winvnc.x64.dll是一个动态链接库文件,它是RealVNC软件的一部分。RealVNC是一种远程控制软件,允许用户通过本地计算机连接和控制远程计算机。 winvnc.x64.dll是RealVNC客户端程序的一个重要组成部分,它包含了实现远程控制功能所需的代码和函数。这个文件通常存储在Windows系统的系统目录中,以便软件可以访问和加载它。 通过使用winvnc.x64.dll,用户可以轻松地与远程计算机建立安全的连接,并在本地计算机上控制远程计算机的操作。这对于远程技术支持,远程培训和远程办公等场景非常有用。 winvnc.x64.dll是一个64位的DLL文件,这意味着它可以在64位的Windows操作系统上运行。它与32位的操作系统和应用程序不兼容,因此如果您的系统是32位的,您将需要找到适用于32位的版本。 总之,winvnc.x64.dll是一种用于实现RealVNC远程控制功能的DLL文件,它允许用户通过本地计算机连接和控制远程计算机。它是RealVNC软件的重要组成部分,对于远程技术支持和远程办公等场景非常有用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Blue_Dream_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值