Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1146743
  • 博文数量: 222
  • 博客积分: 5262
  • 博客等级: 大校
  • 技术积分: 3028
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-22 19:10
文章分类

全部博文(222)

文章存档

2012年(2)

2011年(192)

2010年(28)

分类: C/C++

2011-02-15 13:30:41

作为优秀的开源软件,VNC中的类库定义得很规范,逻辑结构也很完整。由于对静态库还不是很熟悉,并且我的任务只是看看VNC配置功能的是如何实现的,因此这里把我对这些功能的代码分析贴出来,希望能给想对VNC的程序结构进行探索的人提供一点思路,也希望有开发过VNC经验的人指证和指导。
 
Vncconfig这个工程里面主要实现的是服务器端的系统配置,具体过程如下:
建立控制台——》初始化系统日志表——》创建编辑注册表的对象——》异常处理程序访问注册表权限——》创建读取注册表的键类——》建立登陆对话框,初始化方法写入注册表……——》属性页设制——》生成调试日志——》显示属性页
 
功能图:
vncconfig

Authentication

Connections

Desktop

Legacy

Sharing

Inputs
 

Hooking
 

 
具体功能如下:
一.登陆验证设定
关联文件:Authentication.h
关联类或函数:AuthenticationPage类,初始化带一个注册键值的参数
关联类:
VncPasswdDialog操作登陆对话框
AuthenticationPage操作登陆属性页
功能:登陆密码设定,可选项为
无需验证setItemChecked(IDC_AUTH_NONE, useNone);
设置密码setItemChecked(IDC_AUTH_VNC, useVNC);
即时连接rfb::Server::queryConnect
 
二.连接设置
关联文件:Connections.h, network/TcpSocket.h
关联类或函数:
静态:
ConnectionsPage类,初始化带一个注册键值的参数
IntParameter类,初始化连接参数
StringParameter类,筛选服务器认证的客户IP
BoolParameter类,筛选带低延迟,高带宽的客户
内部:
ConnHostDialog类,连接主机对话框
ConnectionsPage类,连接设置属性页
功能:
1.设定端口号setItemInt
2.设定多长时间后禁用不活动的客户rfb::Server::idleTimeout
3.设定网络服务端口setItemInt
联入限制:
1.只限本地用户连接setItemChecked
2.添加删除修改授权用户setItemChecked
关联关键技术函数实现:
 
三.桌面设置
关联文件:Desktop.h
关联类或函数:DesktopPage类,初始化带一个注册键值的参数
功能:1.连接时可选:
移除壁纸rfb::win32::SDisplay::removeWallpaper
移除背景模型rfb::win32::SDisplay::removePattern
禁用用用户对桌面的操作rfb::win32::SDisplay::disableEffects
        2.断线时可选:
无操作!disconnectLock && !disconnectLogoff
锁定工作区disconnectLock
强制用户下线disconnectLogoff
 
四.钩子设置
关联文件:Hooking.h
关联类或函数:HookingPage类,初始化带一个注册键值的参数
功能:可选
1.跟踪图像变化rfb::win32::SDisplay::use_hooks
2.控制台窗口变化rfb::win32::WMPoller::poll_console_windows
3.过滤变化效果rfb::Server::compareFB
 
五.输入设置
关联文件:Inputs.h
关联类或函数:InputsPage类,初始化带一个注册键值的参数
功能:可选
1.接受客户鼠标操作rfb::Server::acceptPointerEvents
2.接受客户键盘操作rfb::Server::acceptKeyEvents
3.接受客户剪切板操作rfb::Server::acceptCutText
4.发送剪切板变化给客户rfb::Server::sendCutText
5.允许客户对屏幕操作
6.当本地需要操作时禁用客户操作SDisplay::disableLocalInputs
 
六.版本兼容
关联文件:Legacy.h/Legacy.cxx
关联类或函数:
legacy类,初始化带一个注册键值及键值设置的参数
LoadPrefs(),加载3.3版本参数
LoadUserPrefs(), 加载客户设置
功能:兼容3.3版
 
