著录项信息
专利名称 | 用于在可信和不可信虚拟机之间通信的方法和系统 |
申请号 | CN201080063762.6 | 申请日期 | 2010-12-14 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2012-10-31 | 公开/公告号 | CN102763098A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F15/16 | IPC分类号 | G;0;6;F;1;5;/;1;6;;;G;0;6;F;1;3;/;1;4查看分类表>
|
申请人 | 思杰系统有限公司 | 申请人地址 | 美国佛罗里达州
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 思杰系统有限公司 | 当前权利人 | 思杰系统有限公司 |
发明人 | I·普拉特;J·古雅德尔;V·汉奎兹;J·麦肯齐;R·菲利浦桑;S·史密斯;K·纳拉西姆汉;D·哈勒斯;R·范德林顿 |
代理机构 | 北京泛华伟业知识产权代理有限公司 | 代理人 | 王勇 |
摘要
本文描述的方法和系统用于在执行寄载了可信虚拟机、不可信虚拟机和第三虚拟机的管理程序的计算装置中,在不可信虚拟机和可信虚拟机之间建立安全通信通道。所述方法包括:通过不可信虚拟机,写第一数据字符串到计算装置的存储区域。所述方法还包括:通过可信虚拟机,检测被写到所述存储区域的所述第一数据字符串。所述方法进一步包括:通过可信虚拟机且响应于所述检测,经由在通信期间锁定所述存储区域以阻止第三虚拟机访问所述存储区域,从而建立在可信虚拟机和不可信虚拟机之间的通信通道。
用于在可信和不可信虚拟机之间通信的方法和系统\n[0001] 相关申请\n[0002] 本申请要求如下申请的权益和优先权:2009年12月14日提交的、标题为\n“Methods and Systems for Managing Injection of Input Data into a Virtualization Environment”、序列号为61/286263的美国临时专利申请(代理人案卷号:CTX-523USPR);\n2009年12月14日提交的、标题为“Metho ds and Systems for Providing,to Virtual Machines,via a Designated Wi reless Local Area Network Driver,Access to Data Associated With a C onnection to a Wireless Local Area Network”、序列号为\n61/286215的美国临时专利申请(代理人案卷号:CTX-524USPR);2009年12月14日提交的、标题为“Virtual Firmware Servicing Interrupts Generated Responsive t o Actuation of Hardware”序列号为61/286266的美国临时专利申请(代理人案卷号:CTX-532USPR);\n2009年12月14日提交的、标题为“Metho ds and Systems for Allocating a USB Device to a Secure Virtual Machi ne or an Unsecure Virtual Machine”序列号为61/286216的美国临时专利申请(代理人案卷号:CTX-537USPR);2009年12月14日提交的、标题为“Drive Manager Controlling Virtual Machine Access to an Optical Dis k Drive”序列号为61/286218的美国临时专利申请(代理人案卷号:CTX-538USPR);2009年12月\n15日提交的、标题为“Methods and Systems f or Communicating Between Secure and Unsecure Virtual Machines”序列号为61/286636的美国临时专利申请(代理人案卷号:\nCTX-535USPR);以及2009年12月15日提交的、标题为“Methods and Systems for Preve nting Access to Display Graphics Generated by a Secure Virtual Machin e”、序列号为61/286619的美国临时专利申请(代理人案卷号:CTX-536USPR);以上申请通过引用被整体包含于此。\n技术领域\n[0003] 本公开涉及虚拟化技术和由管理程序寄载(host)的虚拟机。本公开特别涉及用于在可信和不可信虚拟机之间通信的方法和系统。\n背景技术\n[0004] 随着移动雇员、远程雇员、客户雇员和基于任务的雇员的数量的增加,对于限制每种雇员可用的信息且将雇员个人数据与工作相关数据隔离的计算系统的需求随之增加。很多公司向他们自己的雇员提供便携电脑、对公司内网的远程访问、对雇员所使用应用的远程访问、对雇员文件的远程访问,以及对远程桌面、虚拟机或远程应用的访问。在很多情况下,雇员可以使用任何机器和/或网络从任何地理位置访问公司资源。\n[0005] 一些公司可向他们的雇员提供能够用于访问公司资源的机器。在一些情况下,这些机器可执行一个或多个管理程序,该管理程序可管理专用于执行公司应用以及访问公司资源的虚拟机。具有这种配置的计算机有时可能缺少宿主操作系统。此外,当登录到工作用虚拟机或虚拟桌面时,用户可能被限制访问个人资源。因而,用户可能需要额外的虚拟机,在其中用户可以访问个人资源和程序。在一些系统中,当访问个人资源和程序时,用户可能被阻止访问公司资源。同样地,当在公司专用虚拟机或虚拟桌面中操作时,用户可被阻止访问个人资源和程序。\n发明内容\n[0006] 在一个实施例中,本文描述的方法和系统提供用于管理和分配在虚拟机中交互的资源的各种功能。特别地,本文描述的方法和系统提供用于在可信虚拟机和不可信虚拟机之间通信的方法和系统。\n[0007] 在一个方面,本公开涉及在执行寄载了可信虚拟机、不可信虚拟机和第三虚拟机的管理程序的计算装置中,用于在不可信虚拟机和可信虚拟机之间建立安全通信通道的方法。所述方法包括:通过由计算装置的处理器执行的不可信虚拟机,写第一数据字符串到计算装置的存储区域。所述方法还包括:通过由计算装置的处理器执行的可信虚拟机,检测被写入存储区域的第一数据字符串。所述方法进一步包括:通过可信虚拟机且响应于所述检测,经由在通信期间锁定存储区域以阻止由计算装置的处理器执行的第三虚拟机访问所述存储区域,在可信虚拟机和不可信虚拟机之间建立通信通道。\n[0008] 在一个实施例中,所述方法包括通过可信虚拟机,在不可信虚拟机写第一数据字符串之前监控计算装置的存储区域。在另一实施例中,所述方法包括通过可信虚拟机,在不可信虚拟机写第一数据字符串之前选择存储区域。在另一实施例中,所述方法包括通过可信虚拟机,在不可信虚拟机写第一数据字符串之前,预留所述存储区域为用于与第二虚拟机通信所预留的区域。在一些实施例中,所述第一数据字符串包括不可信虚拟机的标识。\n[0009] 在一些实施例中,所述方法包括阻止第三虚拟机在通信期间访问所述存储区域。\n在进一步的实施例中,所述方法包括通过不可信虚拟机和可信虚拟机的其中一个,经由允许第三虚拟机访问所述存储区域来撤销所述通信通道。在其他实施例中,所述方法包括通过以下步骤在不可信虚拟机和虚拟机之间交换数据:通过不可信虚拟机写数据到所述存储区域;以及通过可信虚拟机从所述存储区域读数据。在进一步的实施例中,所述方法包括加密所述数据。在进一步的实施例中,所述方法包括通过不可信虚拟机,发出中断到可信虚拟机,所述中断响应于写数据的完成而产生;以及响应于接收所述中断,由可信虚拟机执行从所述存储区域读数据。\n[0010] 在另一个方面,本公开涉及在执行寄载了可信虚拟机、不可信虚拟机和第三虚拟机的管理程序的计算装置中,用于在不可信虚拟机和可信虚拟机之间建立安全通信通道的系统。所述系统包括计算装置,该计算装置包括存储单元和处理器,所述处理器执行寄载了可信虚拟机、不可信虚拟机和第三虚拟机的管理程序。所述不可信虚拟机被配置用于写第一数据字符串到计算装置的存储单元区域。所述可信虚拟机被配置用于检测写到所述存储单元区域的第一数据字符串,并且响应于所述检测,通过在通信期间锁定所述存储单元区域以阻止第三虚拟机访问所述存储单元区域,从而在可信虚拟机和不可信虚拟机之间建立通信通道。\n[0011] 在一个实施例中,所述可信虚拟机被进一步配置用于在不可信虚拟机写第一数据字符串之前监控所述存储单元区域。在另一个实施例中,所述可信虚拟机被进一步配置为在不可信虚拟机写第一数据字符串之前,选择所述存储单元区域。在另一个实施例中,所述可信虚拟机被进一步配置用于在不可信虚拟机写第一数据字符串之前,预留所述存储单元区域为用于与第二虚拟机通信所预留的区域。在多个实施例中,所述第一数据字符串包括不可信虚拟机的标识。\n[0012] 在一些实施例中,所述可信虚拟机被进一步配置为阻止第三虚拟机在通信期间访问所述存储单元区域。在进一步的实施例中,不可信虚拟机和可信虚拟机的其中一个被进一步配置为通过允许第三虚拟机访问所述存储单元区域来撤销所述通信通道。在其他实施例中,所述不可信虚拟机被进一步配置为写数据到所述存储单元区域;以及可信虚拟机被进一步配置为从所述存储单元区域读数据。在进一步的实施例中,写数据到所述存储区域还包括加密所述数据。在又一个实施例中,所述不可信虚拟机被进一步配置为发出中断到可信虚拟机,所述中断响应于写数据的完成而产生;且其中,通过可信虚拟机响应于接收该中断,执行从所述存储单元区域读数据。\n[0013] 在另一个方面,本公开涉及在执行寄载了可信虚拟机和不可信虚拟机的管理程序的计算装置中,用于管理向多个客户虚拟机中的一个虚拟机转发输入事件的方法。所述方法包括通过由计算装置的处理器执行的管理程序所执行的输入管理器,接收来自与计算装置通信的输入装置的输入数据的第一项。所述方法还包括通过输入管理器,识别输入数据的第一项是否包括预定字符串。所述方法还包括通过输入管理器且响应于所述识别,将所述输入数据的第一项转发到如下的其中之一:(i)由计算装置的处理器执行的多个客户虚拟机中的第一虚拟机和(ii)由控制虚拟机执行的应用,其中所述多个客户虚拟机中的至少一个虚拟机是可信虚拟机。\n[0014] 在一个实施例中,所述输入数据的第一项包括包含安全按键组合的预定字符串;\n且所述方法包括向由管理程序执行的应用转发所述输入数据的第一项。在另一实施例中,多个客户虚拟机中的第一虚拟机是可信虚拟机,且所述方法包括确定由第一虚拟机执行的应用所产生的窗口是否具有焦点;以及响应于所述确定转发输入数据的第一项。在又一个实施例中,所述应用产生的窗口具有焦点以及输入数据的第一项不包括预定字符串,且所述方法包括向可信虚拟机转发输入数据的第一项。在又一个实施例中,所述应用产生的窗口不具有焦点且输入数据的第一项包括预定字符串,并且所述方法包括向可信虚拟机转发输入数据的第一项。在又一个实施例中,所述方法包括产生视觉指示器用于指示输入数据被转发到了可信虚拟机。\n[0015] 在另一实施例中,多个客户虚拟机中的第一虚拟机是不可信虚拟机且多个客户虚拟机中的第二虚拟机是可信虚拟机,并且所述方法包括确定由可信虚拟机执行的应用所产生的窗口是否具有焦点;响应于所述确定,转发输入数据的第一项。在又一个实施例中,所述应用产生的窗口具有焦点且输入数据的第一项包括预定字符串,并且所述方法包括向不可信虚拟机转发输入数据的第一项。在又一个实施例中,所述应用产生的窗口不具有焦点且输入数据的第一项不包括预定字符串,并且所述方法包括向不可信虚拟机转发输入数据的第一项。\n[0016] 在另一个方面,本公开涉及在执行寄载了可信虚拟机和不可信虚拟机的管理程序的计算装置中,用于管理向多个客户虚拟机中的一个虚拟机转发输入事件的系统。所述系统包括包含了处理器的计算装置,所述处理器执行管理程序、控制虚拟机、多个客户虚拟机和输入管理器。所述系统还包括与计算装置通信的输入装置。输入管理器被配置用于从与计算装置通信的输入装置接收输入数据的第一项,识别输入数据的第一项是否包含预定字符串,以及响应于该识别,将所述输入数据的第一项转发到如下的其中之一:(i)多个客户虚拟机中的第一虚拟机和(ii)由控制虚拟机执行的应用,其中所述多个客户虚拟机中的至少一个虚拟机是可信虚拟机。\n[0017] 在系统的一个实施例中,所述输入数据的第一项包括包含安全按键组合的预定字符串;且输入管理器被配置用于向由管理程序执行的应用转发所述入数据的第一项。在系统的另一实施例中,多个客户虚拟机中的第一虚拟机是可信虚拟机,且输入管理器被进一步配置用于确定由第一虚拟机执行的应用所产生的窗口是否具有焦点;以及响应于所述确定转发输入数据的第一项。在系统的又一实施例中,由所述应用产生的窗口具有焦点且输入数据的第一项不包括预定字符串,并且输入管理器被进一步配置为向可信虚拟机转发输入数据的第一项。在系统的又一个实施例中,所述应用产生的窗口不具有焦点且输入数据的第一项包括预定字符串,并且输入管理器被进一步配置用于向可信虚拟机转发输入数据的第一项。在系统的一些实施例中,输入管理器被进一步配置用于产生视觉指示器来指示输入数据被转发到了可信虚拟机。\n[0018] 在系统的另一实施例中,多个客户虚拟机中的第一虚拟机是不可信虚拟机且多个客户虚拟机中的第二虚拟机是可信虚拟机,并且所述输入管理器被进一步配置用于确定由可信虚拟机执行的应用所产生的窗口是否具有焦点;且响应于所述确定,转发输入数据的第一项。在系统又一个实施例中,所述应用产生的窗口具有焦点且输入数据的第一项包括预定字符串,并且输入管理器被进一步配置用于向不可信虚拟机转发输入数据的第一项。\n在系统又一个实施例中,所述应用产生的窗口不具有焦点且输入数据的第一项不包括预定字符串,并且输入管理器被进一步配置用于向不可信虚拟机转发输入数据的第一项。\n[0019] 在另一个方面,本公开描述了在执行寄载了虚拟机的管理程序的计算装置中,用于向在虚拟机上执行的虚拟固件转发由硬件产生的中断的方法。所述方法包括通过由计算装置的处理器执行的控制程序,接收由连接到计算装置的硬件产生的中断。所述方法还包括通过所述控制程序,向由计算装置的处理器执行的虚拟机所执行的虚拟固件提供所述中断。所述方法还包括通过虚拟机,从所述虚拟固件接收所述中断。所述方法还包括通过虚拟机且响应于接收所述中断,虚拟固件请求与所述中断关联的对象和方法。所述方法还包括通过所述控制程序,从所述虚拟固件接收对与所述中断关联的对象和方法的请求。所述方法还包括通过所述控制程序,从计算装置的固件的高级配置和电源接口提取与所述中断关联的对象和方法。所述方法还包括通过所述控制程序,向虚拟机转发所提取的对象和方法。\n[0020] 在一个实施例中,所述硬件包括键盘,且所述中断响应于该键盘的按键的激励而产生。在一些实施例中,所述方法包括通过计算装置的固件,服务所产生的中断;以及通过所述控制程序,捕获由固件服务的中断。在其他实施例中,所述方法包括向由虚拟机执行的虚拟固件注入所述中断。在其他实施例中,所述方法包括通过虚拟机,从虚拟固件请求与中断关联的对象和方法;以及通过虚拟固件,向控制程序发出对与所述中断关联的对象和方法的请求。\n[0021] 在一个实施例中,所述方法包括通过所述控制程序,向虚拟固件的高级配置和电源接口转发所提取的对象和方法;且通过所述虚拟固件的高级配置和电源接口,向由虚拟机执行的操作系统的管理界面转发所提取的对象和方法。在另一个实施例中,所述控制程序由在计算装置的处理器上执行的管理程序执行。在另一个实施例中,所述控制程序由计算装置的处理器执行的控制虚拟机所执行,且其中所述虚拟机是客户虚拟机。\n[0022] 在另一个方面,本公开涉及在执行寄载了虚拟机的管理程序的计算装置中,用于向在虚拟机上执行的虚拟固件转发由硬件产生的中断的系统。所述系统包括被配置用于产生中断的硬件装置,和连接到硬件装置的计算装置,该计算装置包括配置用于执行控制程序和寄载了执行虚拟固件的虚拟机的管理程序的处理器。所述控制程序被配置用于接收由硬件装置产生的中断,向由虚拟机执行的虚拟固件提供所述中断,以及从所述虚拟固件接收对与所述中断关联的对象和方法的请求,其中,响应于接收来自虚拟固件的中断由虚拟机产生该请求。所述控制程序还被配置用于从计算装置的固件的高级配置和电源接口提取与所述中断关联的对象和方法,以及向虚拟机转发所提取的对象和方法。\n[0023] 在一个实施例中,所述硬件包括键盘,且所述中断响应于该键盘的按键的激励而产生。在另一个实施例中,所述控制程序被配置用于捕获所产生的中断,所述中断已由计算装置的固件服务。在另一实施例中,所述控制程序被配置用于向由虚拟机执行的虚拟固件注入所述中断。在另一实施例中所述虚拟机被配置用于从虚拟固件请求与中断关联的对象和方法,且所述虚拟固件被配置用于向控制程序发出对与所述中断关联的对象和方法的请求。\n[0024] 在一些实施中,所述控制程序被配置用于向虚拟固件的高级配置和电源接口转发所提取的对象和方法;且所述虚拟固件的高级配置和电源接口被配置用于向由虚拟机执行的操作系统的管理界面提供所提取的对象和方法。在其他实施例中,所述控制程序由在计算装置的处理器上执行的管理程序执行。在其他实施例中,所述控制程序由计算装置的处理器执行的控制虚拟机所执行,且其中所述虚拟机是客户虚拟机。\n[0025] 在一个方面,本公开涉及在执行寄载了可信虚拟机和不可信虚拟机的管理程序的计算装置中,用于向可信虚拟机和不可信虚拟机的其中一个分配通用串行总线(USB)装置的方法。所述方法包括通过由计算装置的处理器执行的控制程序,接收数据,所述数据指示计算机上的USB端口接收了USB装置。所述方法还包括通过控制程序识别USB装置的至少一个属性。所述方法还包括,通过所述控制程序,基于对所识别至少一个装置属性的策略的应用,选择在计算装置上执行的可信虚拟机和不可信虚拟机的其中一个。所述方法还包括通过所述控制程序,准许控制程序所选的虚拟机访问所述USB装置。\n[0026] 在一个实施例中,所述方法包括识别USB装置的装置类型。在另一实施例中,所述方法包括识别USB装置的序号。在另一实施例中,所述方法包括通过所述控制程序,从在计算装置上执行的USB管理器请求所述USB装置的至少一个属性。\n[0027] 在一些实施例中,所述方法包括通过所述控制程序,确定所述USB装置的安全级别,该安全级别指示所述USB装置不能被可信虚拟机访问。所述方法还包括通过所述控制程序,基于对所述安全级别的确定,选择在计算装置上执行的不可信虚拟机。所述方法还包括通过所述控制程序,准许所选择的不可信虚拟机访问所述USB装置。在其他实施例中,所述方法包括通过所述控制程序,基于对于所述USB装置的至少一个属性的策略的应用,识别一组被允许的事务。在进一步的实施例中,所述方法包括允许所选的虚拟机执行包括在所述一组被允许的事务中的事务。\n[0028] 在一个实施例中,所述方法包括响应于由所选的虚拟机执行的应用所产生的窗口具有焦点,选择在计算装置上执行的可信虚拟机和不可信虚拟机的其中一个。在另一个实施例中,所述方法包括更新所选虚拟机的可用物理资源的虚拟化视图以包括所述USB装置。\n[0029] 在另一个方面,本公开涉及在执行寄载了可信虚拟机和不可信虚拟机的管理程序的计算装置中,用于向可信虚拟机和不可信虚拟机的其中一个分配通用串行总线(USB)装置的系统。所述系统包括USB装置以及包含USB端口和处理器的计算装置,该处理器执行控制程序和寄载了可信虚拟机和不可信虚拟机的管理程序。所述控制程序被配置用于接收数据以及识别所述USB装置的至少一个属性,所述数据指示计算机上的USB端口接收到了USB装置。所述控制程序还被配置为基于对于所识别的至少一个装置属性的策略的应用,选择可信虚拟机和不可信虚拟机的其中一个,以及准许由所述控制程序所选的虚拟机访问所述USB装置。\n[0030] 在一个实施例中,所述控制程序被配置用于识别所述USB装置的装置类型。在另一个实施例中,所述控制程序被配置用于识别所述USB装置的序号。在另一个实施例中,所述计算装置还包括USB管理器,且所述控制程序被配置用于从USB管理器请求所述USB装置的至少一个属性。\n[0031] 在一些实施例中,所述控制程序被配置用于确定所述USB装置的安全级别,该安全级别指示所述USB装置不能被可信虚拟机访问。所述控制程序也被配置用于基于对安全级别的确定,选择在计算装置上执行的不可信虚拟机;且准许其访问所述USB装置。\n[0032] 在一个实施例中,所述控制程序被配置用于基于对于所述USB装置至少一个属性的策略的应用,识别一组被允许的事务。在又一个实施例中,所述控制程序被配置用于允许所选的虚拟机执行包括在所述一组被允许的事务中的事务。在另一个实施例中,所述控制程序被配置用于响应于由所选虚拟机执行的应用所产生的窗口具有焦点,选择在计算装置上执行的可信虚拟机和不可信虚拟机的其中一个被执行。在另一个实施例中,控制程序被配置用于更新所选虚拟机的可用物理资源的虚拟化视图以包括所述USB装置。\n[0033] 在一个方面,本公开涉及在寄载了多个虚拟机的管理程序的计算装置中,用于响应于确定虚拟机发起与光盘驱动器的事务,准许虚拟机独占访问光盘驱动器的方法。所述方法包括通过由计算装置的处理器执行的驱动管理器,将连接到计算装置的光盘驱动器映射到由计算装置执行的管理程序所寄载的多个虚拟机。所述方法还包括通过所述驱动管理器,拦截由光盘驱动器产生的事务流。所述方法进一步包括通过驱动管理器,将所述事务流转换为命令流。所述方法还包括通过驱动管理器,基于对所述命令流的分析,确定所述多个虚拟机中的第一虚拟机发起与光盘驱动器的事务。所述方法还包括通过所述驱动管理器,响应于所述确定,锁定光盘驱动器以准许第一虚拟机独占访问所述光盘驱动器。\n[0034] 在一个实施例中,所述方法包括通过所述驱动管理器,在锁定光盘驱动器之后,确定第一虚拟机停止与所述光盘驱动器的事务;且通过所述驱动管理器,解锁所述光盘驱动器。在又一个实施例中,所述方法包括通过驱动管理器,确定多个虚拟机的第二虚拟机发起与光盘驱动器的事务;以及通过驱动管理器,锁定所述光盘驱动器以准许第二虚拟机独占访问光盘驱动器。\n[0035] 在一些实施例中,所述方法包括更新多个虚拟机中的每一个的可用物理资源的虚拟化视图以同时包括该光盘驱动器。在其他实施例中,所述方法包括当第一虚拟机访问所述光盘驱动器时,阻止多个虚拟机中的第二虚拟机与所述光盘驱动器进行事务处理。在其他实施例中,所述方法包括拦截包含小型计算机系统接口(SCSI)命令的事务流。在其他实施例中,所述方法包括确定第一虚拟机开始向光盘驱动器中的盘写。\n[0036] 在一个实施例中,所述方法包括确定虚拟机开始向光盘驱动器中的盘写。在另一个实施例中,所述方法包括通过驱动管理器,拦截由多个虚拟机中的第二虚拟机产生的访问所述光盘驱动器的请求;以及通过驱动管理器,当所述光盘驱动器被锁定时将该请求排队。在另一实施例中,所述方法包括通过所述驱动管理器,拦截由第一虚拟机产生且传送到所述光盘驱动器的命令。所述方法还包括通过驱动管理器,且响应于应用到第一虚拟机的凭证的许可策略,确定第一虚拟机缺乏向光盘驱动器发出命令的许可。所述方法还包括通过所述驱动管理器,阻止所述光盘驱动器接收该命令。\n[0037] 在另一个方面,本公开涉及在寄载了多个虚拟机的管理程序的计算装置中,用于响应于确定虚拟机发起了与光盘驱动器的事务,准许虚拟机独占访问光盘驱动器的系统。\n所述系统包括光盘驱动器和连接到光盘驱动器的计算装置,该计算装置包括执行驱动管理器和寄载了多个虚拟机的管理程序的处理器。所述驱动管理器被配置用于将光盘驱动器映射到多个虚拟机。所述驱动管理器还被配置为拦截由光盘驱动器产生的事务流,且转换所述事务流到命令流。所述驱动管理器被进一步配置用于:基于所述命令流的分析,确定多个虚拟机的第一虚拟机发起与光盘驱动器的事务,且响应于该确定,锁定所述光盘驱动器以准许第一虚拟机独占访问所述光盘驱动器。\n[0038] 在一个实施例中,所述驱动管理器被进一步配置为:在锁定所述光盘驱动器之后确定第一虚拟机停止与所述光盘驱动器的事务;且解锁所述光盘驱动器。在又一个实施例中,所述驱动管理器被进一步配置为确定多个虚拟机中的第二虚拟机发起与光盘驱动器的事务;且锁定所述光盘驱动器以准许第二虚拟机独占访问所述光盘驱动器。\n[0039] 在一些实施例中,所述驱动管理器被进一步配置为更新多个虚拟机每一个的可用物理资源的虚拟化视图以同时包括该光盘驱动器。在其他实施例中,所述驱动管理器被进一步配置为当第一虚拟机访问所述光盘驱动器时,阻止多个虚拟机中的第二虚拟机与所述光盘驱动器进行事务处理。在其他实施例中,所述驱动管理器被进一步配置为拦截包含小型计算机系统接口(SCSI)命令的事务流。在其他实施例中,所述驱动管理器被进一步配置为确定第一虚拟机开始向光盘驱动器中的盘写。\n[0040] 在一个实施例中,所述驱动管理器被进一步配置为确定所述虚拟机开始从光盘驱动器中的盘读。在另一个实施例中,所述驱动管理器被进一步配置为拦截由多个虚拟机中的第二虚拟机产生的访问所述光盘驱动器的请求;并当所述光盘驱动器被锁定时将该请求排队。在另一个实施例中,所述驱动管理器被进一步配置为拦截由第一虚拟机产生的且传送到所述光盘驱动器的命令。响应于应用到第一虚拟机的凭证的许可策略,所述驱动管理器还被配置用于确定第一虚拟机缺少向光盘驱动器发出命令的许可。所述驱动管理器被进一步配置用于阻止所述光盘驱动器接收该命令。\n[0041] 在一个方面,本公开涉及在执行寄载了第一虚拟机第二虚拟机的管理程序的计算装置中,用于向虚拟机提供对与到无线局域网的连接关联的数据的访问的方法。所述方法包括通过由第一物理计算装置的处理器执行的第一虚拟机所执行的第一驱动,经由第一物理计算装置的无线局域网接口,建立到第二物理计算装置的网络连接。所述方法还包括通过第一驱动,从由第一物理计算装置的处理器执行的第二虚拟机所执行的第二驱动接收对网络连接的特征的请求。所述方法进一步包括响应于该请求,通过第一驱动向第二驱动提供包含被请求的特征的数据。\n[0042] 在一个实施例中,所述方法包括准许第一驱动访问无线局域网接口;以及禁止第二驱动访问所述无线局域网接口。在另一个实施例中,所述方法包括通过第二驱动向第一物理计算装置的用户显示所接收的数据。在另一个实施例中,所述方法包括通过第一驱动从第二驱动接收对于所建连接信号强度的识别的请求。在另一个实施例中,所述方法包括通过第一驱动从第二驱动接收对于无线局域网的标识的请求。\n[0043] 在一些实施例中,所述方法包括禁止第一驱动访问所述无线局域网接口。在一些实施例中,所述方法包括准许第二驱动访问所述无线局域网接口。在进一步的实施例中,所述方法包括通过第二驱动,经由由第一驱动建立的网络连接与第二物理计算装置通信。在进一步的实施例中,所述方法包括禁止第二驱动访问无线局域网接口;准许第一驱动访问无线局域网接口;以及通过第一驱动保持由第一驱动建立的网络连接。在其他实施例中,所述方法包括禁止第一驱动访问无线局域网接口;准许第二驱动访问无线局域网接口;以及通过第二驱动,经由第一物理计算装置的无线局域网接口建立到第三物理计算装置的第二网络连接。\n[0044] 在另一个方面,本公开涉及在执行寄载了第一虚拟机第二虚拟机的管理程序的计算装置中,用于向虚拟机提供对与到无线局域网的连接关联的数据的访问的系统。所述系统包括第一物理计算装置,其包括无线局域网接口和执行第一虚拟机和第二虚拟机的处理器。所述系统还包括第二物理计算装置。所述系统还包括由第一虚拟机执行的第一驱动,以及由第二虚拟机执行的第二驱动。所述第一驱动被配置用于通过第一物理计算装置的无线局域网接口,建立到第二物理计算装置的网络连接。所述第一驱动被进一步配置用与从第二驱动接收对网络连接的特征的请求,以及响应于该请求,向第二驱动提供包含所请求的特征的数据。\n[0045] 在一个实施例中,管理程序被配置用于准许第一驱动访问无线局域网接口;以及禁止第二驱动访问所述无线局域网接口。在另一个实施例中,第二驱动被进一步配置用为向第一物理计算装置的用户显示所接收的数据。在另一个实施例中,第一驱动被进一步配置用于从第二驱动接收对于所建立连接信号强度的识别的请求。在另一个实施例中,第一驱动被进一步配置用于从第二驱动接收对于无线局域网的标识的请求。\n[0046] 在一些实施例中,管理程序被进一步配置用于禁止第一驱动访问所述无线局域网接口。在进一步的实施例中,所述管理程序被进一步配置用于准许第二驱动访问所述无线局域网接口。在进一步的实施例中,第二驱动被进一步配置用于通过由第一驱动建立的网络连接与第二物理计算装置通信。在进一步的实施例中,所述管理程序进一步被配置用于禁止第二驱动访问所述无线局域网接口,以及准许第一驱动访问所述无线局域网接口;且第一驱动被进一步配置用于保持由第一驱动建立的网络连接。在其他实施例中,所述系统包括第三物理计算装置,所述管理程序被进一步配置用于禁止第一驱动访问无线局域网接口并准许第二驱动访问无线局域网接口;且第二驱动被进一步配置为通过第一物理计算装置的无线局域网接口建立到第三物理计算装置的第二网络连接。\n[0047] 在一个方面,本公开涉及在执行寄载了可信虚拟机和不可信虚拟机的管理程序的计算装置中,用于阻止不可信虚拟机读可信虚拟机的图形输出的方法。所述方法包括通过由计算装置的处理器执行的图形管理器,接收由计算装置执行的可信虚拟机对使用计算装置的图形处理单元呈现图形数据的请求。所述方法还包括通过所述图形管理器向可信虚拟机分配图形处理单元存储器的安全部分。所述方法还包括通过图形管理器,根据可信虚拟机图形数据将图形呈现到图形处理单元存储器的安全部分。所述方法还包括通过图形管理器,接收由计算装置执行的不可信虚拟机对根据可信虚拟机图形数据呈现的且存储在图形处理单元存储器的安全部分中的图形的读请求。所述方法还包括通过图形管理器,阻止不可信虚拟机读存储在图形处理单元存储器的安全部分中的可信虚拟机所呈现的图形。\n[0048] 在一个实施例中,所述方法包括通过图形管理器,接收在可信虚拟机上执行的应用产生的请求,所述应用产生图形数据。在另一实施例中,所述方法包括向一定范围的存储地址分配策略。在另一实施例中,所述方法包括通过图形管理器识别不可信虚拟机的安全凭证,且通过所述图形管理器,基于该安全凭证,确定不可信虚拟机没有访问图形处理单元存储器的安全部分的许可。在进一步的实施例中,所述方法包括对所述安全凭证应用图形处理单元存储器的安全部分的策略。\n[0049] 在一些实施例中,所述方法包括将被呈现的图形存储到图形处理单元存储器的安全部分。在其他实施例中,所述方法包括通过图形管理器,接收不可信虚拟机上执行的应用对使用图形处理单元呈现第二组图形数据的请求;且通过图形管理器,根据第二组图形数据将图形呈现到图形处理单元存储器的部分,该部分不包括图形处理单元存储器的安全部分。在进一步的实施例中,所述方法包括通过图形管理器,识别在不可信虚拟机上执行的应用的安全凭证。所述方法还包括通过图形管理器,基于所述安全凭证,确定不可信虚拟机没有访问图形处理单元存储器的安全部分的许可。所述方法还包括,通过图形管理器,阻止所述图形处理单元将图形呈现到所述图形处理单元存储器的安全部分。\n[0050] 在另一个方面,本公开涉及在执行寄载了可信虚拟机和不可信虚拟机的管理程序的计算装置中,用于阻止不可信虚拟机读可信虚拟机的图形输出的系统。所述系统包括计算装置,该计算装置包括执行图形管理器和寄载了可信虚拟机和不可信虚拟机的管理程序的处理器以及包括存储器的图形处理单元。所述图形管理器被配置用于接收可信虚拟机对使用所述图形处理单元呈现图形数据的请求。所述图形管理器还被配置用于对可信虚拟机分配图形处理单元存储器的安全部分。所述图形管理器被进一步配置用于根据可信虚拟机图形数据将图形呈现到图形处理单元存储器的安全部分。所述图形管理器还被配置用于接收不可信虚拟机对根据可信虚拟机图形数据呈现的且存储在图形处理单元存储器的安全部分中的图形的读请求。所述图形管理器被进一步配置为阻止不可信虚拟机读存储在图形处理单元存储器的安全部分中的可信虚拟机所呈现的图形。\n[0051] 在一个实施例中,所述系统包括在产生图形数据的可信虚拟机上执行的应用,且所述图形管理器被进一步配置为接收该应用产生的请求。在另一个实施例中,所述图形管理器被进一步配置用于向一定范围的存储地址分配策略。在另一实施例中,所述图形管理器被进一步配置用于识别不可信虚拟机的安全凭证,且基于该安全凭证,确定不可信虚拟机没有访问图形处理单元存储器的安全部分的许可。在进一步的实施例中,所述图形管理器被进一步配置用于对所述安全凭证应用图形处理单元存储器的安全部分的策略。\n[0052] 在一些实施例中,所述图形管理器被进一步配置用于存储所呈现的图形到图形处理单元存储器的安全部分。在其他实施例中,所述系统包括在不可信虚拟机上执行的应用,且所述图形管理器被进一步配置为接收该应用对使用图形处理单元呈现第二组图形数据的请求(其中该应用生成第二组图形数据),且根据第二组图形数据将图形呈现到图形处理单元存储器的部分,该部分不包括图形处理单元存储器的安全部分。在进一步的实施例中,所述图形管理器被进一步配置用于识别在不可信虚拟机上执行的应用的安全凭证。所述图形管理器还被配置为基于该安全凭证,确定不可信虚拟机没有访问图形处理单元存储器的安全部分的许可。所述图形管理器被进一步配置为阻止所述图形处理单元将图形呈现到所述图形处理单元存储器的安全部分。\n[0053] 在一个方面,本公开涉及在执行寄载了控制虚拟机和不可信虚拟机的管理程序的计算装置中,使用管理程序信任的客户机保护敏感信息的方法。所述方法包括通过由计算装置的处理器执行的不可信虚拟机的用户,请求建立到远程计算装置的连接。所述方法还包括通过由计算装置的处理器执行的控制虚拟机,响应于所述请求,启动客户机代理。所述方法进一步包括通过由计算装置的处理器执行的图形管理器向客户机代理分配计算装置的图形处理单元存储器的安全部分。所述方法还包括通过图形管理器,将由客户机代理产生的图形数据呈现到图形处理单元存储器的安全部分。\n[0054] 在一个实施例中,所述方法还包括通过图形管理器,接收不可信虚拟机对根据客户机代理图形数据呈现的且存储在图形处理单元存储器的安全部分中的图形的读请求。所述方法还包括通过图形管理器,阻止不可信虚拟机读存储在图形处理单元存储器的安全部分中的客户机代理所呈现图形。在另一个实施例中,所述方法包括通过客户机代理经由在不可信虚拟机和控制虚拟机之间建立的通信通道,接收网络地址信息用以建立到远程计算装置的连接。\n[0055] 在一些实施例中,所述方法包括通过计算装置的管理程序,响应于客户机代理窗口具有焦点,将来自用户的输入数据引导到客户机代理。在进一步的实施例中,输入数据包括用于远程计算装置的登录凭证。在另一实施例中,所述方法包括通过客户机代理,从不可信虚拟机接收关于由客户机代理产生的窗口正被给予焦点的识别。在另一实施例中,所述方法包括通过管理程序,当客户机代理的窗口具有焦点时阻止不可信虚拟机访问输入数据。在另一实施例中,所述方法包括通过管理程序,响应于客户机代理的窗口不再具有焦点,将来自用户的输入数据引导到不可信虚拟机。\n[0056] 在另一个方面,本公开涉及在执行寄载了控制虚拟机和不可信虚拟机的管理程序的计算装置中,使用管理程序信任的客户机保护敏感信息的系统。所述系统还包括远程计算装置和本地计算装置。本地计算装置包括包含存储器的图形处理单元,以及处理器,该处理器执行图形管理器和寄载了不可信虚拟机和控制虚拟机的管理程序。所述控制虚拟机被配置用于响应于接收不可信虚拟机的用户请求来建立到远程计算装置的连接,启动客户机代理。所述图形管理器被配置用于向客户机代理分配图形处理单元存储器的安全部分,以及呈现由客户机代理产生的图形数据到所述图形处理单元存储器的安全部分。\n[0057] 在一个实施例中,图形管理器被进一步配置用于接收不可信虚拟机对根据客户机代理图形数据呈现的且存储在图形处理单元存储器的安全部分中的图形的读请求,且阻止不可信虚拟机读存储在图形处理单元存储器的安全部分中的客户机代理所呈现的图形。在另一实施例中,所述客户机代理被配置用于通过在不可信虚拟机和控制虚拟机之间建立的通信通道,接收网络地址信息以建立到远程计算装置的连接。\n[0058] 在一些实施例中,管理程序被配置用于响应于客户机代理窗口具有焦点,将来自用户的输入数据引导到客户机代理。在进一步的实施例中,输入数据包括用于远程计算装置的登录凭证。在进一步的实施例中,所述客户机代理被配置用于从不可信虚拟机接收关于客户机代理产生的窗口正被给予焦点的识别。在进一步的实施例中,所述客户机代理被配置用于当客户机代理的窗口具有焦点时阻止不可信虚拟机访问输入数据。在进一步的实施例中,所述管理程序被配置用于响应于客户机代理窗口不再具有焦点,将来自用户的输入数据引导到不可信虚拟机。\n[0059] 在附图和下面的描述中将详细阐述本发明的各种实施例的细节。\n附图说明\n[0060] 本发明的前述和其它目的、方面、特征和优点通过参考下述结合附图的描述将会更加明显并更易于理解,其中:\n[0061] 图1A是描述包括与远程机器通信的本地机器的网络环境的实施例的框图;\n[0062] 图1B-1E是描述有益于与本文所描述的方法和系统结合的计算机的实施例的框图;\n[0063] 图2A和图2B是描述虚拟化环境的实施例的框图;\n[0064] 图3A是描述用于在可信和不可信虚拟机之间通信的系统的实施例的框图;\n[0065] 图3B是用于在可信和不可信虚拟机之间通信的方法的实施例的流程图;\n[0066] 图4A是描述用于管理将输入数据注入虚拟化环境的系统的实施例的框图;\n[0067] 图4B是用于管理将输入数据注入虚拟化环境的方法的实施例的流程图;\n[0068] 图4C是用于管理将输入数据注入虚拟化环境的方法的实施例的图表;\n[0069] 图5A是描述用于通过虚拟固件来服务响应于硬件的激励而产生的中断的系统的实施例的框图;\n[0070] 图5B是用于通过虚拟固件来服务响应于硬件的激励而产生的中断的方法的实施例的流程图;\n[0071] 图6A是描述用于向可信虚拟机或不可信虚拟机分配通用串行总线(USB)装置的系统的实施例的框图;\n[0072] 图6B是用于向可信虚拟机或不可信虚拟机分配通用串行总线(USB)装置的方法的实施例的流程图。\n[0073] 图6C是用于向分配给可信虚拟机或不可信虚拟机的USB装置应用策略的方法的实施例的流程图;\n[0074] 图7A是描述用于控制虚拟机访问光盘驱动器的系统的实施例的框图;\n[0075] 图7B是用于控制虚拟机访问光盘驱动器的方法的实施例的流程图。\n[0076] 图8A是用于通过指定的无线局域网驱动,提供虚拟机对与到无线局域网的连接关联的数据的访问的系统的实施例的框图;\n[0077] 图8B是用于通过指定的无线局域网驱动,提供虚拟机对与到无线局域网的连接关联的数据的访问的方法的实施例的流程图;\n[0078] 图9A是用于阻止访问由可信虚拟机产生的显示图形的系统的实施例的框图;\n[0079] 图9B是用于阻止访问由可信虚拟机产生的显示图形的方法的实施例的流程图;\n[0080] 图10A是用于使用管理程序信任的客户机保护敏感信息的系统的实施例的框图;\n[0081] 图10B是用于使用管理程序信任的客户机保护敏感信息的方法的实施例的流程图。\n[0082] 从下面结合附图所阐述的详细描述,本发明的特征和优点将更明显,其中,同样的参考标记在全文中识别相应的元素。在附图中,同样的附图标记通常表示相同的、功能上相似的和/或结构上相似的元素。\n具体实施方式\n[0083] 为了阅读下文各种实施例的描述,下述对于说明书的部分以及它们各自内容的描述是有用的:\n[0084] -A部分描述有益于实施本文描述的实施例的网络环境和计算环境;\n[0085] -B部分描述包括了有益于实施本文描述的实施例的虚拟化环境的系统的实施例;\n[0086] -C部分描述用于在可信和不可信虚拟机之间通信的系统和方法的实施例;\n[0087] -D部分描述用于管理将输入数据注入虚拟化环境的系统和方法的实施例;\n[0088] -E部分描述用于通过虚拟固件来服务响应于硬件的激励而产生的中断的系统和方法的实施例;\n[0089] -F部分描述用于向可信虚拟机和不可信虚拟机分配通用串行总线(USB)装置的系统和方法的实施例;\n[0090] -G部分描述用于控制虚拟机访问光盘驱动器的系统和方法的实施例;\n[0091] -H部分描述用于通过指定的无线局域网驱动,向虚拟机提供对与到无线局域网的连接关联的数据的访问的系统和方法的实施例;\n[0092] -I部分描述用于阻止访问由可信虚拟机产生的显示图形的系统和方法的实施例;\n以及\n[0093] -J部分描述用于使用管理程序信任的客户机来保护敏感信息的系统和方法的实施例。\n[0094] A.网络和计算环境\n[0095] 现参考图1A,描述了网络环境的实施例。总的来说,网络环境包括经由一个或者多个网络104与一个或者多个远程机器106a-106n(其也被总称为服务器106或者远程机器\n106)通信的一个或者多个本地机器102a-102n(其也被总称为本地机器102、客户机102、客户节点102、客户机器102、客户计算机102、客户机装置102、端点102或端点节点102)。\n在一些实施例中,本地机器102既有作为客户节点寻求访问服务器所提供资源的能力,也有作为服务器向其他客户机102a-102n提供对所寄载的资源的访问的能力。\n[0096] 虽然图1A示出了在本地机器102和远程机器106之间的网络104,本地机器102和远程机器106可以位于相同的网络104上。网络104可为局域网(LAN)(例如公司内网),城域网(MAN),或者广域网(WAN)(例如因特网或万维网)。在一些实施例中,在本地机器102和远程机器106之间可以有多个网络104。在这些实施例的一个中,网络104’(未示出)可为专用网并且网络104可为公网。在这些实施例的另一个中,网络104可为专用网并且网络104’可为公网。在又一个实施例中,网络104和104’可都为专用网。而在另一个实施例中,网络104和104’可都为公网。\n[0097] 网络104可以是任何类型和/或形式的网络,并且可包括任意下述网络:点对点网络,广播网络,广域网,局域网,电信网络,数据通信网络,计算机网络,ATM(异步传输模式)网络,SONET(同步光纤网络)网络,SDH(同步数字体系)网络,无线网络和有线网络。在一些实施例中,网络104可以包括无线链路,诸如红外信道或者卫星频带。网络104的拓扑可为总线型、星型或环型网络拓扑。网络104可以具有对于本领域普通技术人员所熟知的、能够支持本文描述的操作的任何这样的网络拓扑。网络可包括利用用于移动装置间通信的任一或一些协议的移动电话网络,这些协议包括:AMPS、TDMA、CDMA、GSM、GPRS或UMTS。在一些实施例中,不同类型的数据可以通过不同协议传输。在其他实施例中,同一类型的数据可通过不同协议传输。\n[0098] 在一些实施例中,系统可包括多个逻辑分组的远程机器106。在这些实施例的一个中,服务器的逻辑分组可以被称为服务器群38。在这些实施例的又一个中,远程机器106可为地理上分散的。在其他实施例中,服务器群38可以作为单个实体被管理。仍在其他实施例中,服务器群38包括多个服务器群38。每个服务器群38内的远程机器106可能是异构的---一个或多个远程机器106可根据一种类型的操作系统平台(例如,WINDOWSNT、WINDOWS 2003或WINDOWS 2008,所有这些都是由华盛顿州Redmond的Microsoft公司出品的)操作,而一个或多个其它远程机器106可根据另一类型的操作系统平台(例如,Unix或Linux)操作。\n[0099] 每个服务器群38的远程机器106不必与同一服务器群38中的另一个远程机器\n106在物理上接近。因此,逻辑上分组为服务器群38的远程机器106组可以是使用广域网(WAN)连接或城域网(MAN)连接来互联的。例如,服务器群38可包括物理上位于不同大陆或大陆、国家、州、城市、校园或房间的不同区域的远程机器106。如果远程机器106使用局域网(LAN)连接或一些直连形式进行连接,则可增加服务器群38中的远程机器106间的数据传送速度。\n[0100] 远程机器106可以是文件服务器、应用服务器、web服务器、代理服务器、设备、网络设备、网关、应用网关、网关服务器、虚拟化服务器、部署服务器、SSL VPN服务器,或防火墙。在一些实施例中,远程机器106提供远程认证拨入用户服务,并且可被称为RADIUS服务器。在其他实施例中,远程机器106可以有作为应用服务器或者作为主应用服务器工作的能力。仍在其他实施例中,远程机器106是刀片服务器。在其他实施例中,远程机器106执行向用户或客户计算机102提供对计算环境访问的虚拟机。\n[0101] 在一个实施例中,远程机器106可包括活动目录。远程机器106可以是应用加速设备。对于其中远程机器106是应用加速设备的实施例,远程机器106可提供包括防火墙功能、应用防火墙功能,或负载平衡功能的功能。在一些实施例中,远程机器106包括诸如由位于美国加州San Jose的Citrix应用网络组、位于美国加州Mountain View,的Silver Peak Systems公司、位于美国加州San Francisco的Riverbed Technology公司、位于美国华盛顿州Seattle的F5Networks公司或位于美国加州Sunnyvale的Juniper Networks公司制造的设备系列中的一个的设备。\n[0102] 在一些实施例中,远程机器106代表本地机器102的用户执行应用。在其他实施例中,远程机器106执行虚拟机,该虚拟机提供执行会话,在该执行会话中应用代表本地机器102的用户来执行。在这些实施例的一个中,该执行会话是所寄载的桌面会话。在这些实施例的另一个中,该执行会话提供对计算环境的访问,该计算环境包括如下的一个或多个:\n应用、多个应用、桌面应用、以及在其中可执行一个或多个应用的桌面会话。\n[0103] 在一些实施例中,本地机器102与远程机器106通信。在一个实施例中,本地机器\n102与服务器群38中的远程机器106之一直接通信。在又一个实施例中,本地机器102执行程序邻近应用(a program neighborhood application)以与服务器群38内的远程机器\n106通信。在又一个实施例中,远程机器106提供主节点的功能。在一些实施例中,本地机器102通过网络104与服务器群38中的远程机器106通信。例如通过网络104,本地机器\n102可以请求执行服务器群38中的远程机器106a-106n所寄载的各种应用,并接收应用执行结果的输出进行显示。在一些实施例中,只有主节点提供这样的功能,即识别和提供与远程机器106b相关的地址信息所需的功能,所述远程机器106b寄载所请求的应用。\n[0104] 在一个实施例中,远程机器106提供web服务器的功能。在又一个实施例中,远程机器106a接收来自本地机器102的请求,将该请求转发到第二远程机器106b,并用远程机器106b对该请求的响应来对本地机器102的请求进行响应。在又一个实施例中,远程机器\n106a获得对本地机器102可用的应用的列举,以及与寄载由该应用的列举所识别的应用的远程机器106b相关联的地址信息。在又一个实施例中,远程机器106使用web接口提供对本地机器102的请求的响应。在一个实施例中,本地机器102直接与远程机器106通信以访问所识别的应用。在又一个实施例中,本地机器102接收通过执行远程机器106上所识别的应用而产生的输出数据,例如显示数据。\n[0105] 在一些实施例中,远程机器106或服务器群38可运行一个或多个应用,例如提供瘦客户端计算的应用或远程显示表示应用。在一个实施例中,远程机器106或服务器群38作为应用来执行Citrix Systems有限公司的CITRIX ACCESS SUITE的任一部分(例如产品METAFRAME或CITRIX PRESENTATION SERVER),由Citrix Systems有限公司出品的任何下列产品:CITRIX XENAPP、CITRIX XENDESKTOP、CITRIX ACCESS GATEWAY,和/或微软公司出品的MICROSOFT WINDOWS终端服务中的任意一个。在又一个实施例中,该应用是由位于美国佛罗里达州FortLauderdale的Citrix Systems有限公司开发的ICA客户机。仍在又一个实施例中,远程机器106可以运行应用,例如,该应用可以是提供诸如由位于美国华盛顿州Redmond的微软公司制造的MICROSOFT EXCHANGE的电子邮件服务的应用服务器、web或Internet服务器,或桌面共享服务器,或协同服务器。在又一个实施例中,任何应用可以包括任何类型的所寄载的服务或产品,例如位于美国加利福尼亚州Santa Barbara的Citrix Online Division公司提供的GOTOMEETING,位于美国加利福尼亚州Santa Clara的WebEx有限公司提供的WEBEX,或者位于美国华盛顿州Redmond的微软公司提供的Microsoft Office LIVE MEETING。\n[0106] 本地机器102可以执行、操作或者以其它方式提供应用,应用可为任何类型和/或形式的软件、程序或者可执行指令,例如任何类型和/或形式的web浏览器、基于web的客户机、客户机-服务器应用、瘦客户端计算客户机、ActiveX控件、或者Java小应用程序、或者可以在本地机器102上执行的任意其它类型和/或形式的可执行指令。在一些实施例中,该应用可以是代表本地机器102在远程机器106上执行的基于服务器或者基于远程的应用。在其他实施例中,远程机器106可以使用任意瘦-客户端协议、表示层协议或远程显示协议来显示输出到本地机器102,所述协议例如由位于美国佛罗里达州Ft.Lauderdale的Citrix Systems有限公司出品的独立计算架构(ICA)协议;由位于美国华盛顿州Redmond的微软公司出品的远程桌面协议(RDP);X11协议;由AT&T贝尔实验室出品的虚拟网络计算(VNC)协议;由位于美国加里福尼亚州Sunnyvale和位于以色列Raanana的Qumranet有限公司出品的SPICE协议;由加里福尼亚州Milpitas的VESA公司出品的Net2Display协议;由位于加拿大不列颠哥伦比亚省的Burnaby的Teradici公司出品的PC-over-IP协议;\n由加里福尼亚州SanJose的Wyse Technology有限公司出品的TCX协议;由纽约州纽约市的哥伦比亚大学开发的THINC协议;或由马萨诸塞州Chelmsford的Desktone有限公司开发的Virtual-D协议。该应用可使用任何类型的协议,并且它可为,例如,HTTP客户端、FTP客户端、Oscar客户端或Telnet客户端。在其它实施例中,该应用包括与互联网协议电话(VoIP)通信相关的任何类型的软件,例如软IP电话。在进一步的实施例中,该应用包括与实时数据通信相关的任一应用,例如用于流式传输视频和/或音频的应用。\n[0107] 本地机器102和远程机器106可以被部署为任意类型和形式的计算装置和/或在其上执行,例如能够与任意类型和形式的网络通信并且执行本文所描述的操作的计算机、网络装置或设备。图1B和1C描述了用于实施本地机器102或远程机器106的实施例的计算装置100的框图。如图1B和1C所示,每个计算装置100包括中央处理单元121和主存储器单元122。如图1B所示,计算装置100可包括存储装置128、安装装置116、网络接口\n118、I/O控制器123、显示装置124a-124n、键盘126和诸如鼠标的指示装置127。存储装置\n128可包括但不限于操作系统、软件和客户机代理120。如图1C所示,每个计算装置100也可包括另外的可选部件,例如存储器端口103、桥170、一个或多个输入/输出装置130a-\n130n(总的使用标号130表示)以及与中央处理单元121通信的高速缓存存储器140。\n[0108] 中央处理单元121是响应并处理从主存储器单元122取出的指令的任意逻辑电路。在一些实施例中,中央处理单元121由微处理器单元提供,例如:由位于美国加利福尼亚州Mountain View的Intel公司制造的微处理器单元;由位于美国伊利诺伊州Schaumburg的Motorola公司制造的微处理器单元;由位于美国加利福尼亚州Santa Clara的Transmeta公司制造的微处理器单元;RS/6000处理器,由位于美国纽约州White Plains的International Business Machines公司制造的微处理器单元;或者由位于美国加利福尼亚州Sunnyvale的Advanced Micro Devices公司制造的微处理器单元。计算装置100可以基于这些处理器中的任意一种,或者能够如本文所述方式运行的任意其它处理器。\n[0109] 主存储器单元122可以是能够存储数据并允许微处理器121直接访问任意存储位置的一个或多个存储器芯片,例如静态随机存取存储器(SRAM)、突发SRAM或同步突发SRAM(BSRAM)、动态随机存取存储器(DRAM)、快速页模式DRAM(FPM DRAM)、增强DRAM(EDRAM)、扩展数据输出RAM(EDO RAM)、扩展数据输出DRAM(EDO DRAM)、突发扩展数据输出DRAM(BEDO DRAM)、增强DRAM(EDRAM)、同步DRAM(SDRAM)、JEDEC SRAM、PC100SDRAM、双倍数据速率SDRAM(DDR SDRAM)、增强SDRAM(ESDRAM)、同步链路DRAM(SLDRAM)、直接内存总线DRAM(DRDRAM)或铁电RAM(FRAM)。主存储器122可以基于上述存储器芯片的任意一种,或者能够如本文所述方式运行的任意其它可用存储器芯片。在图1B所示的实施例中处理器\n121通过系统总线150(在下面进行更详细的描述)与主存储器122进行通信。图1C描述了在其中处理器通过存储器端口103直接与主存储器122通信的计算装置100的实施例。\n例如,在图1C中主存储器122可以是DRDRAM。\n[0110] 图1C描述在其中主处理器121通过有时被称为后端总线的次级总线直接与高速缓存存储器140通信的实施例。其他实施例中,主处理器121使用系统总线150与高速缓存存储器140通信。高速缓存存储器140通常有比主存储器122更快的响应时间,并且通常由SRAM、BSRAM或EDRAM提供。在图1B所示的实施例中,处理器121通过本地系统总线\n150与各种I/O装置130进行通信。可以使用各种不同的总线将中央处理单元121连接到任意I/O装置130,包括VESA VL总线、ISA总线、EISA总线、微通道体系结构(MCA)总线、PCI总线、PCI-X总线、PCI-Express总线或NuBus。对于I/O装置是视频显示器124的实施例,处理器121可以使用高级图形端口(AGP)与显示器124通信。图1C描述了在其中主处理器121通过HYPERTRANSPORT、RAPIDIO、或INFINIBAND通信技术直接与I/O装置130b通信的计算机100的实施例。图1C也描述了在其中本地总线和直接通信相混合的实施例:处理器121使用本地互连总线与I/O装置130a通信同时直接与I/O装置130b通信。\n[0111] 计算装置100中可以有多种I/O装置130a-130n。输入装置包括键盘、鼠标、触控板、轨迹球、麦克风和绘图板。输出装置包括视频显示器、扬声器、喷墨打印机、激光打印机和热升华打印机。如图1B所示,I/O装置可以由I/O控制器123控制。I/O控制器可以控制一个或多个I/O装置,例如键盘126和指示装置127(如鼠标或光笔)。此外,I/O装置还可以为计算装置100提供存储和/或安装介质116。在其它实施例中,计算装置100可以提供USB连接(未示出)以接纳手持USB存储装置,例如由位于美国加利福尼亚州Los Alamitos的Twintech Industry有限公司生产的USB闪存驱动系列装置。\n[0112] 再次参考图1B,计算装置100可以支持任意适当的安装装置116,例如用于接纳诸如3.5英寸、5.25英寸磁盘或ZIP磁盘的软盘的软盘驱动器、CD-ROM驱动器、CD-R/RW驱动器、DVD-ROM驱动器、各种格式的磁带驱动器、USB装置、硬盘驱动器或适于安装软件和程序的任意其它装置。计算装置100还可以包括存储装置,诸如一个或者多个硬盘驱动器或者独立磁盘冗余阵列,用于存储操作系统和其它相关软件,以及用于存储诸如涉及客户机代理120的任意程序的应用软件程序。或者,可以使用安装装置116的任意一种作为存储装置。此外,操作系统和软件可从可引导介质运行,可引导介质例如是可引导CD,诸如KNOPPIX,其为一种用于GNU/Linux的可引导CD,可自knoppix.net作为GNU/Linux一个发行版获得。\n[0113] 此外,计算装置100可以包括网络接口118以通过多种连接来与网络104对接,所述连接包括但不限于标准电话线路、LAN或WAN链路(例如802.11、T1、T3、56kb、X.25、SNA、DECNET)、宽带连接(如ISDN、帧中继、ATM、千兆以太网、基于SONET的以太网(Ethernet-over-SONET))、无线连接、或上述任意或全部的某种组合。可使用多种通信协议(例如TCP/IP、IPX、SPX、NetBIOS、Ethernet、ARCNET、SONET、SDH、光纤分布数据接口(FDDI)、RS232、IEEE802.11、IEEE802.11a、IEEE802.11b、IEEE802.11g、CDMA、GSM、WiMax和直接异步连接)来建立连接。在一个实施例中,计算装置100可以通过任意类型和/或形式的网关或诸如安全套接字层(SSL)或传输层安全(TLS),或由位于美国佛罗里达州Ft.Lauderdale的Citrix Systems公司制造的Citrix网关协议的隧道协议来与其他计算装置100’通信。\n网络接口118可以包括内置网络适配器、网络接口卡、PCMCIA网络卡、卡总线网络适配器、无线网络适配器、USB网络适配器、调制解调器或适用于将计算装置100对接到能够通信并执行这里所说明的操作的任意类型的网络的任意其它装置。\n[0114] 在一些实施例中,计算装置100可以包括多个显示装置124a-124n或与其相连,这些显示装置各自可以是相同或不同的类型和/或形式。因而,任意一种I/O装置130a-130n和/或I/O控制器123可以包括任何类型和/或形式的适当的硬件、软件或硬件和软件的组合,以支持、允许或提供通过计算装置100连接和使用多个显示装置124a-124n。例如,计算装置100可以包括任意类型和/或形式的视频适配器、视频卡、驱动器和/或库,以与显示装置124a-124n对接、通信、连接或以其他方式使用显示装置124a-124n。在一个实施例中,视频适配器可以包括多个连接器以与多个显示装置124a-124n对接。在其它实施例中,计算装置100可以包括多个视频适配器,每个视频适配器与显示装置124a-124n中的一个或多个连接。在一些实施例中,计算装置100的操作系统的任一部分都可以被配置用于使用多个显示器124a-124n。在其它实施例中,显示装置124a-124n中的一个或多个可以由一个或多个其它计算装置提供,诸如(例如通过网络)与计算装置100连接的计算装置100a和100b。这些实施例可以包括被设计和构造来使用另一个计算机的显示装置作为计算装置100的第二显示装置124a的任何类型的软件。本领域的普通技术人员应认识和意识到可以将计算装置100配置成拥有多个显示装置124a-124n的各种方式和实施例。\n[0115] 在进一步的实施例中,I/O装置130可以是系统总线150和外部通信总线之间的桥,所述外部通信总线如USB总线、Apple桌面总线、RS-232串行连接、SCSI总线、FireWire总线、FireWire800总线、以太网总线、AppleTalk总线、千兆位以太网总线、异步传输模式总线、HIPPI总线、超级HIPPI总线、SerialPlus总线、SCI/LAMP总线、光纤信道总线、串行SCSI总线。\n[0116] 图1B和1C中所描述类型的计算装置100通常地在操作系统的控制下运行,所述操作系统控制任务的调度和对系统资源的访问。计算装置100可运行任何操作系统,诸如任意版本的MICROSOFT WINDOWS操作系统;不同发行版本的Unix和Linux操作系统;用于Macintosh计算机的MAC OS的任意版本;任意嵌入式操作系统;任意实时操作系统;任意开源操作系统;任意专有操作系统;任意用于移动计算装置的操作系统,或者能够在计算装置上运行且执行本文所描述的操作的任意其它操作系统。典型的操作系统包括但不限于:WINDOWS 3.x、WINDOWS 95、WINDOWS 98、WINDOWS 2000、WINDOWS NT 3.51、WINDOWS NT \n4.0、WINDOWS 7、WINDOWS CE、WINDOWS XP和WINDOWS VISTA,所有这些均由位于美国华盛顿州Redmond的微软公司出品;由位于美国加利福尼亚州Cupertino的苹果计算机公司出品的MAC OS;由位于美国纽约州Armonk的国际商业机器公司出品的OS/2;以及由位于美国犹他州Salt Lake City的Caldera公司发布的可免费使用的Linux操作系统或者任意类型和/或形式的Unix操作系统,以及其它。\n[0117] 计算装置100可以是任意工作站、电话、台式计算机、膝上型或笔记本电脑、服务器、掌上电脑、移动电话或其他便携电信装置、媒体播放装置、游戏系统、移动计算装置,或能够通信并有足够的处理器能力和存储容量以执行本文所述的操作的任意其它类型和/或形式的计算、电信或者媒体装置。例如,计算机装置100可包括由位于美国加利福尼亚州Cupertino的苹果计算机公司出品的IPOD系列装置、由位于日本东京的索尼公司出品的PLAYSTATION2、PLAYSTATION3或PERSONAL PLAYSTATION PORTABLE(PSP)装置,由位于日本京都的Nintendo有限公司出品的NINTENDO DS、NINTENDO GAMEBOY、NINTENDO GAMEBOY ADVANCED或NINTENDO REVOLUTION装置,或者由位于美国华盛顿州Redmond的微软公司出品的XBOX或XBOX 360装置。\n[0118] 在一些实施例中,计算装置100可以有不同的处理器、操作系统以及符合该装置的输入装置。例如,在一个实施例中,计算装置100是由Palm有限公司出品的TREO180、270、\n600、650、680、700p、700w/wx、750、755p、800w、Centro或Pro智能电话。在这些实施例的一些中,TERO智能电话是在PalmOS操作系统的控制下操作并且包括笔输入装置以及五向导航装置。\n[0119] 在其他实施例中,计算装置100是移动装置,例如,JAVA使能蜂窝电话或个人数字助理(PDA),诸如i55sr、i58sr、i85s、i88s、i90c、i95c1、i335、i365、i570、I576、i580、i615、i760、i836、i850、i870、i880、i920、i930、ic502、ic602、ic902、i776或im1100,以上这些均由位于美国伊利诺伊州Schaumburg的摩托罗拉公司制造;由位于日本京都的Kyocera公司制造的6035或7135;或者由位于韩国首尔的Samsung电子有限公司制造的i300或i330。在一些实施例中,计算装置100是由位于芬兰的诺基亚公司制造或由位于瑞典Lund的Sony Ericsson Mobile Communications AB公司制造的移动装置。\n[0120] 在其他实施例中,计算装置100是黑莓(Blackberry)手持或智能电话,诸如由Research In Motion有限公司制造的装置,包括黑莓7100系列、8700系列、7700系列、7200系列、黑莓7520、黑莓PEARL 8100、8700系列、8800系列、黑莓Storm、黑莓Bold、黑莓Curve \n8900、黑莓Pearl Flip。在其他实施例中,计算装置100是智能电话、Pocket PC、Pocket PC电话,或支持Microsoft Windows Mobile Software的其它手持移动装置。此外,计算装置\n100可以是任意工作站、台式计算机、膝上型或笔记本电脑、服务器、掌上电脑、移动电话、任意其它计算机、或能够通信并有足够的处理器能力和存储容量以执行本文所述操作的其它形式的计算或者电信装置。\n[0121] 在一些实施例中,计算装置100是数字音频播放器。在这些实施例的一个中,计算装置100是诸如由位于美国加利福尼亚州Cupertino的苹果计算机公司制造的Apple IPOD、IPOD Touch、IPOD NANO和IPODSHUFFLE系列装置的数字音频播放器。在这些实施例的另一个中,数字音频播放器可作为便携媒体播放器和作为大容量存储装置来工作。在其他实施例中,计算装置100是诸如由位于美国新泽西州Ridgefield Park的Samsung Electronics America公司制造的DigitalAudioPlayer Select MP3播放器,或由位于美国伊利诺伊州Schaumburg的Motorola公司制造的Motorola m500或m25的数字音频播放器。\n在其他实施例中,计算装置100是便携媒体播放器,诸如由Creative Technologies有限公司制造的Zen Vision W、Zen Vision系列、Zen Portable Media Center装置或Digital MP3系列的MP3播放器。仍在其他实施例中,计算装置100是支持以下文件格式的便携媒体播放器或数字音频播放器,这些文件格式包括但不限于MP3、WAV、M4A/AAC、WMA Protected AAC、AIFF、Audible有声读物、Apple Lossless音频文件格式和.mov、.m4v以及.mp4MPEG-4(H.264/MPEG-4AVC)视频文件格式。\n[0122] 在一些实施例中,计算装置100包括装置的组合,例如与数字音频播放器或便携媒体播放器相组合的移动电话。在这些实施例的一个中,计算装置100是组合数字音频播放器和移动电话的Motorola RAZR或Motorola ROKR系列。在这些实施例的又一个中,计算装置100是由位于加利福尼亚州Cupertino的苹果公司制造的iPhone系列智能电话中的装置。\n[0123] 在一个实施例中,计算装置102a可从远程机器106请求资源,同时向客户机102b提供远程机器106的功能。在这样的实施例中,就从远程机器106(其可以被称为服务器)接收数据而言,计算装置102a可以被称为客户机,而就第二客户机102b而言,计算装置102a可以被称为服务器。在又一个实施例中,客户机102可代表客户机102上的用户从远程机器106请求资源。\n[0124] 如图1D所示,计算装置100可以包括多个处理器,并且可以提供用于对不只一个数据片同时执行多个指令或者同时执行一个指令的功能。在一些实施例中,计算装置100可包括具有一个或多个核的并行处理器。在这些实施例的一个中,计算装置100是共享内存并行装置,具有多个处理器和/或多个处理器核,将所有可用内存作为一个全局地址空间进行访问。在这些实施例的又一个中,计算装置100是分布式存储器并行装置,具有多个处理器,每个处理器仅访问本地存储器。在这些实施例的又一个中,计算装置100既有共享的存储器又有仅由特定处理器或处理器子集访问的存储器。在这些实施例的又一个中,如多核微处理器的计算装置100将两个或多个独立处理器组合在一个封装中,通常在一个集成电路(IC)中。在这些实施例的又一个中,计算装置100包括具有单元宽带引擎(CELL BROADBAND ENGINE)架构的芯片,并包括高能处理器单元以及多个协同处理单元,高能处理器单元和多个协同处理单元通过内部高速总线连接在一起,可以将内部高速总线称为单元互连总线。\n[0125] 在一些实施例中,处理器提供用于对多个数据片同时执行单个指令(SIMD)的功能。其他实施例中,处理器提供用于对多个数据片同时执行多个指令(MIMD)的功能。又一个实施例中,处理器可以在单个装置中使用SIMD和MIMD核的任意组合。\n[0126] 在一些实施例中,计算装置100可包括图形处理单元。图1E所示的这些实施例的一个中,计算装置100包括至少一个中央处理单元121和至少一个图形处理单元。在这些实施例的又一个中,计算装置100包括至少一个并行处理单元和至少一个图形处理单元。在这些实施例的又一个中,计算装置100包括任意类型的多个处理单元,多个处理单元中的一个包括图形处理单元。\n[0127] 在一个实施例中,资源可以是程序、应用、文档、文件、多个应用、多个文件、可执行程序文件、桌面环境、计算环境或对本地计算装置102的用户可用的其他资源。可以经由多种访问方法将资源传送到本地计算装置102,所述访问方法包括但不限于:传统的直接安装在本地计算装置102上,经由应用流式传输的方法传送到本地计算装置102、将经由第三计算装置106b上的资源的执行所产生的并且经由表示层协议向本地计算装置102传输的输出数据传送到本地计算装置102,将通过经由在远程计算装置106上执行的虚拟机执行资源所产生的输出数据传送到本地计算装置102,或者从连接到本地计算装置102的可移动存储装置(例如USB装置)执行并产生输出数据,或经由在本地计算装置102上执行的虚拟机执行并产生输出数据。在一些实施例中,本地计算装置102将通过资源的执行所产生的输出数据传输到另一个客户计算装置102b。\n[0128] 在一些实施例中,本地计算装置102的用户连接到远程计算装置106并且在本地计算装置102上查看在远程计算装置106上生成的远程桌面环境的本地版本的显示,其包括多个数据对象。在这些实施例的一个中,通过远程计算装置106(或通过第二远程计算装置106b)将至少一个资源提供给用户并且将其显示在远程桌面环境中。然而,可以存在用户在本地计算装置102上通过选择或者由于策略或者技术需求而执行的资源。在另一个这样的实施例中,本地计算装置102的用户更愿意使用提供对用户可用的所有资源的访问的集成桌面环境,而不是用于单独机器提供的资源的单独桌面环境。例如,用户会发现在多个图像显示器之间导航令人困惑并且难以有效使用。或者用户可能期望结合不同机器所提供的另一个资源来使用一个机器所提供的一个应用程序所产生的数据。在另一个这样的实施例中,通过和集成了远程资源和本地资源显示的远程桌面环境交互,可以控制对于执行资源、窗口移动、应用程序最大化/最小化、调整窗口大小和终止执行资源的请求。在另一个这样的实施例中,将应用或其他经由集成桌面环境可访问的资源(包括那些在本地计算装置102上执行的资源和那些在远程计算装置106上执行的资源)显示在单个桌面环境中。\n[0129] 在一个实施例中,将来自远程计算装置106的数据对象集成到本地计算装置102所产生的桌面环境中。在另一个实施例中,远程计算装置106维护集成桌面。在另一个实施例中,本地计算装置102维护集成桌面。\n[0130] 在一些实施例中,显示单个远程桌面环境204。在其中一个这样的实施例中,远程桌面环境204显示为全屏桌面。在其他实施例中,显示多个远程桌面环境204。在其中一个这样的实施例中,在一个或者多个显示装置124上以非全屏模式显示远程桌面环境中的一个或者多个远程桌面环境。在另一个这样的实施例中,在单独显示装置上以全屏模式显示远程桌面环境。在另一个这样的实施例中,在一个或者多个显示装置124上以全屏模式显示远程桌面环境中的一个或者多个远程桌面环境。\n[0131] B.包括虚拟化环境的系统\n[0132] 图2A示出虚拟化环境的一个实施例。被包括在计算装置201中的硬件层可包括一个或多个物理盘204、一个或多个物理设备206、一个或多个物理处理器208和物理存储器216。在一些实施例中,固件212可被存储在物理存储器216的存储器元件中并且由一个或多个物理处理器208执行。计算设备210还可包括被存储在物理存储器216的存储器元件中并且由一个或多个物理处理器208执行的操作系统214。进一步,管理程序202可被储在物理存储器216的存储器元件中并且由一个或多个物理处理器208执行。一个或多个虚拟机232A-C(总称为232)在一个或多个物理处理器208上执行。每个虚拟机232可以有虚拟盘226A-C和虚拟处理器228A-C。在一些实施例中,第一虚拟机232A可在虚拟处理器228A上执行包括工具堆栈224的控制程序220。在其他实施例中,一个或多个虚拟机\n232B-C可在虚拟处理器228B-C上执行客户操作系统230A-B。\n[0133] 进一步参考图2A,在一个实施例的更多细节中,所描述的虚拟化环境包括Type2管理程序202,或执行在计算装置201上的操作系统214中的管理程序。在一些实施例中,Type2管理程序在操作系统214环境中执行并且虚拟机在管理程序之上的层次执行。在许多实施例中,Type2管理程序在用户的操作系统的上下文中执行,这样Type2管理程序与用户操作系统进行交互。\n[0134] 在一些实施例中,虚拟化环境包括计算装置201。计算装置201可以是任何计算设备,在一些实施例中计算装置201可以是本文描述的任何计算机、设备或计算机器。尽管图\n2A示出了单个计算装置201,在一些实施例中由计算装置201存储和执行的模块、程序、虚拟机和命令可以被不只一个计算装置201执行。仍在其他实施例中,计算装置201可以是服务器群。\n[0135] 在一个实施例中,计算装置201可包括硬件层210,该硬件层包括与计算装置201通信的一个或多个硬件。在一些实施例中,硬件层210可包括被包含在计算装置201中的任意硬件。在一些实施例中,硬件层210可包括一个或多个物理盘204、一个或多个物理设备206、一个或多个物理处理器208和存储器216。\n[0136] 在一些实施例中,硬件层210可包括一个或多个物理盘204。物理盘204可以是任何硬盘,而在一些实施例中物理盘204可以是本文描述的任何硬盘。在一些实施例中,硬件层210可包括一个物理盘204。在其他实施例中,硬件层210可包括不只一个物理盘204。\n在一些实施例中,计算装置201可与被包含在硬件层210中作为物理盘204的外部硬盘通信。\n[0137] 在其他实施例中,硬件层210可包括处理器208。在一些实施例中,处理器208可以是任何处理器,而其他实施例中处理器208可以是本文描述的任何处理器。处理器208可包括一个或多个处理核。在其他实施例中计算装置201可包括一个或多个处理器208。在一些实施例中,计算装置201可包括一个或多个不同处理器,例如处理单元、图形处理单元或物理引擎。\n[0138] 在一些实施例中,物理设备206可以是被包含在计算装置201中的任何设备。在一些实施例中,物理设备206可以是在计算装置201中所包含的设备和与计算装置201通信的外部设备的任何组合。在一些实施例中,计算装置201可包括一个或多个物理设备206。\n物理设备206可以是下列设备中的任何一个:网络接口卡、视频卡、键盘、鼠标、输入装置、显示器、显示设备、扬声器、光驱、存储设备、通用串行总线连接、连接到计算装置201的任何设备、与计算装置201通信的任何设备、打印机、扫描仪或任何其他设备或本文所描述的任何设备。\n[0139] 硬件层210还可包括可包含任何类型存储器的物理存储器216。在一些实施例中物理存储器216可包括本文描述的任何存储器类型。物理存储器216可存储数据,以及在一些实施例中可存储一个或多个程序或可执行指令集。图2A所示固件212被存储在计算装置201的物理存储器216中的实施例。被存储在物理存储器216中的程序或可执行指令可由计算装置201上的一个或多个处理器208所执行。\n[0140] 在一些实施例中,固件212可以是可执行指令和硬件的任一组合,其控制与计算装置201通信的硬件或被包含在计算装置201内的硬件。在一些实施例中,固件212可控制硬件层210内的一个或多个硬件。在多个实施例中,固件212可被计算装置201内的一个或多个处理器208所执行。在一些实施例中,固件212可以是诸如基本输入/输出系统(BIOS)的启动固件。在计算装置201上执行的额外固件212可以与BIOS相接口。\n[0141] 在一个实施例中,计算装置201可包括由一个或多个物理处理器208执行的操作系统214。在一些实施例中,操作系统214是能直接访问硬件层210中硬件设备的用户操作系统。操作系统214可以是任何操作系统并且在一些实施例中,操作系统214可以是本文所述的任何操作系统。图2A示出了一个实施例,其中管理程序202在计算装置201上执行的操作系统214的上下文中执行。在这个实施例中,操作系统214可被称为宿主(host)操作系统214,而其他操作系统可被称为客户(guest)操作系统。客户操作系统可包括执行在虚拟机232上的客户操作系统230A-B,和/或控制程序220。\n[0142] 在一些实施例中,计算装置201可包括管理程序202。在一些实施例中,管理程序\n202可以是在计算装置201上由处理器208执行以便管理任一数量的虚拟机的程序。管理程序202可以被称为虚拟机监控器,或平台虚拟化软件。在一些实施例中,管理程序202可以是监控执行在计算设备上的虚拟机的可执行指令和硬件的任何组合。尽管图2A示出了包括Type2管理程序202的虚拟化环境,计算装置201可执行任何其他类型的管理程序。例如,计算装置201可以执行包括Type1管理程序202的虚拟化环境。在一些实施例中,计算装置201可执行一个或多个管理程序202。这些一个或多个管理程序202可以是相同类型的管理程序,或在其他实施例中可以是不同类型的管理程序。\n[0143] 在一些实施例中,管理程序202可以以模拟直接访问系统资源的操作系统230或控制程序220的任何方式向在虚拟机232上执行的操作系统230或控制程序220提供虚拟资源。系统资源可包括:物理设备、物理盘、物理处理器、物理存储器216和被包含在计算装置201硬件层210中的任何其他组件。在这些实施例中,管理程序202可被用来仿真虚拟硬件、划分物理硬件、虚拟化物理硬件和执行提供对计算环境的访问的虚拟机。仍在其他实施例中,管理程序202为在计算装置201上执行的虚拟机232控制处理器调度和存储器分区。管理程序202可包括由位于加利福尼亚州PaloAlto的VMWare公司制造的管理程序;\nXEN管理程序,其开发由开源Xen.org团体监督的开源产品;由微软公司提供的HyperV、虚拟服务器和虚拟PC管理程序,或其他。在一些实施例中,计算装置201执行管理程序202,该管理程序创建客户操作系统可在其上执行的虚拟机平台。在这些实施例中,计算装置201可被称为宿主服务器。这样的计算设备的例子是由位于佛罗里达州Fort Lauderdale的Citrix Systems公司提供的XENSERVER。\n[0144] 在一个实施例中,管理程序202创建操作系统230在其中执行的虚拟机\n232A-B(总的表示为232)。例如,在这些实施例的一个中,管理程序202加载虚拟机映像以创建虚拟机232。在这些实施例的另一个中,管理程序202在虚拟机232中执行操作系统\n230。仍在这些实施例的另一个中,虚拟机232执行操作系统230。\n[0145] 在一个实施例中,管理程序202控制至少一个虚拟机232的执行。在又一个实施例中,管理程序202将由计算装置201提供的至少一个硬件资源的抽象提供给至少一个虚拟机232。这个抽象还可被称为计算装置201上可利用的硬件、内存、处理器和其他系统资源的虚拟化或虚拟视图。在一些实施例中,硬件或硬件资源可以是在硬件层210中可利用的任何硬件资源。在其他实施例中,管理程序202控制虚拟机232访问计算装置201中可利用的物理处理器208的方式。控制对物理处理器208的访问可包括确定虚拟机232是否应该访问处理器208以及物理处理器性能如何呈现给虚拟机232。\n[0146] 在一些实施例中,计算装置201可寄载或执行一个或多个虚拟机232。虚拟机232可被称为域、客户和/或DOMAIN U。虚拟机232是一组可执行指令,当其被处理器208执行时,模拟物理计算机的操作,从而虚拟机232可类似物理计算设备执行程序或进程。尽管图2A计算装置201寄载3个虚拟机232的实施例,在其他实施例中,计算装置201可寄载任何数量的虚拟机232。在一些实施例中,管理程序202为每个虚拟机232提供物理硬件、内存、处理器和对该虚拟机可利用的其他系统资源的唯一的虚拟视图。在一些实施例中,该唯一的虚拟视图可以基于下列的任何一个:虚拟机许可;向一个或多个虚拟机标识符应用的策略引擎;访问虚拟机的用户;在虚拟机上执行的应用;被虚拟机访问的网络;或任何其他类似标准。在其他实施例中,管理程序202向每个虚拟机232提供物理硬件、存储器、处理器和对该虚拟机可利用的其他系统资源的基本上类似的虚拟视图。\n[0147] 每个虚拟机232可包括虚拟盘226A-C(总称为226)和虚拟处理器228A-C(总称为228)。在一些实施例中,虚拟盘226是计算装置201的一个或多个物理盘204的虚拟化视图,或计算装置201的一个或多个物理盘204的一部分的虚拟化视图。物理盘204的虚拟化视图可由管理程序202产生、提供和管理。在一些实施例中,管理程序202可为每个虚拟机232提供物理盘204的唯一视图。因此,在这些实施例中,当与其他虚拟盘226相比较时,被包含在每个虚拟机232中的虚拟盘226可以是唯一的。\n[0148] 虚拟处理器228可以是计算装置201的一个或多个物理处理器208的虚拟化视图。在一些实施例中,物理处理器208的虚拟化视图可由管理程序202产生、提供和管理。\n在一些实施例中,虚拟处理器228基本上具有至少一个物理处理器208的所有相同特征。在其他实施例中,虚拟处理器228提供物理处理器208的经修改的视图,从而虚拟处理器228的至少一些特征可以不同于相应的物理处理器208。\n[0149] 控制程序220可执行至少一个应用来管理和配置在虚拟机232以及在一些实施例中计算设备上执行的客户操作系统。在一些实施例中,控制程序220可被称为控制操作系统、控制域、域0或dom 0。在一些实施例中,控制程序220可以是XEN管理程序的DOMAIN \n0或DOM 0。控制程序220可以执行管理应用或程序以进一步显示可被管理员用来访问每个虚拟机232的功能和/或管理虚拟机232的用户接口。在一些实施例中,由管理程序产生的用户接口可被用于终止虚拟机232的执行、为虚拟机232分配资源、为虚拟机232指派权限或者管理与虚拟机232相关的安全证书。在一些实施例中,控制程序220可启动新的虚拟机232或终止正在执行的虚拟机232。在其他实施例中,控制程序220可直接访问硬件层210内的硬件和/或资源。仍在又一个实施例中,控制程序220可与在计算设备210上且在虚拟机232的上下文之外执行的程序和应用相接口。类似地,控制程序220可与在虚拟机232的上下文内执行的程序和应用相接口。\n[0150] 在一个实施例中,管理程序202可执行虚拟机232内的控制程序220。管理程序\n202可创建和启动虚拟机232。在管理程序202执行虚拟机232内的控制程序220的实施例中,该虚拟机232也可被称为控制虚拟机232。仍在又一个实施例中,控制程序220执行在被授权直接访问计算装置201上物理资源的虚拟机232中。\n[0151] 在一些实施例中,在第一计算装置201A(未示出)上的控制程序220A(未示出)可与在第二计算装置201B(未示出)上的控制程序220B(未示出)交换数据。在这些实施例中,第一计算装置201A可远离第二计算装置201B。控制程序220A-B可通过在第一计算装置201A上执行的管理程序202A(未示出)和在第二计算装置201B上执行的管理程序202B(未示出)之间的通信链路交换数据。通过这条通信链路,计算装置201A-B可交换关于处理器和资源池中其他可利用的物理资源的数据。而且通过管理程序202A-B之间的连接,管理程序202A-B可管理分布在一个或多个计算装置201A-B上的资源池,例如在第一计算装置\n201A和第二计算装置201B上的可利用资源。管理程序202A-B还可虚拟化这些资源并使它们对于在计算装置201A-B上执行的虚拟机232成为可利用的。在本实施例的又一情况下,单个管理程序202可管理和控制在两个计算装置201A-B上执行的虚拟机232。\n[0152] 在一些实施例中,控制程序220与一个或多个客户操作系统230A-B(总称为230)交互。控制程序220可通过管理程序202与客户操作系统230通信。通过管理程序202,客户操作系统230可请求访问物理盘204、物理处理器208、存储器216、物理设备206和硬件层210中的任何其他组件。仍在其他实施例中,客户操作系统230可通过由管理程序202建立的通信信道与控制程序220通信,诸如,例如通过由管理程序202使之可用的多个共享内存页。\n[0153] 在一些实施例中,控制程序220包括用于与计算装置201所提供的网络硬件直接通信的网络后端驱动程序。在这些实施例中的一个,网络后端驱动程序处理来自至少一个客户操作系统230的至少一个虚拟机请求。在其他实施例中,控制程序220包括用于与计算装置201上存储元件通信的块后端驱动程序。在这些实施例的一个,块后端驱动程序根据从客户操作系统230接收到的至少一个请求从存储元件中读数据和写数据。\n[0154] 在又一个实施例中,控制程序220包括工具堆栈224。在又一个实施例中,工具堆栈224提供用于与管理程序202交互、与其他控制程序220(例如,在第二计算装置201B上)通信或管理计算装置201上的虚拟机232的功能。在又一个实施例中,工具堆栈224包括用于向虚拟机群的管理员提供改善的管理功能的经定制的应用。在一些实施例中,工具堆栈224和控制程序220的至少一个包括提供接口的管理API,所述接口用于远程配置和控制在计算装置201上运行的虚拟机。在其他实施例中,控制程序220通过工具堆栈224与管理程序202通信。\n[0155] 在一个实施例中,管理程序202在由管理程序202创建的虚拟机232内执行客户操作系统230。在又一个实施例中,客户操作系统230向计算装置201的用户提供对计算环境中的资源的访问。仍在又一个实施例中,资源包括程序、应用、文档、文件、多个应用、多个文件、可执行程序文件、桌面环境、计算环境和对计算装置201的用户可用的其他资源。仍在又一个实施例中,资源可以通过多种访问方法传送到计算装置201,这些访问方法包括但不限于以下方法:传统直接在计算装置201上安装、通过应用流的方法传送到计算装置201上、将第二计算装置201’上资源的执行所产生的输出数据传送到计算装置201且通过表示层协议传达给计算装置201、将通过在第二计算装置201’上执行的虚拟机执行资源所产生的输出数据传送到计算装置201,或者从连接到计算装置201上的诸如USB设备的可移动存储设备上执行或通过在设备201上执行的虚拟机执行并且产生输出数据。在一些实施例中,计算装置201传输由资源的执行所产生的输出数据到另一个计算装置201’。\n[0156] 在一个实施例中,客户操作系统230与该客户操作系统230在其上执行的虚拟机结合在一起,形成意识不到其是虚拟机的完全虚拟化的虚拟机;这样的机器可被称为“Domain U HVM(硬件虚拟机)虚拟机”。在又一个实施例中,完全虚拟化机包括模拟基本输入/输出系统(BIOS)的软件以便在完全虚拟化机中执行操作系统。仍在又一个实施例中,完全虚拟化机可包括通过与管理程序202通信提供功能的驱动程序。在这样的实施例中,驱动程序典型地意识到自己执行在虚拟化的环境中。\n[0157] 在又一个实施例中,客户操作系统230与该客户操作系统230在其上所执行的虚拟机结合在一起,形成意识到其是虚拟机的超虚拟化(paravirtualized)的虚拟机;这样的机器可被称为“Domain U PV虚拟机”。在又一个实施例中,超虚拟化机包括完全虚拟化机中所不包含的额外的驱动程序。仍在又一个实施例中,超虚拟化机包括如上所述的被包含在控制程序220中的网络后端驱动程序和块驱动程序。\n[0158] 图2B中所示的是说明Type1管理程序202的虚拟化环境的又一个实施例。在计算装置201上执行的管理程序202可以直接访问硬件层210中的硬件和资源。由管理程序\n202管理的虚拟机232可以是不安全的虚拟机232B和/或安全的虚拟机232C。尽管图2A所描述的虚拟化环境中图示了宿主操作系统214,图2B中的虚拟化环境的实施例不执行宿主操作系统。\n[0159] 进一步参考图2B,更详细地,虚拟化环境包括Type1管理程序202。在一些实施例中Type1管理程序202执行在“裸金属”上,从而管理程序202可以直接访问计算装置201上执行的所有应用和进程、计算装置201上所有资源和计算装置201上所有硬件或与计算装置201通信的所有硬件。尽管Type2管理程序202通过宿主操作系统214访问系统资源,Type1管理程序202可直接访问所有系统资源。Type1管理程序202可直接执行在计算装置201的一个或多个物理处理器上,并且可包括存储在物理存储器216中的程序数据。\n[0160] 在采用Type1管理程序202配置的虚拟化环境中,宿主操作系统可被一个或多个虚拟机232所执行。这样计算装置201的用户可以指派一个或多个虚拟机232作为该用户的个人机器。这个虚拟机可通过允许用户以与用户通过宿主操作系统214与计算装置201交互的基本上相同方式来与计算装置201交互来模拟宿主操作系统。在一些实施例中,第一虚拟机可被称为控制虚拟机232A。在一些实施例中,控制虚拟机232A可执行控制程序\n220并可提供启动和管理一个或多个其他虚拟机232的能力。因而,在一些实施例中,控制虚拟机232A可被认为是域0或宿主域的部分。\n[0161] 虚拟机232可以是不可信虚拟机232B和可信虚拟机232C。可信虚拟机(有时也被称为安全的虚拟机)是响应提供认证凭证的用户而启动的虚拟机。在一个实施例中,可信虚拟机是当用户提供认证凭证时引导的磁盘上的加密映像。认证凭证可包括用户姓名、真实姓名、登录名、账户、密码、序列号、加密密钥或识别用户的任何其他信息项。在一些实施例中,可以响应于根据用户的授权数据库查验认证凭证而引导可信虚拟机。该数据库可被另一虚拟机、宿主虚拟机、管理程序或另一计算装置所寄载。例如在这样一个实施例中,用户可提供认证凭证到控制程序220以发起可信虚拟机的引导,并且控制程序220可建立与远程计算装置的网络通信以及发送认证凭证到该远程计算装置。远程计算装置可查验该凭证并使用关于用户是否被授权引导可信虚拟机的指示来进行响应。在多个实施例中,虚拟机是否被认为可信可以等同于引导虚拟机的用户是否有来自安全构件的许可来引导机器。\n[0162] 在一些实施例中,可信虚拟机可被认为是安全的虚拟机,因而这些术语可替换地使用。在一些实施例中,可基于虚拟机与在同一虚拟化环境中执行的其他虚拟机的比较来确定该虚拟机是否是安全的虚拟机。例如,如果第一虚拟机能够访问资源池且第二虚拟机不能够访问同样的资源池,当第一虚拟机被认为是可信虚拟机232A时第二虚拟机可被认为是不可信虚拟机232B。在一些实施例中,虚拟机323访问一个或多个系统资源的能力可使用由控制程序220或管理程序202产生的配置接口来配置。在其他实施例中,提供给虚拟机232的访问等级可以是查看下列标准的集合的任意的结果:访问虚拟机的用户、在虚拟机上执行的一个或多个应用、虚拟机标识符、基于一个或多个因素指派给虚拟机的风险等级或任何其他类似标准。例如,在一个实施例中,如果虚拟机的磁盘映像被加密或是只读映像、如果虚拟机的操作系统包括反病毒程序或主动式防火墙,或者任何其他标准,虚拟机可被认为安全或可信的。\n[0163] 在一些实施例中,不安全或不可信虚拟机232B可被阻止访问安全虚拟机232A可以访问的资源、硬件、存储单元和程序。例如可信虚拟机232C能够访问一个或多个公司资源,而不可信虚拟机232B不能访问任何公司资源。\n[0164] C.可信和不可信虚拟机之间的通信\n[0165] 在一些实施例中,计算装置可寄载多个虚拟机,包括可信和不可信虚拟机。例如,用户可在使用可信虚拟机访问企业网络的同时使用不可信虚拟机播放个人音乐文件。这样的功能可被分离以在仍然允许用户自由操作个人装置和应用的情况下保证企业网络的安全。虽然从安全角度出发这样的隔离是理想的,但在许多实施例中,不可信和可信虚拟机可能需要通信。例如,如果用户具有在第一虚拟机中打开的具有第一窗口的第一应用,以及在第二虚拟机中的具有第二窗口的第二应用,该用户可期待只有一个窗口具有焦点、接收鼠标和键盘输入,或在任何时刻居于Z轴顺序的首位。因此,两个虚拟机可能需要对这种焦点管理进行通信。\n[0166] 在安全的、公司特有的虚拟机和不安全的、个人虚拟机之间进行通信可能很困难。\n存在通过传统网络连接建立安全和不安全的虚拟机之间的通信的解决方案。这些解决方案可能对虚拟机造成安全风险,这是因为虚拟机时常需要被隔离在不同网段。\n[0167] 在一些实施例中,可将可信和不可信虚拟机之间的通信称为虚拟到虚拟或V2V技术。此机制可提供用于在管理程序下运行的特权域和非特权域之间的域间通信的系统。在一个实施例中,该机制包括提供可用于内核和用户模式两者的API(应用程序接口)。该API可存在于在管理程序下作为域运行的任何操作系统中,包括Windows和Linux,或者其他任何操作系统。\n[0168] 在一个实施例中,V2V API允许两个域或虚拟机建立通信通道。简要的说,该通道的一端作为侦听端点启动。接着,另一端点可连接到该侦听端点。一旦通道被建立,所述两个域能在通道上来回发送消息。当任一个端点被结束通信,它可以断开通道且释放相关的资源。\n[0169] 在一些实施例中,API的消息传递部分可能是允许任何数据块被发送或接收的底层程序。在一些实施例中,V2V不提供传输层语义或更高层的功能。因而,在一些实施例中且不同于使用网络接口在虚拟机之间进行通信,消息不需要使用地址或其他头部来封装。\n在其他实施例中,其他协议可被建立在V2VAPI之上以提供高层服务。\n[0170] 在一些实施例中,底层事件通道和共享存储器结构可在前端和后端半虚拟驱动对之间使用。在一些实施例中,V2V在这些驱动对上建立API使得这些驱动对通用且可重用。\nV2V是特别的,因为其提供基于底层管理程序功能的域间通信的方法。特别地,V2V使用Xen设施来共享域与域之间的存储页面以及允许域通过中断发送事件到其他域的功能。\n[0171] 因而在一些实施例中,这些系统和方法允许无需域间用于通信的传统网络连接的通信。这种传统网络连接可对域造成安全风险(例如,当域需要被隔离到不同网段时)。V2V使用、安全和访问控制也可被上述控制程序或控制程序工具堆栈中的部件所控制。尽管这里主要讨论关于具有不同安全或特权等级的虚拟机之间的通信,这些系统和方法可被用于两个不可信虚拟机之间、两个可信虚拟机之间、dom0或控制虚拟机和可信或不可信domU虚拟机之间,或任何其他虚拟机组合之间的通信。\n[0172] 现参考图3A,示出了用于在可信和不可信虚拟机之间通信的系统的一个实施例的框图。除上文结合图2A和2B讨论的特征之外,计算装置201可包含不可信虚拟机232B和可信虚拟机232C。计算装置201还可包含第三虚拟机232D。如下面将详细描述的,物理存储器216可包含由可信虚拟机232C保留的存储区域300。在一些实施例中,一个或多个虚拟机可执行通信代理(未示出),该通信代理可包含程序、应用、服务、守护进程、子例程、逻辑,或其他用于经由安全通道建立和通信的可执行指令。\n[0173] 现参考图3B,示出了用于在不可信虚拟机和可信虚拟机之间建立安全通信通道的方法的一个实施例的流程图。简要的说,诸如可信虚拟机的第一虚拟机或由第一虚拟机执行的通信代理,可在步骤320通过选择存储区域300到监控器将其自身建立为侦听端点。在步骤322,诸如不可信虚拟机的第二虚拟机可将数据字符串写到所选的区域。在步骤324,可信虚拟机可检测所选区域中的数据字符串。在步骤326,当允许可信虚拟机和不可信虚拟机读或写存储区域时,可信虚拟机可锁定存储器区域来排除第三虚拟机或者其他虚拟机读或写该存储区域。在步骤328,可信虚拟机可发送中断到不可信虚拟机。在步骤330,不可信虚拟机可以写数据到区域,随着通信的进行还可以从区域读数据。在步骤332,不可信虚拟机可发送中断到可信虚拟机。在步骤334,可信虚拟机可从区域读数据和/或写数据到区域。步骤328-334可重复直到通信完成。在步骤336,可信虚拟机可解锁存储区域,以允许第三虚拟机访问存储区域。\n[0174] 仍参考图3B以及更详细地,在一个实施例中虚拟机通过选择存储区域到监控器将其自身建立为通信端点。在一些实施例中,虚拟机可以是安全或可信虚拟机,然而在其他实施例中虚拟机可以是不安全的或不可信虚拟机。在一个实施例中,虚拟机可将其自身建立为侦听端点。在其他实施例中,虚拟机可将其自身建立为传输端点。在其他实施例中,虚拟机可将其自身建立为能够在通信通道上发送或接收数据的通信端点。\n[0175] 在一个实施例中,虚拟机能够响应于从另一虚拟机向该虚拟机传输数据的请求而将其自身建立为侦听端点。在一些实施例中,在步骤320,虚拟机通过选择物理存储器216的一组存储地址、一个或更多存储页面、或者另外部分作为用于侦听虚拟机和传输虚拟机的通用存储区域300,来将其自身建立为侦听端点。在其他实施例中,虚拟机可经由在虚拟机中执行的通信代理将其自身建立为侦听端点。该通信代理响应于指示器能够选择一个或更多存储单元并标记它们,或以其他方式将它们划分为由虚拟机以及任何与该虚拟机相连的传输端点专用的存储器。在一些实施例中,虚拟机可定期地针对新数据来监控存储区域,或者可以在新数据被写入存储区域时接收中断。\n[0176] 在一些实施例中,在步骤322,另一虚拟机连接到最初的虚拟机的侦听端点以创建通信通道。在一些实施例中,虚拟机在连接到最初的虚拟机的侦听端点时将其自身建立为传输端点。在一个实施例中,传输端点可通过将预定的数据字符串写到侦听端点选择的存储区域从而连接到侦听端点。这种预定字符串可包含传输端点或者想要将其自身建立为传输端点的虚拟机的标识符,以允许侦听端点排除其他虚拟机使用通信通道。在步骤324,此数据可被侦听端点检测到。在另一实施例中,其中存在其他不安全的通信路径,传输端点可使用这些通信路径中的一个发送消息到侦听端点,表明该传输端点希望与侦听端点建立安全的通信通路。在一些实施例中,传输端点上的通信代理发送消息到侦听端点上的通信代理,表明传输端点想要与侦听端点通信。在一些实施例中,传输到侦听端点的消息是可被侦听端点虚拟机接收和处理的中断。\n[0177] 在一些实施例中,在步骤326,一旦接收到传输端点想要和侦听端点通信的通知,虚拟机上的通信代理会标记保留的存储器使其只能被侦听端点和传输端点访问。在侦听端点和传输端点之间建立的通信通道可包括只能被侦听端点和传输端点访问的共享的存储页面或存储地址。在其他实施例中,通信通道可包括在传输端点和侦听端点之间的安全通信连接。在其他实施例中,此安全通信通道可包括编码、加密或以其他方式封装数据使得只有侦听端点能解码、解密或以其他方式解封(un-encapsulate)所传输的数据。\n[0178] 一旦在侦听端点和传输端点之间创建了通信通道,在一些实施例中在步骤328,该侦听端点可发送中断到传输端点以指示通信通道已建立且准备好安全传输数据。\n[0179] 在步骤330,传输端点可以将数据复制到共享存储页面。一旦将数据复制到共享存储页面,传输端点虚拟机可在步骤332发出中断到侦听虚拟机以指示该数据被复制到了共享存储器中。在一些实施例中,该中断可由通信代理发出。在其他实施例中,该中断可由物理装置或网卡发出。\n[0180] 一旦确定数据被复制到了共享存储页面,侦听端点在步骤334可以从共享存储页面检索被复制的数据。确定数据被复制到了共享存储页面可包括接收由传输虚拟机发出的中断,且该检索可以响应于该中断的接收而被执行。\n[0181] 在一些实施例中,所述方法可包括当数据被复制到共享存储页面时以及当传输虚拟机耗尽空间去发送更多数据时,发出中断到侦听虚拟机的传输虚拟机。在一些实施例中,侦听虚拟机接收该中断且以检索数据或分配额外的存储地址或存储页面到共享存储库的方式进行响应。一旦分配额外存储器到共享存储库,侦听虚拟机可向传输虚拟机发出中断,以表明额外存储器被增加到共享存储库。在一些实施例中,侦听虚拟机可通过从共享存储页面清除数据来释放空间以响应关于有限存储器的中断。\n[0182] 在一些实施例中,在通信持续期间步骤328-334可重复,其中端点写数据到共享存储区域或读取其他端点写入的数据。一旦通信事务或会话结束,在步骤336,在一些实施例中侦听端点可解锁存储区域使得第三虚拟机可访问该存储区域。在其他实施例中,传输端点可解锁该存储区域。在多个实施例中,在解锁存储区域之前,端点可首先擦除(wipe)存储区域或者写空(null)或随机数据到该区域以移除任何敏感信息。\n[0183] 通过上述方法,不同大小和内容的数据可在可信和不可信虚拟机之间传输,而其他虚拟机不能够拦截或以其他方式读取通信,而且也不是必须要求加密或封装。\n[0184] D.管理向虚拟化环境注入输入数据\n[0185] 在多个实施例中,安全虚拟机的安全性可被按键记录攻击所危及,在一些情况下按键记录攻击包括能够捕获输入装置动作的软件或装置。例如,这种软件能捕获用户操纵的键盘的按键。在包括可信和不可信虚拟机两者的虚拟化环境的情形下,如果不可信虚拟机中的应用可以监控以及记录可信虚拟机中的输入,可能会危及输入到可信虚拟机的输入数据。对于不可信虚拟机能够记录输入可信虚拟机的键盘输入的可能性给可信虚拟机造成的危险,几乎不存在减少该危险的任何解决方案。在缺少任何解决方案的情况下,这种危险会明显地削弱虚拟化环境中可信虚拟机的安全性,在某些情况下还可导致敏感的公司信息的泄露。\n[0186] 在一个方面,防止这种按键记录攻击的方法包括管理向虚拟化环境的输入数据注入。包括切换器的输入管理器接收输入事件和数据。这种输入事件和数据可包括由键盘和/或鼠标产生的那些事件和数据。输入管理器可确定是否要将那些事件输入到有效的虚拟机。在一些实施例中,输入管理器在连接到输入装置的计算装置上执行的控制程序的环境中执行。输入管理器可接收输入事件和/或输入数据,并且确定具有焦点的应用窗口是否是属于可信虚拟机的窗口或属于不可信虚拟机的窗口。在一些实施例中,输入管理器还确定输入数据是否对应于安全按键组合或者其他预定的按键组合。\n[0187] 当属于可信虚拟机的窗口接收焦点时,输入管理器的切换器被通知。因而,输入管理器基本上总是被通知关于可信窗口是否具有焦点。在多个实施例中,其中可信虚拟机窗口具有焦点且输入数据对应于预定的按键组合(例如ctrl+alt、ctrl+backspace、等等),输入管理器可将事件注入不可信虚拟机。在一些实施例中,其中可信虚拟机窗口不具有焦点,基本上所有输入事件和/或数据可被注入不可信虚拟机窗口。在其他实施例中,其中输入数据对应于安全按键或输入组合,输入管理器可拦截输入数据,输入至少该数据的部分到安全按键框,且映射键盘到可信虚拟机。\n[0188] 在一些实施例中,当用户在可信虚拟机的环境中操作时,控制程序可引发LED或其他视觉指示器闪光。在这些实施例中,因为每当可信窗口接收到焦点或者失去焦点时输入管理器的切换器即被通知,所以控制程序知道何时用户正在可信虚拟机的环境中操作。\n[0189] 简要参考图4A,示出了用于管理向虚拟化环境注入输入数据的系统实施例的框图。除上文结合图2A和2B讨论的特征之外,计算装置201可包含输入管理器400。输入管理器400可由控制或宿主虚拟机232A执行,或者可以是被管理程序或执行管理程序的操作系统执行的输入管理器400'。因此,输入管理器400或400'(统称为输入管理器400)可以是应用、程序、服务、守护进程、逻辑或其他执行在可信域或dom0中用于管理向虚拟化环境注入输入数据的可执行代码。\n[0190] 计算装置201还可包括或连接到一个或更多输入装置402。输入装置402可包括键盘、鼠标、触摸屏、绘图板、操纵杆、游戏手柄、控制面板、开关面板、生物传感器,或任何其他类型和形式的输入装置。在一些实施例中,输入装置402可包括能够向用户提供指示的输出装备。例如,包含键盘的输入装置402可包括一个或多个LED 410。这种输出装置410可由软件控制来闪烁、闪光、点亮、蜂鸣、膨胀、振动,或以其他方式向用户提供视觉、听觉或触觉指示,该指示表明可信虚拟机当前正在接收来自输入装置402的输入数据408,这与不可信虚拟机刚好相反。输入数据408可包括来自输入装置402的任何类型和形式的输入,例如字母数字串数据、按键组合、点击、按键激励、模拟或数字值,或任何其他输入。在输入装置402是键盘的多个实施例中,输入数据408可包含连续或者同时按下的一个或多个按键的数据字符串。在一些实施例中,输入数据408可包含预定的数据字符串。在一个实施例中,该预定的数据字符串可包括通常用于操作系统的按键组合,例如alt+tab、control+backspace,或任何其他类似组合。在另一实施例中,该预定的数据字符串可包括预定的控制字符串。该控制字符串可用于触发由域0实体产生的安全输入框的创建和聚焦,域0实体例如是管理程序或控制虚拟机。\n[0191] 计算装置201可包括包含有不可信虚拟机232B和可信虚拟机232C的多个虚拟机\n232。每个虚拟机可执行应用404a和404b(统称为应用404),且每个应用可分别产生一个或多个窗口406a和406b(统称为窗口406)。窗口406可具有焦点,或当前被选为接收输入。在这种情况下,该窗口可被称为具有焦点。类似地,产生了该窗口的应用可被称为具有焦点。同样地,执行该应用的可信或不可信虚拟机可被称为具有焦点。\n[0192] 现参考图4B,示出了用于管理向虚拟化环境注入输入数据的方法420的实施例的流程图。简单的说,在步骤422,输入管理器可接收输入数据的第一项。输入数据可包含数据的单个项,或可包含数据字符串或数据组合,例如按键组合。在步骤424,输入管理器可确定输入数据是否包括预定字符串。如上所述,可预先确定多个数据字符串,例如用于触发安全按键输入框的产生的控制字符串,以及用于在多个有效应用之间进行切换的操作系统使用的命令。因而,在这样的实施例中,在步骤426,如果输入数据包括预定字符串,则输入管理器可确定该字符串是否是控制字符串。如果是控制字符串,在步骤430,控制字符串可被转发到控制程序,或者输入装置可被映射到控制程序使得控制程序接收以后的输入数据。\n[0193] 如果输入数据包括预定字符串但其不是控制字符串,那么在步骤428,输入管理器可确定由执行在可信虚拟机上的应用产生的窗口是否具有焦点。如果没有焦点,则在步骤\n432,输入数据可被转发到可信虚拟机、窗口或应用,或者输入装置可被映射到可信虚拟机使得该可信虚拟接收以后的输入数据。可信虚拟机的窗口也可被给予焦点。在步骤428,如果可信虚拟机的窗口不具有焦点,则在步骤434,输入数据可被转发到不可信虚拟机、窗口或应用,或者输入装置可被映射到不可信虚拟机使得该不可信虚拟机接收以后的输入数据。不可信虚拟机的窗口也可被给予焦点。\n[0194] 在步骤424,如果输入管理器确定了输入数据不包括预定字符串,则在步骤428',输入管理器可确定由在可信虚拟机上执行的应用所产生的窗口是否具有焦点。如果具有焦点,则在步骤432,输入数据可被转发到可信虚拟机、窗口或应用,或者输入装置可被映射到可信虚拟机使得该可信虚拟接收以后的输入数据。可信虚拟机的窗口也可被给予焦点。在步骤428',如果可信虚拟机的窗口没有焦点,则在步骤434,输入数据可被转发到不可信虚拟机、窗口或应用,或者输入装置可被映射到不可信虚拟机使得该不可信虚拟机接收以后的输入数据。不可信虚拟机的窗口也可被给予焦点。\n[0195] 因而,在图4B示出的方法420的实施例中,使用两个触发器来确定可信虚拟机是否接收输入数据。首先,如果输入数据不包括预定字符串,那么根据可信虚拟机和不可信虚拟机中的哪个具有焦点,将输入数据传送到可信或不可信虚拟机。这允许用户例如继续在应用窗口中输入。然而,如果输入数据包括预定字符串,那么输入可被转发或者输入装置可被重新映射到其他虚拟机,即当前不具有焦点的虚拟机。这允许用户使用切换器按键组合来例如切换输入到可信和安全的虚拟机。该行为概括在图4C所示的图表中。\n[0196] 此外,如果输入数据包括预定的控制字符串,那么输入数据可被转发或者输入装置被重新映射到控制程序。这就允许用户按下特定的按键组合来进入例如独立于可信虚拟机和不可信虚拟机并且由诸如管理程序或控制虚拟机之类的dom0实体寄载的管理控制台。在又一个实施例中,控制字符串可被用于允许用户从不可信虚拟机切换到可信虚拟机。\n为确保虚拟机保持可信,控制字符串可引发dom0实体创建认证窗口。用户可输入密码或其他认证凭证,其可以由dom0实体查验。一旦用户被认证,输入管理器可将输入装置映射到可信虚拟机。因而,控制字符串可用于密码保护的虚拟机焦点切换器。\n[0197] 仍参考图4B且更详细地,在一个实施例中在步骤422,输入管理器可接收来自输入装置的输入数据。在一些实施例中,该输入装置可以是任何输入装置。在其他实施例中,该输入装置可以是键盘和/或鼠标。在一些实施例中,输入数据可被在硬件层210中的在计算装置201上执行的驱动(driver)所接收。在一个实施例中,一旦接受到输入数据,该驱动能够转发输入数据的格式化版本到在计算装置201上执行的控制程序220。在一些实施例中,输入管理器在控制程序220中执行,使得当控制程序接收输入数据时,输入管理器也接收该输入数据。\n[0198] 在一些实施例中,在步骤424,输入管理器可确定输入数据是否包含一个或多个预定的序列或数据字符串。当输入数据由键盘产生时,该一个或多个预定的序列可包括一个或多个击键(keystroke)。例如,预定的序列可包括:CTRL+ALT、CTRL+DELETE、CTRL+BACKSPACE、CTRL+ALT+BACKSPACE。在一些实施例中,预定序列可对应于操作系统特定按键组合。当接收到这种组合时,输入管理器可转发键盘组合到在计算装置201上执行的不可信虚拟机。在一些实施例中,预定序列可对应于安全按键组合。当接收到这种组合时,输入管理器可响应地将该键盘映射到可信虚拟机。\n[0199] 在一些实施例中,输入管理器可确定可信虚拟机是否具有焦点。当可信虚拟机接收焦点时,改变焦点事件可被转发到输入管理器,因而输入管理器实际上始终知道安全虚拟机的窗口是否具有焦点。在一些实施例中,当可信虚拟机的窗口具有焦点时,控制程序\n220可引发LED或者其他视觉、听觉或触觉指示器来发光、打开,或以其他方式激活。当可信虚拟机不具有焦点时,输入管理器可向不可信虚拟机注入所有输入数据和事件。在其他实施例中,当可信虚拟机具有焦点时,输入管理器可向可信虚拟机注入所有输入数据和事件。\n在其他实施例中,当键盘或输入装置被映射到可信虚拟机时,输入管理器可确保当所有操作系统特定按键按下被插入到可信虚拟机中时,所有的字母数字按键按下被插入可信虚拟机。\n[0200] 在一个实施例中,输入管理器可根据哪种虚拟机(例如,可信或不可信)具有焦点以及输入是否包含预定序列,来将输入数据(例如,按键按下等)输入到可信虚拟机或不可信虚拟机中。\n[0201] 因而,在多个实施例中,方法420可确定来自物理装置的按键事件被定向到哪里。\n在这种实施例的一个示例中,用户可按下键盘上的按键或移动鼠标。该事件可在驱动层被由dom0实体执行的控制程序所接收。在一个实施例中,该事件可被转发到输入管理器或由输入管理器接收。在一些实施例中,输入管理器可包含动态翻译器,例如Fabrice Bellard创建的QEMU。在进一步的实施例中,动态翻译器可被提供给每个可信或不可信虚拟机。如果可信虚拟机的窗口具有焦点,那么可信虚拟机的翻译器可允许事件被注入到可信虚拟机。\n然而,如果事件是特定的按键组合,那么输入事件可被注入到不可信虚拟机。如果可信虚拟机的窗口不具有焦点,那么事件可被注入到不可信虚拟机。然而在一个实施例中,如果事件是安全的按键组合,那么如上所述,输入管理器可将按键事件指向安全按键或dom0实体产生的密码输入框。\n[0202] 在多个实施例中,当用户在窗口上点击以给予可信窗口焦点时,该变化可被通知到输入切换器。在进一步的实施例中,当用户在另一窗口上点击时,该输入切换器可被通知可信窗口已经失去焦点。在其他实施例中,输入管理器可定期地要求具有焦点的窗口的识别。\n[0203] E.通过虚拟固件,服务响应于硬件的激励(actuation)而产生的中断\n[0204] 硬件装置,甚至诸如键盘的相对标准的硬件装置,经常会包括诸如媒体控制按钮的额外特征。类似地,如便携式电脑的集成系统可包括额外的键盘按键、旋钮、转盘(dial)、按钮或其他特征。为允许设备制造商提供这些额外特征,诸如微软的操作系统制造商已提供驱动扩展以允许这些设备能提供部件的信息和通知。例如,Windows管理体系结构(WMI)是对Windows驱动模式的一组扩展,设备制造商可使用该扩展提供信息和事件通知到操作系统。例如,设备制造商可向固件提供描述所增加的功能和对象以及用于控制该功能或与该功能交互的方法的表格。例如,当用户按下键盘上的按键时,键盘固件产生中断,该中断通常被Windows WMI层捕获,随后Windows WMI层指示操作系统检索描述性表格以确定该按键想要触发什么。\n[0205] 然而,虚拟化环境给想要增加这些特征的制造商带来额外的困难。由于管理程序位于虚拟机和硬件层之间,通知可能不会被适当地转发到一个或更多虚拟机。寄载的客户操作系统也许不能从制造商提供的固件检索该表格,或者甚至不知道其存在。此外,如果没有明显地修改操作系统,该表格不能简单地被检索以及被传送到客户操作系统,因为当所述中断由硬件装置产生时,通常期望仅接收与中断关联的对象和方法。\n[0206] 在用于服务响应于硬件的激励而产生的中断的系统的实施例中,虚拟固件可被用于在装置固件和寄载的操作系统或系统之间来回传递请求。诸如管理程序或控制虚拟机之类的dom0实体可直接访问计算装置的硬件。因此,当用户按下按键且固件产生中断时,dom0实体可以捕获该中断。dom0实体可转发该中断到客户虚拟机的虚拟固件,该虚拟固件可转发该中断到客户操作系统,就好像其是最初的硬件装置。\n[0207] 响应于从虚拟固件接收该中断,客户操作系统可发送对与该中断关联的对象和方法的请求到虚拟固件。虚拟固件可转发该请求到dom0实体,该实体可转发该请求到硬件装置的固件。\n[0208] 硬件装置的固件可从存储器检索与中断关联的对象和方法,例如高级配置与电源接口(ACPI)表,且转发这些对象和方法到dom0实体。dom0实体可转发该对象和方法到虚拟固件,其可以响应于来自客户操作系统的请求,提供关于如何利用硬件功能的信息。\n[0209] 现参考图5A,示出了通过虚拟固件,用于服务响应于硬件的激励而产生的中断的系统的实施例的框图。除上述的特征,计算装置201可连接到输入装置或装置500或者与输入装置或装置500通信。在多个实施例中,输入装置500可以是上述输入装置402,或本文描述的任何其他输入装置。输入装置500可经由硬件驱动与计算装置201通信,该硬件驱动能够从装置接收原始数据,并且将该原始数据解释为命令和数据,该命令和数据能被操作机器或控制程序220解释。\n[0210] 计算装置可包括从输入装置500检索或下载固件502和/或可执行固件502。在一些实施例中,在计算装置201上,或更具体地,在计算装置201中的处理器208上执行的固件212可包括高级配置与电源接口(ACPI)层504A。ACPI层504A可以是提供一个或多个方法、对象以及其他用于计算装置201中的装置的管理规范和配置的层。ACPI层504A可进一步包括用于管理计算装置201中电源的对象、方法和规范。在一些实施例中,ACPI层\n504A可具有对在计算装置201中的电源管理的所有方面的排他控制,且还可以配置计算装置201中的装置。在一些实施例中,ACPI层504A可包括列举一个或多个操作状态的ACPI规范。这些操作状态可描述系统配置,诸如:计算装置201中的哪个装置应该接受电力、应该发送多少电力到计算装置201中的装置、是否配置计算装置201中的装置来终止或启动一个或多个服务或处理,以及其他此类配置。\n[0211] 在一个实施例中,ACPI层504A可包括多个表格,所述多个表格包括了用于连接固件502和请求关于装置或由装置产生的中断的信息的操作系统的对象和方法。例如,如果装置连接到或者包含在计算装置201中以产生中断,操作系统、控制程序220或其他在计算装置201上执行的程序可查询ACPI层504A的表以获得关于装置的信息以及因此关于中断的信息。该信息可从固件502擦去或从固件502获得,并且该信息可包括与装置关联的对象或方法。\n[0212] 在一些实施例中,固件502可包括关于包含在计算装置201中的每个装置的对象和方法。例如,固件502可包括用于键盘的对象,该键盘具有其特定的装置ID。在这个示例中,固件502中的键盘对象还可具有特定于该键盘的方法。这些方法可包括用于接收来自键盘的输入的功能和进程,以及用于向键盘发送命令的功能和进程。在一些实施例中,通过充当固件502和操作系统或程序之间的接口,ACPI层504A允许操作系统、控制程序以及其他应用和进程能够访问固件502中的该键盘对象,以及允许进一步访问固件502中的键盘方法。\n[0213] 正如计算装置201可包括固件502,在计算装置201上执行的虚拟机232也可包括该固件。在一个实施例中,在计算装置201上执行的一个或更多虚拟机232中的每个都可包括虚拟固件503。虚拟固件503可以是在计算装置201上执行的固件502的虚拟化视图。在一个实施例中,通过分析计算装置201上的固件502中的装置对象以及将其列举到虚拟固件503中的表中,控制程序202可产生虚拟固件503。在一些实施例中,控制程序220可响应于生命周期事件产生虚拟固件503,其中生命周期事件诸如:控制程序220的启动、虚拟机232的启动、虚拟机232的迁移、控制程序220的关闭、虚拟机232的关闭、计算装置\n201的启动,或者任何其他类似的生命周期事件。在一些实施例中,虚拟固件503中包括的表与固件502中的表相似,因为其列举了固件502管理的每个装置以及该装置的标识符。\n[0214] 在一些实施例中,虚拟固件503可以包括虚拟ACPI层504B。在一些实施例中,虚拟ACPI层504B可大体类似于计算装置201的ACPI层504A的运行而运行,因为虚拟ACPI层504B可充当在虚拟机232上的客户操作系统230、控制程序220和其他应用、以及虚拟固件503之间的接口。\n[0215] 在其他实施例中,在虚拟机232中执行的客户操作系统230、控制程序220和其他应用或服务可包括管理接口506A-B(统称为管理接口506)。在一些实施例中,该管理接口\n506可以是直接连接到固件中的ACPI层以接收关于装置的信息的窗口管理接口。在一个实施例中,管理接口506B可直接连接到虚拟ACPI层504B以获得关联或分配到固件502中的装置的对象信息和方法。例如,管理接口506B可与虚拟ACPI层504B通信以获得关于当用户激励键盘上的按键时产生的键盘中断的信息。\n[0216] 现参考图5B,示出了用于通过虚拟固件来服务响应于硬件的激励而产生的中断的方法的流程图。在一个实施例中,计算装置201的固件(可称为与虚拟固件相反的物理固件)可在步骤520接收来自硬件的中断,并转发该中断到控制程序220。控制程序220可随后注入或转发该中断到在虚拟机232上执行的虚拟固件。一旦收到该中断,虚拟固件可转发该中断到虚拟机的操作系统。\n[0217] 在步骤522,客户虚拟机的操作系统可从虚拟固件接收该中断。在步骤524,响应于接收该中断,操作系统可产生对与该中断关联的对象和方法的请求,且可传送这个请求到虚拟固件。虚拟固件可转发该请求到控制程序,控制程序可转发该请求到物理固件。\n[0218] 在步骤526,响应于接收该请求,物理固件可从ACPI表提取与该中断关联的对象和方法。物理固件可传送所提取的对象和方法到控制程序,该控制程序可转发它们到虚拟固件。虚拟固件可转发该对象和方法到客户虚拟机的操作系统。在步骤528中,客户操作系统可从虚拟固件接收所请求的对象和方法,该虚拟固件允许客户操作系统与硬件装置适当地交互。\n[0219] 进一步参考图5B且更详细地,在一个实施例中,计算装置201的固件可在步骤520接收中断且转发该终端到控制程序220。在一些实施例中,计算装置201的固件帮助转发该中断到控制程序220。在一些实施例中,可以响应于键盘上按键的激励或响应于一些其他的输入事件而产生中断。例如,中断可响应于如下事件而产生:键盘上按键的激励、键盘上转盘的旋转、触碰键盘上的触摸板、敲击鼠标按钮、移动鼠标,或任何其他输入事件。\n[0220] 一旦接收到中断,控制程序220可向虚拟机上的虚拟固件注入中断。在一些实施例中,注入中断到虚拟固件可包括提供中断到虚拟固件使得该虚拟固件可接收中断,其接收方式与计算装置201的固件接收中断的方式相同。因而,虚拟固件可帮助转发中断到在虚拟机232中执行的操作系统230。\n[0221] 在一些实施例中,虚拟固件转发中断到虚拟机232的操作系统230。转发中断到虚拟机232的操作系统230可包括转发该中断到虚拟机232的管理接口。管理接口可根据窗口管理接口规范来执行,且可直接连接虚拟固件的ACPI层。\n[0222] 在步骤522,在一些实施例中,虚拟机232的操作系统230可从虚拟固件接收中断。\n在步骤524,响应于接收该中断,操作系统可发出对与中断关联的对象和方法的请求到虚拟固件。虚拟固件继而可转发该操作系统的请求到控制程序220,控制程序220接收该请求且发出该请求到计算装置201的固件。在一些实施例中,发出请求到计算装置201的固件可包括发出对与中断关联的对象和方法的请求到固件的ACPI层。在其他实施例中,发出请求到虚拟固件可包括发出对与中断关联的对象和方法的请求到虚拟固件的ACPI层。在多个实施例中,发出对于对象和方法的请求可包括发出对与产生中断的装置关联的对象和方法的请求。例如,操作系统230可请求与键盘(且在一些实施例中,与被激励的按键)关联的对象和方法。\n[0223] 在步骤526,响应于接收对与中断关联的对象和方法的请求,计算装置201的固件的ACPI层可返回与产生中断的装置和/或中断关联的对象和方法到请求程序(例如控制程序220)。控制程序220可接收关联的对象和方法,并且可转发这些对象和方法到虚拟机232的虚拟固件。虚拟固件的ACPI层可通过将所接收的对象和方法返回到操作系统的管理接口,来响应操作系统的请求。在步骤528,操作系统230的管理接口可接收与中断关联的对象和方法并处理它们。\n[0224] 因而,操作系统230可使用所接收的对象和方法将虚拟固件看做输入装置的固件来与其交互,且虚拟固件和控制程序一起可形成用于从操作系统传送中断和请求到物理固件的通信链。\n[0225] F.向可信虚拟机或不可信虚拟机分配通用串行总线(USB)装置\n[0226] 如上所述,在虚拟化环境的多个实施例中,用户可同时使用可信虚拟机和不可信虚拟机。关于诸如接收即插即用和其他装置之类的低级别功能,在两个虚拟环境中执行的操作系统通常不对此进行通信。因而,在某些情况下,其中控制程序必须确定哪个虚拟环境接收对连接到计算装置的通用串行总线(USB)装置的访问,该USB装置例如是USB拇指驱动器、网络摄像头、图形接口或其他USB装置。在很多情况下,这种确定可包括确定虚拟化环境可具有的对于USB装置的访问级别。如果没有策略或其他指示表明哪个虚拟机接收对USB装置的访问,则当应用正在写数据到磁盘(disk)或者当应用需要持续地从磁盘读数据以完成事务处理时,可能会出现问题。\n[0227] 现参考图6A,示出了用于向可信虚拟机或不可信虚拟机分配USB装置的系统的实施例的框图。USB装置是即插即用装置且因而通常可包括固件和ACPI表。因此,上述的关于通过虚拟固件服务中断应被认为与这部分也相关,且每个虚拟机可包含虚拟固件和ACPI表。计算装置201可通过USB端口602连接到USB装置600或与其通信。USB装置可具有一个或更多属性604,诸如序号、装备类型、存在加密,或其他特征。\n[0228] 在一些实施例中,控制程序220可包括或可访问存储在计算装置201上的位于控制程序220可访问的存储单元或存储库中的一组安全策略606。在一些实施例中,安全策略\n606可被存储在计算装置201上的数据库中。在一些实施例中,安全策略606可以是被下列各项使用的一组策略:控制程序220、控制虚拟机232A或管理程序202的策略引擎,或用于确定下面任何一个的任何其他程序:虚拟机323是否可以访问一个或多个存储单元、装置、处理器或磁盘;用户是否可以访问一个或多个存储单元、装置、处理器或磁盘;装置对一个或多个虚拟机232是否应该可用;在虚拟机232中执行的应用所产生的一个或多个命令是否应被转发到计算装置201上的装置;以及虚拟机232中执行的应用所产生的一个或多个请求是否应被转发到计算装置201上的装置。\n[0229] 策略引擎可包括用于使用安全策略606来确定一个或多个动作是否被允许的代理、服务、程序、应用、例程、逻辑或其他可执行代码。在一些实施例中,策略引擎可以替代在控制程序220的环境中执行的其他程序进行操作。在其他实施例中,策略引擎可结合其他程序进行操作。\n[0230] 图6B示出了用于分配USB装置到至少一个虚拟机的方法620的实施例的流程图。\n在步骤622,在一些实施例中,在虚拟化环境中的计算装置上执行的控制程序可接收指示装置被插入到了计算装置的USB端口的数据。在步骤624,控制程序可识别装置的一个或多个属性。在进一步的实施例中,控制程序可以响应于对于一个或多个被识别的属性的一个或多个安全策略的应用来识别装置的安全级别。在步骤626,控制程序可从多个虚拟机中选择虚拟机,且在步骤628可准许所选的虚拟机访问装置或映射该装置到所选的虚拟机。\n[0231] 仍参考图6B且更详细地,在步骤622的一个实施例中,控制程序可接收指示装置被插入到了计算装置的USB端口的数据。在一些实施例中,接收指示装置被插入到了USB端口的数据可包括接收响应于装置正被插入USB端口而产生的中断。如上文结合图5A-5B所讨论的,该中断可被固件服务并被转发到控制程序。在其他实施例中,该数据可包括由控制程序或在控制虚拟机上执行的操作系统产生的即插即用事件通知。\n[0232] 在一些实施例中,在步骤624,控制程序可识别装置的一个或多个属性。识别装置的属性可包括查询USB端口来获得关于装置的信息。该信息可包括如下的任一个:序号、装置标识符、装置类型、装置的装置驱动器、装置上存在加密数据,或装置上的数据被锁定或只读。在一些实施例中,控制程序可查询USB端口来获得关于装置的信息。USB端口继而向控制程序发送装置信息,其中控制程序可识别装置的相关属性。\n[0233] 在进一步的实施例中,控制程序可识别装置的安全级别。识别装置的安全级别可包括使用装置的序号或装置的装置类型来向安全策略询问该装置的安全级别。该安全策略可指示该装置是否应被允许被传入在计算装置201上执行的一个或多个虚拟机。\n[0234] 基于装置属性的识别和/或装置的安全级别的识别,控制程序可确定哪个虚拟机应接收该装置。一旦做出确定,在步骤626,控制程序可从在计算装置上执行的一个或多个虚拟机中选择所确定的虚拟机。在一些实施例中,控制程序可引用列出一个或多个装置标识符或装置类型以及可以接收这些装置的虚拟机的表。在其他实施例中,控制程序可默认传送该装置到有效的虚拟机。例如,如果虚拟机中的应用当前具有焦点或当前正在执行,控制程序可默认选择那个虚拟机。\n[0235] 在一些实施例中,在步骤628,控制程序可准许所选的虚拟机访问该装置和/或映射该装置到所选的虚拟机。准许访问该装置可包括传送该装置到所选的虚拟机。在其他实施例中,准许访问该装置可包括更新所选虚拟机的可用物理资源的虚拟化视图以包括该装置。\n[0236] 上述技术的一个优势在于,由于虚拟机对USB装置的访问是由虚拟机外的实体(该实体也就是控制程序220)来决定的,因此可在虚拟硬件驱动器之下的等级将安全策略应用到该虚拟机的访问。这样可以在仍允许访问USB装置的情况下隔绝安全漏洞,该安全漏洞通常只能通过禁用USB装置来解决。例如,如果USB拇指驱动器具有隐藏其上的隐匿程序且其设置为自动地执行,则通常,向虚拟机准许对USB驱动器的访问将允许该隐匿程序执行。虽然虚拟机的操作系统可包括抵御这种入侵的防御手段,但这些防御手段通常在USB驱动器之上的软件级操作,因而无法阻止所有的此类攻击。此外,由于防御手段执行在作为隐匿程序攻击对象的操作系统上,隐藏程序可对这些防御手段施以对策。\n[0237] 相反地,在上述的方法和系统中,在执行在访问USB驱动器的虚拟机和操作系统的外部的情况下,位于控制虚拟机或管理程序上的控制程序220监控和控制对USB驱动器的访问。因而,执行控制程序220的操作系统不是隐匿程序攻击的对象且可以不受隐匿程序的影响。此外,控制程序220可在硬件级别控制虚拟机对USB驱动器的访问。\n[0238] 现参考图6C,示出了用于控制虚拟机访问与USB端口通信的装置的方法640的实施例的流程图。简单的说,在步骤642,控制程序220可拦截由可访问装置的虚拟机发出的到该装置的读/写请求。例如,使用上述方法620,虚拟机可以已经被准许访问该装置。在步骤644,控制程序220可确定所请求的动作是否被允许,以及在步骤646,一旦确定所请求的动作是被允许的,可转发读/写请求到该装置。\n[0239] 仍参考图6C且更详细地,在步骤642,在一个实施例中控制程序可拦截发出到该装置的读/写请求。在一些实施例中,读/写请求可由在虚拟机上执行的客户操作系统产生。在其他实施例中,读/写请求可由在虚拟机上执行的应用产生。控制程序可拦截所有由虚拟机发出的到该装置的读/写请求。在一些实施例中,控制程序还可拦截所有发出到该装置的命令,包括弹出命令(ejection command)、打印命令等。\n[0240] 在步骤644,控制程序可确定所请求的动作是否被允许。在一些实施例中,可通过查询安全策略做出这种确定。使用装置属性和虚拟机的标识符,控制程序可查询安全策略以确定所请求的动作是否被允许。例如,控制程序可使用请求虚拟机是可信虚拟机的事实、装置是存储装置的事实,以及所请求的动作是请求写数据到存储装置的事实来确定写操作是否应被允许。在本示例中,安全策略可指示可信虚拟机不应被允许写数据到外部存储装置,从而防止敏感信息被盗。\n[0241] 基于该指示,控制程序可确定所请求的动作不被允许。在一些实施例中,控制程序可返回指示所请求的动作不被允许的出错信息到请求应用或虚拟机。在其他实施例中,控制程序可确定所请求的操作被允许。因此,在步骤646,控制程序可转发该请求到USB装置。\n[0242] G.控制虚拟机访问光盘驱动器\n[0243] 管理多个虚拟机对诸如拇指驱动器的USB装置的访问,其中装置每次可被映射到单个虚拟机,或管理对内部硬盘驱动器的访问,其中不同分区每次可被映射到单个虚拟机,可以相对比较简单由于这种一一映射,尽管如上所述确定哪个虚拟机可访问装置可以更复杂。类似的映射可用于控制对光盘驱动器的访问,其中用户通过控制程序明确地将光盘驱动器映射到虚拟机。如果用户希望使用第二虚拟机读CD,该用户必须明确地映射光盘驱动器到第二虚拟机,实质上是“安装”该光盘驱动器作为新装置。这样会增加不希望的复杂度,特别当用户正在多个虚拟机之间来回切换时。\n[0244] 很多情况下,最好多个虚拟机中的每一个表现为好像它们同时能够访问光盘驱动器,这消除了用户手动地来回切换访问驱动器的需要。用于准许虚拟机独占访问光盘驱动器的解决方案的一个实施例可响应于确定该虚拟机发起与光盘驱动器的事务而被执行。在计算装置上执行的驱动管理器可获得由连接到计算装置的光盘驱动器产生的事务流(transaction stream)。驱动管理器可将该事务流转换为命令流。基于对该命令流的分析,驱动管理器可确定多个虚拟机的哪个虚拟机发起了与光盘驱动器的事务。响应于该确定,驱动管理器可锁定光盘驱动器以准许该虚拟机对该光盘驱动器的独占访问。在一个实施例中,驱动管理器可在锁定光盘驱动器后确定虚拟机停止与光盘驱动器的事务。响应于该确定,驱动管理器可解锁该光盘驱动器。\n[0245] 现参考图7A,示出了用于控制虚拟机访问光盘驱动器的系统的实施例的框图。除了本文讨论的其他特征,计算装置还可包括光盘驱动器700。在一些实施例中,控制程序\n220可包括驱动管理器702。尽管示出为在控制虚拟机上,但在多个实施例中,控制程序220可在管理程序202上执行。管理程序202可寄载多个客户虚拟机232B-232C,且每个客户虚拟机可包括虚拟光盘驱动器704A-704B(统称为虚拟光盘驱动器704)。\n[0246] 仍参考图7A且更详细地,在一些实施例中,硬件层210可包括光盘驱动器700。该光盘驱动器700可以是任何光盘驱动器,然而在其他实施例中该光盘驱动器700可以是本文描述的任何盘驱动器。在一些实施例中,光盘驱动器700可以是DVD驱动器、DVD-R或DVD-RW驱动器、CD驱动器、CD R/W驱动器、蓝光驱动器或任何其他盘驱动器。尽管图3B示出了光盘驱动器700,但在一些实施例中盘驱动器可以是磁盘驱动器,诸如软盘驱动器、ZIP驱动器、磁带驱动器,或任何其他磁盘驱动器。\n[0247] 在一些实施例中,虚拟机232可包括一个或多个虚拟光盘驱动器704A-704B(统称光盘驱动器704)。在一些实施例中,这些虚拟光盘驱动器704可以是计算装置201上的物理盘驱动器700的虚拟化视图。在虚拟机232上执行的客户操作系统230可与虚拟盘驱动器704交互,其方式与客户操作系统230与物理盘驱动器700的交互方式大致相同。在多个实施例中,不同于传统的手动重映射光盘驱动器到虚拟机,这些虚拟盘驱动器704对于每个客户操作系统230看上去同时可访问。因而,客户操作系统230可发出读和写命令到虚拟盘驱动器704。在一些实施例中,在控制程序220的环境中执行的驱动管理器702可以拦截这些读/写命令并且可以将它们发送到物理盘驱动器700。\n[0248] 在一些实施例中,驱动管理器702可在控制程序220中执行。在一些实施例中,驱动管理器702可拦截由在虚拟机232中执行的应用发出的读/写请求,并确定是否传送这些读/写请求到硬件层210中的光盘驱动器700。驱动管理器702还可从盘驱动器700接收事务流,并且从该事务流可知道盘驱动器700的当前动作。在一些实施例中,驱动管理器\n702可将该事务流转换为命令流并分析所产生的命令流。通过这种分析,驱动管理器702可确定该盘驱动器700是否正在从盘读、向盘写、弹出盘、接收盘、空闲等。因而驱动管理器\n700可从事务流知道该盘驱动器的状态。\n[0249] 在一个实施例中,一组安全策略706可存储在计算装置201上并位于控制程序220可访问的存储单元或存储库中。在一些实施例中,安全策略706可被存储在计算装置201上的数据库中。在一些实施例中且与上述安全策略606相似,安全策略706可以是由下列各项使用的一组策略:控制程序220、策略引擎,或用于确定下面任何一个的任何其他程序:\n虚拟机323是否可以访问一个或多个存储单元、装置、处理器或盘;用户是否可以访问一个或多个存储单元、装置、处理器或盘;装置对一个或多个虚拟机232是否应该可用;在虚拟机232中执行的应用所产生的一个或多个命令是否应被转发到计算装置201上的装置;以及虚拟机232中执行的应用所产生的一个或多个请求是否应被转发到计算装置201上的装置。\n[0250] 类似地,在一些实施例中,在计算装置201上执行的策略引擎可使用安全策略606来确定一个或多个动作是否被允许。在一些实施例中,策略引擎606可以替代在控制程序\n220的环境中执行的其他程序进行操作。在其他实施例中,策略引擎可结合其他程序进行操作。\n[0251] 图7B示出了用于控制访问盘驱动器的方法720的一个实施例的流程图。在步骤\n722,驱动管理器、控制程序或管理程序可将光盘驱动器映射到多个虚拟机。在步骤724,驱动管理器可从光盘驱动器接收或获取事务流,且在步骤726解释和/或转换该事务流。一旦解释了该事务流,在步骤728,驱动管理器可从被解释的流识别由虚拟机发起的一个或多个事务,并且确定哪个虚拟机发起了该事务。通过使用该确定,随后在步骤730驱动管理器可控制对光盘驱动器的访问。\n[0252] 在一些实施例中,驱动管理器可继续监控盘驱动器和所确定的虚拟机之间的通信。一旦在步骤732确定了事务已完成,在步骤734,驱动管理器可解锁光盘驱动器或允许其他虚拟机向光盘驱动器传输请求。\n[0253] 仍参考图7B且更详细地,在一个实施例中,方法720可由驱动管理器执行。在其他实施例中,方法720可由控制程序执行。在其他实施例中,方法720可由驱动管理器和控制程序的任何组合执行。\n[0254] 在一个实施例中,在步骤722,驱动管理器、控制程序、控制虚拟机或管理程序可将连接到计算装置的光盘驱动器映射到在计算装置上执行的多个虚拟机。在一些实施例中,映射光盘驱动器可包含更新每个虚拟机的硬件的虚拟化视图以包括该光盘驱动器。在一个实施例中,映射光盘驱动器可包含在每个虚拟机上提供虚拟光盘驱动器,该虚拟光盘驱动器与物理光盘驱动器关联。\n[0255] 在一些实施例中,驱动管理器可接收从盘驱动器中的盘进行读取的请求,或向盘驱动器的盘进行写入的请求。这些请求可由在虚拟机232的环境中执行的一个或多个客户操作系统230发出。在其他实施例中,这些请求可由在虚拟机232的环境中执行的一个或多个应用发出。例如,驱动管理器可拦截客户操作系统230发出的到盘驱动器的读请求。被发出的请求可包括指示盘驱动器返回存储在存储器的一个或多个扇区的数据到客户操作系统230的命令。驱动管理器可拦截这个请求以确定是否要转发该请求到物理盘驱动器。\n[0256] 在一些实施例中,在步骤724,驱动管理器可接收由盘驱动器产生的事务流。在一个实施例中,驱动管理器可响应于拦截读/写请求来获取该事务流。在其他实施例中,驱动管理器可连续解释该事务流以跟踪盘驱动器的状态。在另一个实施例中,当第二虚拟机\n232B发出读/写请求而第一虚拟机232A访问盘驱动器时,驱动管理器获取或接收事务流。\n[0257] 在一些实施例中,从盘驱动器接收的事务流可包括由盘驱动器输出的小型计算机系统接口(SCSI)命令的连续流(constant stream)。在其他实施例中,事务流可包括根据任何类型的通信协议或标准被格式化的数据。通常,SCSI命令由盘驱动器通过ATAPI或ATA接口或电缆进行传输。该命令可更为普遍地称为机器命令,且在多个实施例中它们必须被驱动器转换为能被操作系统处理的事务格式。在一些实施例中,当操作系统发出命令到盘驱动器时,该命令被转换为可被盘驱动器解释的机器命令。\n[0258] 在一个实施例中,在步骤726,驱动管理器可接收由盘驱动器产生的事务流且将该事务流转换为可被操作系统或控制程序220解释的命令。转换事务流可包括通读事务且匹配事务流的部分到相应的操作系统命令。\n[0259] 在一些实施例中,在步骤728,驱动管理器可确定虚拟机232是否与盘驱动器发起了一个或多个事务。在一些实施例中,这种确定还可以包括确定盘驱动器的状态,其中该状态可以是下面状态的任何一种:从盘读、向盘写、弹出盘、接受命令、发出命令、传输数据,或者是盘驱动器的任何其他状态。\n[0260] 在步骤730,一旦确定虚拟机232是否与盘驱动器发起了事务,随后驱动管理器可控制对光盘驱动器的访问。在一个实施例中,控制对光盘驱动器的访问可包含锁定该光盘驱动器以防止其他虚拟机访问该驱动器、从该驱动器读数据、向该驱动器发出请求,或以其他方式与该驱动器交互。在其他实施例中,控制对盘驱动器的访问可包括确定应用或虚拟机是否被允许访问盘驱动器,以及阻止不具有资格的应用发出读/写请求到盘驱动器。在其他实施例中,控制对盘驱动器的访问可包括从虚拟机232接收读/写请求、确定另一虚拟机232正在访问盘驱动器,以及返回指示该盘驱动器正在使用的消息到初始的虚拟机。在其他实施例中,控制对盘驱动器的访问可包括当第一虚拟机正访问盘驱动器时缓冲来自第二虚拟机的请求,使得当第一虚拟机完成了对盘驱动器的访问时所缓冲的请求可被发出到盘驱动器。在多个实施例中,当第一虚拟机正在访问盘驱动器时,可通过控制虚拟机或管理程序在客户虚拟机外对其他虚拟机执行控制或锁定光盘驱动器,使得客户虚拟机彼此的操作系统不知道其被暂时阻止访问盘驱动器。\n[0261] 在一个实施例中,在步骤730,驱动管理器可准许第一虚拟机访问盘驱动器。随后驱动管理器可接收由在第二虚拟机上执行的应用发出的读/写请求,且在一些实施例中,可回复指示该驱动器不可用的响应。\n[0262] 在一些实施例中,准许对盘驱动器的独占访问可包括识别由虚拟机执行的事务的类型。在其他实施例中,准许对盘驱动器的独占访问可包括确定安全证书、访问权限或其他类似的对于发出读/写请求的虚拟机和/或应用的许可。\n[0263] 在多个实施例中,在事务悬挂期间,驱动管理器可准许虚拟机独占访问盘驱动器。\n在其他实施例中,在接收来自盘驱动器的确认、数据、响应或其他信息所需的一段时间内,驱动管理器可准许独占访问。\n[0264] 在一些实施例中,当初始虚拟机与盘驱动器进行事务处理或者以其他方式访问盘驱动器时,驱动管理器可接收或拦截来自另一虚拟机的另一读/写请求。因而,驱动管理器在初始虚拟机与盘驱动器进行事务处理的同时接收其他虚拟机的读/写请求。驱动管理器可通过分析盘驱动器产生的事务流来确定另一虚拟机正与盘驱动器进行事务处理。在其他实施例中,驱动管理器可跟踪驱动管理器何时以及向哪个虚拟机和/或应用准许了对盘驱动器的独占访问。\n[0265] 在一些实施例中,一旦确定初始虚拟机正与盘驱动器进行事务处理,驱动管理器可返回指示该驱动器不可用的响应给其他虚拟机或在其他虚拟机上执行的应用。在一些实施例中,该响应可包括出错信息或装置忙警报。在其他实施例中,当盘驱动器被独占地分配给初始虚拟机时,驱动管理器可阻止另一虚拟机上的应用查看盘驱动器。在其他实施例中,驱动管理器可在队列或缓冲区中存储读/写请求,且一旦初始虚拟机停止与盘驱动器的事务,则转发该请求到盘驱动器。在一个实施例中,驱动管理器可发出指示该装置不可用的通知给虚拟机和/或应用,而几乎同时存储该请求到队列。\n[0266] 在步骤732,在多个实施例中,驱动管理器可确定初始虚拟机停止与盘驱动器的事务。在一些实施例中,驱动管理器可通过接收来自虚拟机表明事务结束的指示来做出确定。\n在其他实施例中,驱动管理器可通过解释盘驱动器产生的事务流确定盘驱动器采取的一系列操作来做出确定。在一些实施例中,其中盘驱动器指示其已完成任务的事务可指示虚拟机停止与该盘驱动器的事务。\n[0267] 随后在步骤734,驱动管理器可撤回对盘驱动器的独占访问。在一些实施例中,驱动管理器可通过允许其他虚拟机访问该盘驱动器来撤回独占访问。在一个实施例中,驱动管理器可通过更新数据库、列表或表来指示该虚拟机不再具有对该盘驱动器的独占访问来撤回该独占访问。步骤724-734可重复,使得一旦接收到另一虚拟机发出的对盘驱动器的读/写请求,驱动管理器可准许该另一虚拟机独占访问盘驱动器。在其他实施例中,其中驱动管理器已经排队或缓冲了来自其他虚拟机的请求,驱动管理器可轮流准许每个虚拟机独占访问并传输相应的缓冲的请求到盘驱动器以逐步完成队列中的请求。这可以采用先进先出(FIFO)顺序、先进后出(FILO)顺序、轮循法或任何其他顺序完成。\n[0268] H.通过指定的无线局域网驱动,向虚拟机提供对与到无线局域网的连接关联的数据的访问\n[0269] 通常,当多个虚拟机共享访问无线局域网(LAN)驱动时,虚拟机的其中之一被任命为无线局域网驱动的控制器,且因而能访问该无线局域网。控制器通常运行通信栈,该栈可被称为请求者栈(supplicant stack)。该控制器通过无线LAN驱动来操纵连接到无线网络的过程。然而,其他试图访问识别所建立连接特征的数据(由驱动使得可行)的虚拟机,被阻止无法访问该数据,因为通常只有控制器能访问此数据。\n[0270] 在向多个虚拟机提供对与到无线LAN的连接关联的特征和数据的访问的解决方案的一些实施例中,半虚拟wi-fi驱动是位于虚拟机的客户操作系统中且对于客户操作系统表现出来似乎就是无线网卡的驱动。到达该无线网卡和虚拟化层(例如控制程序)的客户操作系统命令可确定哪个虚拟机232应该访问该网络。在一些实施例中,客户操作系统从不给出网络密钥,客户OS仅与控制程序协商来进行访问。在一些实施例中,控制和保持网络连接的客户虚拟机可包括对应于第二虚拟机的额外的DNS和路由表,且可经由半虚拟wi-fi驱动充当到第二虚拟机的网桥。在多个实施例中,此桥接行为对客户操作系统或第二虚拟机的操作系统不是显而易见的,因为桥接数据可通过V2V或专用通信通道传递,而不是通过网络连接(即使内部网络连接)传递。\n[0271] 现参考图8A,示出了通过指定的无线局域网驱动,向物理装置上的虚拟机提供对与到无线局域网的连接关联的数据的访问的系统的实施例的框图。简要的说,除上面详细描述的多个部件,系统包括无线网络接口800、无线网络接口驱动802、第一驱动804A,和第二驱动804B。第一驱动804A可由第一虚拟机232A执行,该虚拟机在物理计算装置A 201上执行。第一驱动804A可经由通信栈(未示出)通过无线局域网104建立到第二计算装置\n100b的连接,且保持所建立的连接。第二驱动804B可由第二虚拟机232b执行,该虚拟机在物理计算装置201上执行。在一些实施例中,第二驱动器804B可请求访问识别所建立连接的特征的数据。第二驱动804B可从第一驱动804A接收所请求的数据。在一些实施例中,第二驱动804B可向物理计算装置201的用户显示该数据。在一些实施例中,管理程序202可使得第一驱动804A访问无线网络接口并禁止第二驱动804B访问无线网络接口。\n[0272] 仍参考图8A且更详细地,驱动可包括由计算装置执行的软件应用,其控制直接或间接地连接到计算装置的装置。在一个实施例中,第一驱动804A是由另一虚拟机执行的虚拟机监控器(未示出)所执行的驱动;例如,在控制虚拟机中执行的控制程序220可执行虚拟机监控器,该虚拟机监控器执行第一驱动804A。在另一实施例中,另一个第二驱动804B被授权访问物理无线网络接口卡800。在另一实施例中,第二驱动804B是被分配访问虚拟无线网接口卡的虚拟驱动。在又一实施例中,第一驱动804A和第二驱动804B是在提供用于控制物理卡800的功能的物理计算装置A201a上执行的驱动。\n[0273] 在一个实施例中,第一驱动804A是无线局域网驱动(其可被称为Wi-Fi驱动)。在另一实施例中,第一驱动804A经由通信栈控制物理网络接口卡800,通过该物理网络接口卡800,物理计算装置201可经无线局域网204连接到第二计算装置100b。在另一实施例中,第一驱动804A是虚拟化软件程序,其经通信栈与物理驱动802通信,物理驱动802继而控制物理网络接口卡800,通过物理网络接口卡800,物理计算装置201经无线局域网104连接到第二计算装置100b。在另一实施例中,第二驱动804B也是Wi-Fi驱动。\n[0274] 第一驱动804A和第二驱动804B的每一个可包括由执行驱动804的客户操作系统\n230提供的网络通信栈或协议栈或者与该网络通信栈或协议栈通信。在一些实施例中,其中dom0实体执行无线网络接口驱动802(有时相对于虚拟驱动804称为物理驱动),这些通信栈可被称为请求者栈。通信栈可包括计算机网络协议族的软件实现。\n[0275] 在一个实施例中,无线网络接口800可包括任意类型和形式的无线网路接口卡,包括PCI卡、USB无线网络接口、PCMCIA无线网络接口,或任何其他类型的无线网络接口。\n在一些实施例中,无线网络接口800可包括安装在物理计算装置201内部的内部卡。\n[0276] 在一些实施例中,无线网络接口卡800将来自物理计算装置201的数据转换为无线电信号。在这些实施例的其中一个,无线适配器卡800包括传输无线电信号到网络104中的无线路由器的天线,该无线路由器用于转发无线电信号到第二计算装置100b。在一个实施例中,管理程序202是上述管理程序。在另一实施例中,管理程序202包括用于通过驱动来启用或禁止访问通信栈的功能。在另一实施例中,并通过示例,管理程序202包括用于将具有用于启用或禁用驱动的指令的消息传送到虚拟机的部件。\n[0277] 在一个实施例中,由虚拟机的操作系统执行的虚拟机监控器执行第一驱动804A。\n在另一实施例中,虚拟机监控器是由上述控制程序202执行的部件。在另一实施例中,虚拟机监控器是控制程序202。\n[0278] 在一些实施例中,第一驱动804经由诸如管理程序202或控制虚拟机之类的dom0实体所执行的物理无线网络接口驱动802,与无线网络接口800通信。dom0实体可允许第一虚拟机232A以这种方式访问无线网络接口800,同时阻止第二虚拟机232B访问该接口。\n这样做可允许第一虚拟机232A连续且独占地访问无线网络接口800以保持无线连接。例如,即使在没有到另一计算装置100b的IP连接是有效的时,无线连接可包括在计算装置\n201和无线路由或基站之间的广播的连接保持和其他通信消息。\n[0279] 在一个实施例中,第一驱动804A可充当第二驱动804B和/或第二虚拟机232B的网桥。在多个实施例中,这可以在无需将任一虚拟机232的操作系统230配置为桥接网络连接的情况下实现,且这样避免了第一虚拟机232需要具有两个单独的有效的网络驱动来桥接连接。在一个这样的实施例中,如上所述,桥接连接的数据和请求可使用共享存储页面或V2V消息在第一驱动804A和第二驱动804B之间传送。在多个实施例中,第一驱动804A可包括用于客户操作系统A 230A的域名服务(DNS)表A和进出路由表A和B。此外,第一驱动840A可包括用于第二虚拟机232B的客户操作系统B 230B的DNS表B和进出路由表C和D。通过维护这些额外的路由和DNS表,第一驱动804A可在无线网络接口800和第一虚拟机232A或第二虚拟机232B的应用之间适当地直接通信。在多个实施例中,第一驱动\n804A可从第二驱动804B接收DNS表B以及路由表C和D,第二驱动804B可存储相同的表。\n[0280] 现参考图8B,描述了通过指定的无线局域网驱动,向物理装置上的虚拟机提供对与到无线局域网的连接关联的数据的访问的方法820的一个实施例的流程图。简要的说,方法820包括在步骤822,由第一虚拟机所执行的第一驱动通过无线网络建立网络连接,该第一虚拟机由第一计算装置执行的管理程序所寄载。在步骤824,第一驱动可从由第二虚拟机执行的第二驱动接收对网络连接特征的请求,该第二虚拟机由管理程序所寄载。在步骤\n826,第一驱动可提供被请求的特征给第二驱动。在步骤828,在一些实施例中,第二虚拟机的操作系统可向用户显示该特征。\n[0281] 在步骤830,在一些实施例中,第一虚拟机可保持所建立的网络连接。在步骤832,在一个实施例中,管理程序可禁止第一驱动访问无线网络接口。在步骤834,管理程序可使得第二驱动能够访问该无线网络接口。在步骤836,第二驱动可经由所建立的网络连接通信。\n[0282] 仍参考图8B且更详细地,在步骤822,由执行在物理计算装置上的第一虚拟机执行的第一驱动可经无线网络建立网络连接。在一些实施例中,管理程序202使得第一驱动能够访问与物理无线网络接口关联的通信栈。由第二虚拟机执行的第二驱动对该通信栈的访问可被禁止。第一驱动可以经由物理无线网络接口的通信栈,通过无线局域网建立到第二计算装置的连接。在一个实施例中,第一驱动保持所建立的连接。在另一实施例中,第一驱动接收与连接相关的数据-例如无线局域网的标识、连接的信号强度的等级的标识符,或其他用于识别连接特征的数据。\n[0283] 在一些实施例中,建立和/或保持网络连接可包括提供认证或登录凭证到无线路由器或基站。例如,在一个这样的实施例中,第一驱动可向无线路由器提供有线等效加密(WEP)密钥或wifi保护访问(WPA或WPA2)密钥。\n[0284] 在步骤824,在一些实施例中,第二驱动可从第一驱动请求访问识别所建立连接的特征的数据。在一个实施例中,第一驱动接收来自于第二驱动的对于所建立连接的信号强度的识别的请求。在另一个实施例中,第一驱动接收来自于第二驱动的对于无线局域网的识别的请求。\n[0285] 在步骤826,第一驱动可提供被请求的特征给第二驱动。在一些实施例中,第一驱动可通过V2V通道或共享存储区域或其他虚拟机间通信通道来提供被请求的特征。\n[0286] 在步骤828,在一些实施例中,第二虚拟机、第二虚拟机的操作系统、第二虚拟机的应用或第二驱动可向计算装置的用户显示所接收的数据。显示所接收的数据可包括以通常由第二虚拟机的操作系统当在非虚拟机上执行时用来显示这种数据的方式来显示网络名称、SSID、连接强度,或其他变量。\n[0287] 在步骤830,在一些实施例中,第一虚拟机和/或第一驱动可保持网络连接。在一些实施例中,第一虚拟机可通过发送信号到基站或无线路由器来保持无线网络有效从而保持该网络连接。\n[0288] 在一些实施例中,在步骤832,管理程序可禁止第一驱动访问物理无线网络接口的通信栈,或以其他方式使得能够访问该接口。在一些实施例中,禁止第一驱动访问可包括在无需关闭所建立的或被保持的网络连接的情况下来禁止访问。这样做可以使另一虚拟机能够使用所建立的连接。\n[0289] 在步骤834,在一个实施例中,管理程序可使得第二驱动能够访问该接口。在一个实施例中,其中第一驱动提供登录凭证或密钥以建立连接,所述使得第二驱动能够访问可包括无需用户或第二驱动提供这种登录凭证或密钥来使用所建立的网络连接。相反,可以在无需额外认证的情况下由第二驱动使用第一驱动所建立的网络连接。这可例如通过当从第一驱动转移访问到第二驱动时不关闭所建立的连接而实现。因而,在步骤836,第二驱动可通过所建立的连接来通信。\n[0290] I.阻止访问可信虚拟机产生的显示图形\n[0291] 如上所述,在很多情况下用户可同时使用不可信虚拟机和可信虚拟机。例如,当在可信虚拟机上操作公司数据时,用户可在不可信虚拟机上运行媒体播放器应用程序。在一些情况下,在不安全或不可信的、用户专用的虚拟机中执行的应用可请求在安全、可信、公司专用的虚拟机中执行的应用所产生的屏幕图形。通常每个虚拟机可访问单个的图形处理单元(GPU),因而每个虚拟机通常可访问GPU的大多数方面。特别地,在很多情况下每个虚拟机能够读/写访问由GPU使用的存储器,以存储所呈现(render)的图像和其他图形数据。因而,在上面提到的场景中,不可信虚拟机能够通过读GPU存储器来读取由可信虚拟机产生的图形。这种情况并不理想,因为这样打开了安全漏洞,用户可以根据该漏洞简单地通过捕获屏幕图像或“屏幕抓取”从可信虚拟机获取信息。\n[0292] 在对这个问题的一种解决方案中,在计算装置上执行的图形管理器可从可信虚拟机接收使用计算装置的图形处理单元来呈现图形数据的请求。该图形管理器可选择和分配图形处理单元的存储器的安全部分给可信虚拟机。图形管理器可将来自可信安全虚拟机所产生的图形数据的图形呈现到图形处理单元存储器的安全部分。如果图形管理器接收到来自不可信虚拟机上执行的应用的对于读取根据可信虚拟机图形数据所呈现的图形的请求,且该图形存储于图形处理单元存储器的安全部分中,图形管理器可阻止该应用读取来自图形处理单元存储器的安全部分的可信虚拟机图形。\n[0293] 现参考图9A且简言之,在用于阻止访问可信虚拟机所产生的显示图形的系统的一个实施例中,除了本文描述的其他部件,计算装置201可包括图形处理单元(GPU)900,其可包括或访问存储器单元908。该系统还可包含由可信虚拟机和/或上述控制虚拟机或控制程序220执行的图形管理器902,或者包括由管理程序202执行的图形管理器902'。因而,图形管理器902可由可信dom0实体执行。该系统可包括可信虚拟机232A,可信虚拟机\n232A可执行第一应用904A。第一应用904A可产生图形数据906A,诸如窗口、工具栏、按钮、视频、图像或其它数据。在一些实施例中,第一应用904A可包括诸如ICA或远程桌面协议客户机的远程访问应用,且可连接到服务器以及显示远程产生地且传送到应用的图形数据906A。类似地,系统可包括可执行第二应用904B(产生图形数据906B)的不可信虚拟机\n232B。\n[0294] 在一些实施例中,图形处理单元(GPU)900可包含在计算装置201的硬件层210中。图形处理单元900可以是任何能够呈现图形的处理器。在一些实施例中,图形处理单元\n900可包括图形处理单元900可使用来存储被呈现的图形和其他图形数据的存储器908。在其他实施例中,上述物理存储器216的部分被分配给图形处理单元900,图形处理单元900可使用物理存储器216的该部分来存储图形信息和被呈现的图形。\n[0295] 在一些实施例中,该系统可以包括图形管理器902。图形管理器902可被执行在任何可信环境中,包括控制虚拟机和/或管理程序202。图形管理器902可充当虚拟机232之间的层,使得图形管理器902可拦截由在虚拟机232上执行的应用904A-904B发出的到物理GPU900的请求。尽管图9A示出了在可信虚拟机232A上执行的图形管理器902,但在一些实施例中,图形管理器902可被包括在控制程序220、工具堆栈224中,或由管理程序、底层操作系统,或控制虚拟机执行。在一些实施例中,图形管理器902分配图形存储单元给应用904和/或在计算装置201上执行的虚拟机232。在其他实施例中,图形管理器902将GPU存储器908划分为安全和不安全存储器部分。在另一实施例中,图形管理器908将分配给GPU 900的物理存储器216划分为包括安全区域910的安全和不安全存储器部分。\n[0296] 当应用904发出请求或命令给GPU 900,在一些实施例中,图形管理器902可拦截该请求并确定该命令或请求是否应被转发到GPU 900。在一些实施例中,图形管理器902可通过检查一个或多个上文详细讨论的安全策略来确定应用904是否被允许向存储器写或从存储器的特定区域(称为安全区910)读,从而做出确定。在一些实施例中,图形管理器\n902转发关于应用904和在其上执行应用904的虚拟机232的识别信息到上述策略引擎。\n基于所接收的信息以及一个或多个安全策略,策略引擎可确定该命令或请求是否应被传送到GPU 900,并且转发该确定到图形管理器902。\n[0297] 图9B示出了用于将GPU 900存储器划分为不安全和安全的存储器部分的方法920的一个实施例。在步骤922,图形管理器可接收可信虚拟机对GPU发出的呈现一个或多个图形的请求。在步骤924,图形管理器可分配GPU存储器的安全部分给可信虚拟机或可信虚拟机的应用。接着在步骤926,图形管理器可呈现图形数据且存储所呈现的图像到GPU存储器的安全部分中。\n[0298] 在步骤928,在一些实施例中,图形管理器可接收从不可信虚拟机发出到GPU的从GPU存储器的安全部分读取图像数据的请求。一旦接收这样的请求,在步骤930,图形管理器可阻止不安全虚拟机读取存储器的安全部分。在一些实施例中,在步骤932,图形管理器可从不可信虚拟机接收呈现图形数据的请求。在步骤934,图形管理器可指示GPU呈现来自不可信虚拟机的图形到GPU存储器的部分,该部分不包括存储器的安全部分。\n[0299] 仍参考图9B且更详细地,在一个实施例中,在步骤922,图形管理器可接收来自安全或可信虚拟机的要求根据图形数据来呈现图形的请求。在一些实施例中,可信虚拟机响应于在可信虚拟机上执行的应用发出的请求而产生该请求。例如,在可信虚拟机上执行的应用可产生图形命令和图形数据。该应用可发出请求到在可信虚拟机上执行的客户操作系统,要求客户操作系统根据图形命令和图形数据来呈现图形。在一些实施例中,客户操作系统可转发这种请求到控制程序220,控制程序220可转发该请求到图形管理器。在一个实施例中,该请求可包括图形数据和图形命令。在另一实施例中,该请求可以是访问GPU的请求。尽管称为接收请求,但在一些实施例中,呈现图形数据的请求从虚拟机上的客户操作系统或应用被传输到GPU,但被拦截或重定向到图形管理器。\n[0300] 在一些实施例中,在步骤924,图像管理器可分区GPU的存储器以创建安全存储器部分。图形管理器可分段、分区或以其他方式分配GPU存储器的部分作为GPU存储器的安全部分。在一些实施例中,图形管理器可分配存储器的安全部分给可信虚拟机。分配存储器的安全部分给虚拟机可包括产生数据库中的条目,该条目指示特定范围的存储地址被分配给可信虚拟机。\n[0301] 在步骤926,在一些实施例中,GPU接收来自图形管理器的图形命令和图形数据,根据这些信息呈现图形且存储所呈现的图形到GPU存储器的安全部分中。在一个实施例中,在分段或分区GPU存储器(使得存储器的部分被分配用于存储根据可信虚拟机所产生的图形数据所呈现的图形)之后,图形管理器传送图形信息到GPU。当传送该图形信息到GPU时,图形管理器还可传送元数据或额外的用于指示GPU呈现图像到GPU存储器的安全存储部分的指令。\n[0302] 图9B示出了将GPU存储器分区或分段的方法920,在其他实施例中方法920可包括将分配给GPU的物理存储器216分区或分段。在其他实施例中,图形管理器可能不会物理地将GPU存储器分段或分区,而是分配一定范围的存储地址给可信虚拟机。存储地址的分配可被存储在控制虚拟机上的数据库中,且可被图形管理器访问。在其他实施例中,被分配的存储地址可被存储在图形管理器可访问的任何列表、数据库或存储库中。\n[0303] 在一些实施例中,在步骤928,图形管理器可从不可信虚拟机接收请求,其要求从GPU存储器的安全部分读取图像数据。响应于该请求,在步骤930,图形管理器可阻止不可信虚拟机读取存储器的安全部分。在一些实施例中,接收要求从GPU存储器的安全部分读取图像数据的请求可包括:拦截由在不可信虚拟机上执行的应用发出的读请求,其中该读请求可被应用发出到GPU。阻止不可信虚拟机读取存储器的安全部分可包括首先分析不可信虚拟机的安全性和/或访问凭证。在一些实施例中,图形管理器在确定不可信虚拟机缺少访问权限或安全凭证来读安全图像后,阻止访问。一旦确定不可信虚拟机缺少访问权限,在一些实施例中,图形管理器可返回出错,其指示存储位置不可用。在其他实施例中,图像管理器可返回不可信虚拟机可访问的存储器的另一部分中的数据。例如,响应于不可信虚拟机发出的打印屏幕请求,图形管理器可仅返回不可信虚拟机有权访问的屏幕的那些部分。因而,在一些实施例中,可以从返回给不可信虚拟机的打印屏幕图像中将与可信虚拟机对应的的屏幕部分涂黑或以其他方式删去。移除屏幕的部分可包括从屏幕移出光栅且校验写入。在其他实施例中,可以使用模板(stencil)识别不可信虚拟机有权访问的像素,且绘出只包括这些像素的图像,而其余的像素被绘上默认的颜色值。\n[0304] 在进一步的实施例中,在步骤932,图形管理器可接收来自不可信虚拟机的要求呈现图形数据的请求。图形管理器可以以与上述那些关于接收可信虚拟机的呈现图形数据的请求的类似方式来接收请求。在多个实施例中,图形管理器通过重定向来拦截或接收该请求。\n[0305] 在步骤934,响应于从不可信虚拟机接收请求,图形管理器可指示GPU呈现来自不可信虚拟机的图形且存储所呈现的图形到GPU存储器的部分,该部分不包括用于可信虚拟机的被分隔开的安全部分。这样做可避免例如图形损坏。\n[0306] 在一个实施例中,不可信虚拟机和可信虚拟机都可完全访问GPU。在多个实施例中,每个虚拟机具有逆向工程屏幕属性的能力以计算出往哪发送像素。然而,通过本文所述的方法和系统,不可信虚拟机不能获得对可信虚拟机所产生图形的访问。\n[0307] J.使用管理程序信任的客户机保护敏感信息\n[0308] 目前存在许多客户机-服务器系统,其中客户机装置通过网络提供敏感用户信息到服务器。在很多情况下,这些系统容易受到通过按键记录、屏幕截取器,或可以在用户会话期间或当用户访问服务器提供的资源和应用时捕获由客户机装置提供的敏感信息的其他恶意软件的安全攻击。当用户请求访问服务器上的信息时,客户机装置或计算机可捕获和/或存储诸如密码或其他用户专有访问信息之类的敏感用户信息。在一些情况下,用户可请求访问诸如应用或桌面之类的公司资源。客户机装置可捕获密码或其他敏感的访问信息且将所捕获的信息连同对所期望资源的访问请求一起提供给公司计算机。公司计算机继而可确定是否允许该用户访问所请求的资源。\n[0309] 在这些场景中,用于请求访问的应用可在不可信操作系统的环境中执行或者可通过不安全或不可信的网络(例如,家庭计算机、一体机、用户个人计算机、移动装置等)通信。\n因而,用户提供的信息的安全性可被恶意软件或其他可获取敏感信息的类似应用所危及。\n用于减少密码或其他秘密信息公开的风险的当前解决方案包括端点扫描和补救。这种方法的一个缺点是扫描和完成所必须的任何补救可能需要时间。扫描也可被限制于其可以识别的威胁方面。此外,补救可导致端用户困惑。\n[0310] 其他解决方案包括一起使用Citrix系统发布的XENCLIENT以及单独的企业控制操作系统且使用该操作系统来访问企业资源。该解决方案的一个优势在于其使离线访问公司资源成为可能,因为资源已被有效下载到可信公司映像中。然而,缺点在于其需要客户端侧、公司维护的映像,以及其中所有导致的开销和延迟。此外,客户端自身可能不安全。\n[0311] 因此,一种解决方案可包括使用可信虚拟机映像来控制对远程演示应用所寄载的应用的远程访问。在一些实施例中,此应用可以是Citrix系统发布的XENAPP。在其他实施例中,可使用其他远程演示应用。\n[0312] 当用户登入或启动用于访问装置的应用(例如CITRIX RECEIVER)时,可要求用户提供密码。在一些实施例中,需要密码来获得可用应用的列表,或访问商品销售服务器或外送服务。\n[0313] 应用可调用管理程序,而不是通过传统认证插件收集凭证本身。作为响应,管理程序可启动认证部件。这种部件可显示窗口来收集凭证。通过使用直接I/O(VT-D)透传的虚拟化技术,管理程序可通过写入视频缓冲来直接显示该窗口,且该管理程序可查验鼠标和键盘被连接到管理程序环境,而不是连接到不可信用户映像或虚拟机。\n[0314] 凭证可被收集且可被存储于管理程序的安全环境中。这些凭证可被传送到服务器用于认证。认证服务器可返回功能的集合,应用插件可能潜在地需要访问每个这样的服务中的一个。在一些实施例中,管理程序可在返回调用上传送所有的非敏感功能到应用,但可为真实ICA连接保持该功能。\n[0315] 因而,在一些实施例中,当应用检测到用户想连接到服务器上的应用时,该应用可在domU或用户的不可信虚拟机中启动或发起委托代理。委托代理可与诸如管理程序或控制虚拟机之类的dom0实体通信,且可请求启动远程客户机代理,如ICA应用。dom0实体可响应于该请求,启动客户机代理。在一些实施例中,委托代理可将发起到远程应用服务器的连接所需的信息提供给客户机代理,该信息诸如IP地址、服务器标识,或其他非敏感信息。\n[0316] 一旦客户机代理已经建立与远程服务器的通信会话,在可信dom0域中执行的客户机代理可通过直接写视频缓冲来显示它的输出。可放置该输出以使其可以在与domU委托代理产生的窗口占据的屏幕区域同样的屏幕区域中可见。然而,domU中所做的屏幕截图不会显示客户机代理的输出窗口的内容。在一个实施例中,如同在关于阻止访问可信虚拟机产生的显示图形的上述系统中一样,客户机代理可通过GPU的安全存储区域显示其输出。\n[0317] 在多个实施例中,客户机代理和委托代理可通过ICA虚拟通道,或者使用V2V通信或上述用于在可信虚拟机和不可信虚拟机之间通信的系统,来互相通信。该通信可以允许在domU中执行的委托代理指示dom0客户机代理关于其何时被给予焦点。一旦接收焦点,dom0客户机代理可获得对键盘和鼠标的控制。在一个实施例中,这可以通过使用上述关于向可信虚拟机或不可信虚拟机注入输入数据的系统和方法来实现。因而,击键和鼠标点击(包括密码和其他登录凭证)可通过可信dom0实体提供给服务器,且对domU虚拟机中的应用保持不可见和不可访问。\n[0318] 在一些实施例中,当用户悬挂该会话,dom0中的客户机代理会保留关于该会话的信息。在进一步的实施例中,domU委托代理不保留任何信息。\n[0319] 简要参考图10A,示出了使用管理程序信任的客户机保护敏感信息的系统的框图。\n除了上面详细描述的特征和元件,该系统可包括由不可信虚拟机执行的委托代理1000,和由诸如控制虚拟机之类的dom0实体执行的客户机代理1002。尽管描绘在控制虚拟机上,但在多个实施例中客户机代理1002可由管理程序或底层操作系统执行。\n[0320] 在一些实施例中,委托代理1000可包括用于响应于用户请求在可信dom0域中启动客户机代理1002的应用、服务、守护进程、例程、功能或其他可执行代码。委托代理1000还可包括用于在屏幕区域中产生代理窗口的功能。如上所述,这种代理窗口可占据与包括客户机代理产生的输出数据的窗口相同的屏幕区域。代理窗口可以以Z顺序位于输出数据之后,或可在输出数据前面但透明。在多个实施例中,产生代理窗口可被实现以使得客户操作系统创建代理窗口的任务栏按钮。因此,客户操作系统的用户可通过选择其任务栏按钮、选择代理窗口、使用操作系统提供的应用切换器或通过其他手段使代理窗口获得焦点。当代理窗口获得焦点时,委托代理100可向客户机代理1002传送消息,该消息指示该代理窗口已通过使用上述任何方法获得了客户操作系统中的焦点。响应于接收该消息,客户机代理1002可以Z顺序向前移动它的输出窗口、将暂停的连接取消暂停、控制键盘、鼠标或其他输入装置,或者执行其他功能。类似地,当代理窗口失去焦点时,例如用户点击客户操作系统中另一应用的窗口,该委托代理1000可传输相应的指示代理窗口不再具有焦点的消息到客户机代理1002。响应于接收此消息,客户机代理1002可暂停连接、以Z顺序往后移动输出窗口、释放对键盘、鼠标或其他输入装置的控制给客户操作系统,或者执行其他此类功能。\n[0321] 在多个实施例中,客户机代理1002可包括用于建立到远程服务器的连接以及显示图形输出数据的应用、服务、守护进程、子例程、功能、逻辑或其他可执行代码。在多个实施例中,客户机代理1002可包括ICA客户机或RDP客户机。在一些实施例中,客户机代理\n1002可提供用于获取诸如登录信息和密码之类的用户凭证、以及传送这些凭证到远程服务器的功能。在进一步的实施例中,客户机代理1002可在传送前将该凭证加密。\n[0322] 使用上述系统,在不可信虚拟机上执行的客户操作系统的用户可能不会意识到该客户机代理正在诸如控制虚拟机或管理程序之类的dom0实体中执行。通过使用位于与客户机代理提供的图形输出数据相同位置的代理窗口,用户可与客户机代理交互仿佛其正在客户操作系统上执行。然而,客户机代理收集和提供的敏感信息可对客户操作系统或由不可信虚拟机执行的应用保持不可访问。\n[0323] 现参考图10B,示出了用于通过使用管理程序信任的客户机来保护敏感信息的方法1020的流程图。简要的说,在步骤1022,不可信虚拟机的用户可请求与诸如远程应用服务器之类的远程装置建立连接。不可信虚拟机或不可信虚拟机的操作系统可启动委托代理。在步骤1024,委托代理可请求可信虚拟机、管理程序,或另一个dom0实体来启动客户机代理。在步骤1026,在一个实施例中,图形管理器可分配GPU存储器的安全部分给该客户机代理。在另一实施例中,可通过允许客户机代理使用VT-D透传直接写视频缓存而省略这个步骤。在步骤1028,客户机代理可向GPU存储器的安全部分呈现图形,或直接写视频缓存。\n在步骤1030,客户机代理可从不可信虚拟机接收远程装置的网络地址。在步骤1032,客户机代理可使用所接收的网络地址建立与该远程装置的连接。\n[0324] 在一些实施例中,客户机代理可通过控制用户的键盘和/或鼠标或其他输入装置来从安全、可信环境中的用户收集凭证。例如,客户机代理可通过上述关于注入输入数据到安全虚拟机的方法来接收这样的数据。\n[0325] 在一个实施例中,委托代理可在与由客户机代理显示的输出数据相同的屏幕位置产生窗口。该窗口可以以Z顺序位于输出数据之后,或可在输出数据前面但透明。当不可信虚拟机上的客户操作系统的用户点击该窗口,或者任务栏按钮或其他与该窗口关联的用户接口元素,该委托代理窗口可接收焦点。由于该窗口是透明的或位于客户机代理的图形输出数据的后面,用户会相信他们正在点击在远程装置上执行且由远程客户机代理显示的应用的窗口。因此,用户可与远程应用交互而不会意识到客户机代理并不是执行在客户操作系统中或不可信虚拟机中。\n[0326] 尽管上述讨论的形式是虚拟机和客户操作系统,但在一些实施例中,机器可只执行domU中的一个操作系统且用户可能不知道管理程序正在操作系统下执行。因此,用户可能也不知道客户机代理正在除了domU操作系统的任何其他系统中执行。\n[0327] 在一些实施例中,上述方法和系统可用于访问无论寄载在哪的应用或桌面,包括在服务器群上、在企业中、寄载服务或在云中寄载的应用;在服务器群上、在企业中、寄载服务或在云中寄载的桌面;通过可信虚拟机在客户端侧安全或可信操作系统上寄载的应用;\n在客户端侧安全或可信操作系统上寄载的整个桌面;或者任何其他远程应用或桌面。\n[0328] 在一些实施例中,这些方法和系统描述了当连接到可信映像提供的应用时在不可信映像中执行应用(例如,ICA客户机)。通过这样做,在可信映像中执行的应用可与不安全的或不可信用户环境隔离开。\n[0329] 应该理解,上文描述的系统可提供这些组件的任意多个或每一个并且这些组件可以在独立机器上提供,或者在一些实施例中,可在分布式系统的多个机器上提供。可以使用编程和/或工程技术将上文所描述的系统和方法实现为方法、装置或产品以提供软件、固件、硬件或上述的任何组合。此外,上述系统和方法可作为在一件或多件产品上实现或在其中实现的一个或多个计算机可读程序而被提供。本文使用的术语“产品”旨在包括从一个或多个计算机可读的装置、固件、可编程逻辑、存储器装置(例如,EEPROM、ROM、PROM、RAM、SRAM等)、硬件(例如,集成电路芯片、现场可编程门阵列(FPGA)、专用集成电路(ASIC)等)、电子装置、计算机可读的非易失存储单元(例如,CD-ROM、软盘、硬盘等)可访问的或嵌入其中的代码或逻辑。所述产品可以是从经由网络传输线、无线传输介质、通过空间传播的信号、无线电波、红外信号等提供对计算机可读程序的访问的文件服务器可访问的。所述产品可以是闪存卡或磁带。所述产品包括硬件逻辑以及嵌入在计算机可读介质中由处理器执行的软件或可编程代码。通常,计算机可读程序可以任何编程语言来实现,如LISP、PERL、C、C++、C#、PROLOG,或者诸如JAVA的任何字节码语言。软件程序可以作为目标代码被存储在一件或多件产品上或其中。\n[0330] 已经描述了用于选择性地实现渐进式显示技术的方法和系统的某些实施例,对本领域技术人员而言,显而易见可以使用包含本发明的概念的其他实施例。
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2000-03-29
|
1999-06-30
| | |
2
| |
2005-11-23
|
2005-04-29
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |