Vncconfig功能分析

    技术2022-05-11  72

    Vncconfig 功能分析           作为优秀的开源软件,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等参数  

    最新回复(0)