七.共享设置
关联文件:Sharing.h
关联类或函数:SharingPage类,初始化带一个注册键值的参数
功能:可选
关联关键技术函数实现:
1.从不连接客户rfb::Server::disconnectClients
2.从不默认连接共享rfb::Server::neverShared
3. 总是默认连接共rfb::Server::alwaysShared
4. 使用客户设定的共享设置rfb::Server::neverShared || rfb::Server::alwaysShared
 
 
RFB_WIN32静态库里定义了:
1.       对话框类:Dialog,VncPasswdDialog等类都是从它继承的
功能函数:
bool showDialog(const TCHAR* resource, HWND owner=0);
      virtual void initDialog() {}
      virtual bool onCommand(int item, int cmd) { return false; }
     virtual bool onHelp(int item) { return false; }
      virtual bool onOk() { return true; }
     bool isItemChecked(int id);
      int getItemInt(int id);
      TCHAR* getItemString(int id);
      void setItemChecked(int id, bool state);
      void setItemInt(int id, int value);
      void setItemString(int id, const TCHAR* s);
      void enableItem(int id, bool state);
2.       属性页类:PropSheetPage, AuthenticationPage等类都是从它继承的,其中主要函数:
initDialog()用于初始化子对话框
OnCommand()用于响应功能消息
OnOK()用于确认执行将属性写入注册表的操作
3.       编辑注册表键类:RegKey
功能函数:
    bool createKey(const RegKey& root, const TCHAR* name);
     void openKey(const RegKey& root, const TCHAR* name, bool readOnly=false);
      void setDACL(const PACL acl, bool inheritFromParent=true);设置任意访问控制列表
      void close();
      void deleteKey(const TCHAR* name) const;
      void deleteValue(const TCHAR* name) const;
      void awaitChange(bool watchSubTree, DWORD filter) const;
      void setExpandString(const TCHAR* valname, const TCHAR* s) const;
      void setString(const TCHAR* valname, const TCHAR* s) const;
      void setBinary(const TCHAR* valname, const void* data, int length) const;
      void setInt(const TCHAR* valname, int i) const;
      void setBool(const TCHAR* valname, bool b) const;
      TCHAR* getString(const TCHAR* valname) const;
      TCHAR* getString(const TCHAR* valname, const TCHAR* def) const;
      void getBinary(const TCHAR* valname, void** data, int* length) const;
      void getBinary(const TCHAR* valname, void** data, int* length, void* def, int deflength) const;
      int getInt(const TCHAR* valname) const;
      int getInt(const TCHAR* valname, int def) const;
      bool getBool(const TCHAR* valname) const;
      bool getBool(const TCHAR* valname, bool def) const;
      TCHAR* getRepresentation(const TCHAR* valname) const;
      bool isValue(const TCHAR* valname) const;
      const TCHAR* getValueName(int i);
4.       读取注册表键类:RegistryReader
功能函数:
bool setKey(const HKEY rootkey, const TCHAR* keyname);
      bool setNotifyThread(Thread* thread, UINT winMsg, WPARAM wParam=0, LPARAM lParam=0);
      bool setNotifyWindow(HWND window, UINT winMsg, WPARAM wParam=0, LPARAM lParam=0);
      static void loadRegistryConfig(RegKey& key);
5.       写入注册表限定类(结构体):包含在Security.h里,估计是保证安全的代码
AccessEntries建立控制入口列表
Sid  设置安全ID
AccessControlList控制入口列表
 
RFB静态库里定义了:
1.       操作日志类:
LogWriter(写日志)
Logger(生成日志实例)
LogParameter(设置日志记录参数)
2.       服务器设置参数定义类Server:封装定义了idleTimeout等参数

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wuyutiancai/archive/2007/01/30/1497775.aspx
阅读(2343) | 评论(0) | 转发(0) |
0

上一篇:winVNC 源代码分析

下一篇:高效屏幕录制

给主人留下些什么吧!~~