CN110262875B - 基于补丁机制的Windows虚拟机与KVM宿主机的通信方法及系统 - Google Patents
基于补丁机制的Windows虚拟机与KVM宿主机的通信方法及系统 Download PDFInfo
- Publication number
- CN110262875B CN110262875B CN201910552215.7A CN201910552215A CN110262875B CN 110262875 B CN110262875 B CN 110262875B CN 201910552215 A CN201910552215 A CN 201910552215A CN 110262875 B CN110262875 B CN 110262875B
- Authority
- CN
- China
- Prior art keywords
- virtual machine
- patch information
- information pointer
- memory
- module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 230000006854 communication Effects 0.000 title claims abstract description 62
- 238000004891 communication Methods 0.000 title claims abstract description 61
- 238000000034 method Methods 0.000 title claims abstract description 39
- 230000007246 mechanism Effects 0.000 title claims abstract description 21
- 230000015654 memory Effects 0.000 claims abstract description 140
- 230000007175 bidirectional communication Effects 0.000 claims abstract description 12
- 230000006870 function Effects 0.000 claims description 10
- 238000005516 engineering process Methods 0.000 claims description 9
- 230000011218 segmentation Effects 0.000 claims description 4
- 230000010365 information processing Effects 0.000 claims description 2
- 230000005540 biological transmission Effects 0.000 abstract description 9
- 230000003993 interaction Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 238000007429 general method Methods 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45545—Guest-host, i.e. hypervisor is an application program itself, e.g. VirtualBox
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45587—Isolation or security of virtual machine instances
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请公开了一种基于补丁机制的Windows虚拟机与KVM宿主机的通信方法及系统,该方法包括:当Windows虚拟机业务驱动实现时,在Windows虚拟机的内核业务驱动模块中预先分配一块内存;在Windows虚拟机中,利用内核业务驱动模块数据结构中的补丁信息指针字段,挂接内存;KVM宿主机根据当前Windows虚拟机的内核模块链表中内核业务驱动的补丁信息指针偏移量,确定内存;Windows虚拟机与KVM宿主机基于内存进行双向通信。本申请中的系统包括:内存分配模块、挂接模块、内存确定模块和通信模块。通过本申请,能够有效提高虚拟机和宿主机之间数据传输的安全性、可靠性和数据传输效率。
Description
技术领域
本申请涉及虚拟化安全技术领域,特别是涉及一种基于补丁机制的Windows虚拟机与KVM(Kernel-based Virtual Machine,基于内核的虚拟机)宿主机的通信方法及系统。
背景技术
KVM是目前学术界的主流虚拟化平台之一,KVM是一个开源的系统虚拟化模块,其核心源码较少,主要使用Linux自身的调度器进行通信管理。在KVM虚拟化平台中,主要进行KVM虚拟机和KVM主机之间的通信。其中,KVM虚拟机是KVM虚拟化平台上运行的客户操作系统,简称虚拟机;而KVM主机是KVM虚拟化平台本身所处的Linux操作系统,简称主机。当KVM虚拟化平台上运行的客户操作系统为Windows系统时,该KVM虚拟机即为Windows虚拟机。在KVM虚拟化平台中,针对Windows虚拟机,如何进行Windows虚拟机和KVM主机之间的通信,从而实现在KVM主机上管理Windows虚拟机上的业务,是虚拟化安全技术领域中一个重要的问题。
目前Windows虚拟机和KVM主机之间的通信方法,通常有两种:第一种是基于网络进行Windows虚拟机和KVM主机之间的通信。具体地,需要在Windows虚拟机和KVM主机之间进行网络连接配置,配置成功后,即可实现两者之间的通信。第二种是基于设备进行Windows虚拟机和KVM主机之间的通信。具体地,可以采用虚拟串口,首先在KVM主机上生成设备,然后在Windows虚拟机上添加设备和安装驱动,最后通过虚拟串口实现两者之间的通信。
然而,目前Windows虚拟机和KVM主机之间的通信方法中,第一种方法依赖于网络的稳定性,当网络不通的情况下,会造成通信中断使得Windows虚拟机和KVM主机之间配置失败,无法实现Windows虚拟机和KVM主机之间的通信,因此第一种通信方法的稳定性和安全性不够高。第二种方法中当KVM主机或Windows虚拟机上出现设备故障时,也会导致无法实现Windows虚拟机和KVM主机之间的通信,因此第二种通信方法的稳定性和安全性也不够高。
发明内容
本申请提供了一种基于补丁机制的Windows虚拟机与KVM宿主机的通信方法及系统,以解决现有技术中Windows虚拟机与KVM宿主机之间通信的稳定性和安全性不够高的问题。
为了解决上述技术问题,本申请实施例公开了如下技术方案:
一种基于补丁机制的Windows虚拟机与KVM宿主机的通信方法,所述方法包括:
当Windows虚拟机业务驱动实现时,在所述Windows虚拟机的内核业务驱动模块中预先分配一块内存;
在所述Windows虚拟机中,利用内核业务驱动模块数据结构中的补丁信息指针字段,挂接所述内存;
KVM宿主机根据当前Windows虚拟机的内核模块链表中内核业务驱动的补丁信息指针偏移量,确定所述内存;
Windows虚拟机与KVM宿主机基于所述内存进行双向通信。
可选地,在所述Windows虚拟机中,利用内核业务驱动模块数据结构中的补丁信息指针字段,挂接所述内存的方法,包括:
当Windows虚拟机业务驱动实现时,在初始化函数中获取第一补丁信息指针,所述第一补丁信息指针为挂接前内核模块数据结构中的原始补丁信息指针;
将所述第一补丁信息指针替换为第二补丁信息指针,并保存所述第一补丁信息指针,所述第二补丁信息指针为所述内存的指针;
当加载业务驱动时,内核业务驱动模块数据结构中的补丁信息指针更新为第二补丁信息指针;
当卸载业务驱动时,内核业务驱动模块数据结构中的补丁信息指针变更为第一补丁信息指针。
可选地,KVM宿主机根据当前Windows虚拟机的内核模块链表中内核业务驱动的补丁信息指针偏移量,确定所述内存的方法,包括:
KVM宿主机遍历Windows虚拟机的内核模块列表,根据内核模块列表中的驱动名称,确定需要通过内存进行通信的内核业务驱动;
根据Windows虚拟机中当前内核业务驱动模块的补丁信息指针偏移量,确定所述内核业务驱动的补丁信息指针;
根据所述内核业务驱动的补丁信息指针,获取所述内核业务驱动分配的内存。
可选地,所述KVM宿主机遍历Windows虚拟机的内核模块列表的方法,具体为:
KVM宿主机利用Libvmi技术,遍历Windows虚拟机的内核模块列表。
可选地,当Windows虚拟机业务驱动实现时,在所述Windows虚拟机的内核业务驱动模块中预先分配一块内存之后,所述方法还包括:
对所述内存进行分段,且不同的段用于执行不同的读写操作。
一种基于补丁机制的Windows虚拟机与KVM宿主机的通信系统,所述系统包括:
内存分配模块,设置于Windows虚拟机中,用于当Windows虚拟机业务驱动实现时,在所述Windows虚拟机的内核业务驱动模块中预先分配一块内存;
挂接模块,设置于Windows虚拟机中,用于在所述Windows虚拟机中,利用内核业务驱动模块数据结构中的补丁信息指针字段,挂接所述内存;
内存确定模块,设置于KVM宿主机中,用于根据当前Windows虚拟机的内核模块链表中内核业务驱动的补丁信息指针偏移量,确定所述内存;
通信模块,用于在Windows虚拟机与KVM宿主机中,基于所述内存进行双向通信。
可选地,所述挂接模块包括:
第一补丁信息指针获取单元,用于当Windows虚拟机业务驱动实现时,在初始化函数中获取第一补丁信息指针,所述第一补丁信息指针为挂接前内核模块数据结构中的原始补丁信息指针;
替换单元,用于将所述第一补丁信息指针替换为第二补丁信息指针,并保存所述第一补丁信息指针,所述第二补丁信息指针为所述内存的指针;
第一更新单元,用于当加载业务驱动时,将内核业务驱动模块数据结构中的补丁信息指针更新为第二补丁信息指针;
第二更新单元,用于当卸载业务驱动时,将内核业务驱动模块数据结构中的补丁信息指针变更为第一补丁信息指针。
可选地,所述内存确定模块包括:
遍历单元,用于遍历Windows虚拟机的内核模块列表,根据内核模块列表中的驱动名称确定需要通过内存进行通信的内核业务驱动;
补丁信息指针确定单元,用于根据Windows虚拟机中当前内核业务驱动模块的补丁信息指针偏移量,确定所述内核业务驱动的补丁信息指针;
内存查找单元,用于根据所述内核业务驱动的补丁信息指针,获取所述内核业务驱动分配的内存。
可选地,所述系统还包括:分段模块,用于对所述内存进行分段,且不同的段用于执行不同的读写操作。
本申请的实施例提供的技术方案可以包括以下有益效果:
本申请提供一种基于补丁机制的Windows虚拟机与KVM宿主机的通信方法,该方法主要是通过Windows虚拟机内存实现Windows虚拟机与KVM宿主机之间的双向通信。首先,在Windows虚拟机的内核业务驱动模块中预先分配一块内存,其次,利用内核业务驱动模块数据结构中的补丁信息指针字段,将该内存挂接到指定位置,然后,在KVM宿主机中根据补丁信息指针偏移量确定该内存,最后,Windows虚拟机与KVM宿主机基于该内存进行双向通信。由于本实施例直接通过Windows虚拟机分配的内存进行通信,在虚拟机内存中进行数据交互,其他程序无法对此进行操作,因此这种通信方法更加安全;而且Windows虚拟机与KVM宿主机基于内存进行通信没有任何延迟,还能够避免链路中断现象或设备不可用现象,因此这种通信方法稳定性更高。另外,由于本实施例可以对虚拟机中指定的内存进行分段,使不同的段执行不同的读写操作,因此这种通信方法的灵活性更高。另外,在KVM宿主机中查找虚拟机相应内存的内存位置时,本实施例利用虚拟机内存中一个特殊的保留位置,即:利用Windows虚拟机内存中内核模块数据结构的补丁信息指针字段,能够准确而快速地获取内存的位置,从而实现Windows虚拟机与KVM宿主机之间的通信,有利于提高两者之间的数据传输效率。
本申请还提供一种基于补丁机制的Windows虚拟机与KVM宿主机的通信系统,该系统主要包括:内存分配模块、挂接模块、内存确定模块和通信模块。内存分配模块和挂接模块设置于Windows虚拟机中,内存确定模块设置于KVM宿主机中,通过内存分配模块能够在Windows虚拟机的内核业务驱动模块中预先分配一块内存,然后利用挂接模块将该内存挂接到指定位置,然后利用内存确定模块根据当前Windows系统的补丁信息指针偏移量确定该内存,最后虚拟机和宿主机通过该内存进行双向通信。由于本实施例通过虚拟机内存进行虚拟机和宿主机之间的双向通信,其他程序无法获取虚拟机和宿主机之间的数据交互信息,且无法对虚拟机和宿主机之间的数据交互进行操作,因此该通信系统的安全性较高。而且基于内存实现两者之间的通信,使得通信过程没有任何延迟,不会出现链路中断或设备中断的情况,有利于提高通信系统的稳定性。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例所提供的一种基于补丁机制的Windows虚拟机与KVM宿主机的通信方法的流程示意图;
图2为本申请实施例所提供的一种基于补丁机制的Windows虚拟机与KVM宿主机的通信系统的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
随着云计算和大数据技术的发展,虚拟化技术的运用越来越广泛,现在的业务软件几乎都运行在虚拟化平台的虚拟机中。KVM由于其开源以及与Linux操作系统集成的原因,在目前的云数据中心中部署非常广泛。KVM虚拟化平台的KVM虚拟机上运行着云数据中心的关键业务,为成千上万的用户提供着不间断的服务,如何在KVM主机上管理虚拟机上的业务系统越来越重要。Windows虚拟机数量庞大,Windows驱动程序往往在业务系统中担负着核心作用。Windows驱动程序运行在内核空间,由于Windows虚拟机非开源,需要特定的机制,才能保证Windows业务驱动程序与KVM宿主机上的程序保持顺畅的数据通信。
为了更好地理解本申请,下面结合附图来详细解释本申请的实施方式。
实施例一
参见图1,图1为本申请实施例所提供的一种基于补丁机制的Windows虚拟机与KVM宿主机的通信方法的流程示意图。由图1可知,本实施例中Windows虚拟机与KVM宿主机的通信方法,主要包括如下步骤:
S1:当Windows虚拟机业务驱动实现时,在Windows虚拟机的内核业务驱动模块中预先分配一块内存。
本实施例在Windows虚拟机业务驱动实现时,在Windows虚拟机的内核业务驱动模块中分配一块内存,相当于打通了Windows虚拟机业务驱动和KVM宿主机之间传输的通道。基于内存的数据传输其他程序无法获取数据交互信息,也无法对虚拟机和宿主机之间的通信进行操作,因此这种通信方法使得数据传输更加安全;而且,基于内存的数据传输不需要任何链路的维护,从而能够避免链路终端或设备不可用等现象,因此这种通信方法使得数据传输效率更高,且数据传输质量更加可靠。
S3:在Windows虚拟机中,利用内核业务驱动模块数据结构中的补丁信息指针字段,挂接内存。
也就是:在Windows虚拟机的内核业务驱动模块中分配一块内存之后,在Windows虚拟机中将该内存挂接到指定位置,使该内存的指针设置到内核模块链表中内核业务驱动模块的数据结构所对应的补丁信息指针上。
本实施例中的数据结构为内核对象数据结构,Windows操作系统中内核对象数据结构的名称为:LDR_DATA_TABLE_ENTRY。Windows操作系统中的内核对象数据结构是一个未公开的数据结构,该数据结构用于标明要待加载驱动的信息,这些待加载驱动的信息包括:加载顺序链表指针、异常表、异常表大小、加载基地址、入口点指针、映像大小、驱动模块全路径、驱动模块名称、加载次数、校验码以及补丁信息指针等。其中,补丁信息指针是所有内核驱动用于自身打补丁时使用的,本实施例主要利用内核对象数据结构中的补丁信息指针,对内存进行挂接。
具体地,步骤S3包括如下过程:
S31:当Windows虚拟机业务驱动实现时,在初始化函数中获取第一补丁信息指针。其中,第一补丁信息指针为挂接前内核模块数据结构中的原始补丁信息指针。
本实施例中的数据结构为内核对象数据结构,且该数据结构中包括补丁信息指针,Windows业务驱动程序可以在初始化函数中获取该数据结构的原始补丁信息指针。在对业务驱动自身分配的内存进行挂接之前,数据结构中的原始补丁信息指针为空的,或者是指向其他内存的指针的,本实施例中将其定义为第一补丁信息指针。
S32:将第一补丁信息指针替换为第二补丁信息指针,并保存第一补丁信息指针。其中,第二补丁信息指针为内存的指针,也就是内核业务驱动模块所分配的内存的指针。
也就是,通过步骤S31获取到数据结构的原始补丁信息指针之后,将该原始补丁信息指针替换为业务驱动自身分配的内存,本实施例中将业务驱动自身分配的内存定义为第二补丁信息指针。通过执行补丁信息指针的替换,补丁信息指针之前指向其他内存或者为空,现在指向业务驱动自身分配的内存,将业务驱动自身分配的内存的地址赋给当前的补丁信息指针。将数据结构中的原始补丁信息指针替换为业务驱动自身分配的补丁信息指针的同时,保存原始补丁信息指针,以便于后续卸载当前业务驱动后,能够对补丁信息指针进行复原。
将第一补丁信息指针替换为第二补丁信息指针后,执行步骤S33和S34,具体如下:
S33:当加载业务驱动时,内核业务驱动模块数据结构中的补丁信息指针更新为第二补丁信息指针。
S34:当卸载业务驱动时,内核业务驱动模块数据结构中的补丁信息指针变更为第一补丁信息指针。
通过以上步骤S31-S34,能够将内核业务驱动分配的内存挂接到指定位置,使得后续KVM宿主机上的程序通过对模块数据结构分析,能够找到相应的内存,从而实现Windows虚拟机与KVM宿主机之间的通信。
继续参见图1可知,在Windows虚拟机中分配一块内存,并将其挂接到指定位置之后,执行步骤S4:KVM宿主机根据当前Windows虚拟机的内核模块链表中内核业务驱动的补丁信息指针偏移量,确定内存。
具体地,步骤S4包括如下过程:
S41:KVM宿主机遍历Windows虚拟机的内核模块列表,根据内核模块列表中的驱动名称,确定需要通过内存进行通信的内核业务驱动。
遍历Windows虚拟机的内核模块列表,即:遍历Windows虚拟机中所有内核模块的信息。本实施例中KVM宿主机可以利用Libvmi技术遍历Windows虚拟机的内核模块列表。Libvmi是一个C库,它能够对正在运行中的底层虚拟机的运行细节提供监视功能,该监视功能主要是通过观察内存细节、陷入硬件事件和读取CPU寄存器来完成。Libvmi所提供的各种功能中,最主要的是内存自省功能,内存自省能允许读取虚拟机内存数据以及改写虚拟机内存数据,以便控制虚拟机操作系统的运行。本实施例中利用Libvmi技术遍历Windows虚拟机的内核模块列表,主要是利用了Libvmi技术在KVM宿主机上读取和写入虚拟机内存的能力。
内核模块列表包括所有内核模块的信息,不同内核模块具有不同的驱动名称,根据内核业务驱动名称,能够快速而准确地判断每个驱动名称是否为进行通信的业务驱动,从而准确地确定需要通过内存进行通信的内核业务驱动。
S42:根据Windows虚拟机中当前内核业务驱动模块的补丁信息指针偏移量,确定内核业务驱动的补丁信息指针。
本实施例中补丁信息指针偏移量,是指补丁信息指针在内核模块结构体中的位置,不同版本的Windows操作系统之间,补丁信息指针偏移量不同,执行步骤S42时,需要确定当前Windows虚拟机中的补丁信息指针偏移量,然后根据当前的补丁信息指针偏移量,确定内核业务驱动的补丁信息指针。
根据补丁信息指针偏移量确定补丁信息指针的方法,以Win7 32位操作系统为例,KVM宿主机程序在Win7 32位操作系统上找到业务驱动模块数据结构之后,在该数据结构开始的第72个字节,即为当前内核业务驱动的补丁信息指针。
本实施例中根据补丁信息指针偏移量所确定的内核业务驱动的补丁信息指针,也就是步骤S32中的第二补丁信息指针。
S43:根据内核业务驱动的补丁信息指针,获取内核业务驱动分配的内存。
指针即内存地址,确定内核业务驱动的补丁信息指针后,即可根据该地址获取内核业务驱动分配的内存。由于此时内核业务驱动的补丁信息指针即第二补丁信息指针,因此步骤S43也可以理解为:根据第二补丁信息指针,获取内核业务驱动分配的内存。
由以上步骤S41-S43可知,在启动时,KVM宿主机上的程序通过Libvmi技术遍历所有内核驱动模块信息,按Windows系统中内核对象数据结构找到内核驱动模块的名称,根据内核驱动模块的名称,判断是不是业务驱动程序;当发现业务驱动程序的信息后,通过当前Windows操作系统的版本所匹配的补丁信息指针偏移量,获取补丁信息指针;再根据补丁信息指针所指向的内存地址,KVM主机上的程序确定内核业务驱动分配的内存。
继续参见图1可知,通过步骤S41-S43确定内核业务驱动分配的内存之后,执行步骤S5:Windows虚拟机与KVM宿主机基于内存进行双向通信。
也就是确定内核业务驱动分配的内存之后,KVM主机上的程序就可以对该内存进行读写了,而该内存是由Windows虚拟机上的业务驱动分配的,显然Windows虚拟机上的业务驱动也能够对该内存进行读写该,因此,Windows虚拟机与KVM宿主机能够基于该内存进行双向通信。
进一步地的,本实施例在步骤S1之后,还包括步骤S2:对内存进行分段,且不同的段用于执行不同的读写操作。
具体地,在Windows虚拟机的内核业务驱动模块中预先分配一块内存之后,可以针对该内存进行分段,例如:可以将该内存分为两个段,一个段用于执行Windows虚拟机写操作和KVM宿主机读操作,另一个段用于执行KVM宿主机写操作和Windows虚拟机读操作。对内存进行分段,有利于增加Windows虚拟机与KVM宿主机之间不同的通信场景,进一步提高本实施例中通信方法的灵活性,从而提高用户体验。
实施例二
在图1所示实施例的基础之上参见图2,图2为本申请实施例所提供的一种基于补丁机制的Windows虚拟机与KVM宿主机的通信系统的结构示意图。由图2可知,本实施例中Windows虚拟机与KVM宿主机的通信系统主要包括:内存分配模块、挂接模块、内存确定模块和通信模块。
其中,内存分配模块设置于Windows虚拟机中,用于当Windows虚拟机业务驱动实现时,在Windows虚拟机的内核业务驱动模块中预先分配一块内存。挂接模块设置于Windows虚拟机中,用于在Windows虚拟机中,利用内核业务驱动模块数据结构中的补丁信息指针字段,挂接内存。内存确定模块设置于KVM宿主机中,用于根据当前Windows虚拟机的内核模块链表中内核业务驱动的补丁信息指针偏移量,确定内存。通信模块用于在Windows虚拟机与KVM宿主机中,基于内存进行双向通信。
进一步地,挂接模块又包括:第一补丁信息指针获取单元、替换单元、第一更新单元和第二更新单元。其中,第一补丁信息指针获取单元用于当Windows虚拟机业务驱动实现时,在初始化函数中获取第一补丁信息指针,第一补丁信息指针为挂接前内核模块数据结构中的原始补丁信息指针。替换单元用于将第一补丁信息指针替换为第二补丁信息指针,并保存第一补丁信息指针,第二补丁信息指针为内核业务驱动所分配的内存的指针。第一更新单元用于当加载业务驱动时,将内核业务驱动模块数据结构中的补丁信息指针更新为第二补丁信息指针。第二更新单元用于当卸载业务驱动时,将内核业务驱动模块数据结构中的补丁信息指针变更为第一补丁信息指针。
内存确定模块又包括:遍历单元、补丁信息指针确定单元和内存查找单元。其中,遍历单元用于遍历Windows虚拟机的内核模块列表,根据内核模块列表中的驱动名称确定需要通过内存进行通信的内核业务驱动。补丁信息指针确定单元,用于根据Windows虚拟机中当前内核业务驱动模块的补丁信息指针偏移量,确定内核业务驱动的补丁信息指针。内存查找单元用于根据内核业务驱动的补丁信息指针,获取内核业务驱动分配的内存。
进一步地,本实施例的通信系统中还包括有分段模块,该分段模块用于对内存进行分段,且不同的段用于执行不同的读写操作。
该实施例中Windows虚拟机与KVM宿主机的通信系统的工作原理和工作方法,在图1所示的实施例一中已经详细阐述,在此不再赘述。
以上所述仅是本申请的具体实施方式,使本领域技术人员能够理解或实现本申请。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (7)
1.一种基于补丁机制的Windows虚拟机与KVM宿主机的通信方法,其特征在于,所述方法包括:
当Windows虚拟机业务驱动实现时,在所述Windows虚拟机的内核业务驱动模块中预先分配一块内存;
在所述Windows虚拟机中,利用内核业务驱动模块数据结构中的补丁信息指针字段,挂接所述内存;
KVM宿主机根据当前Windows虚拟机的内核模块链表中内核业务驱动的补丁信息指针偏移量,确定所述内存;
Windows虚拟机与KVM宿主机基于所述内存进行双向通信;
其中,在所述Windows虚拟机中,利用内核业务驱动模块数据结构中的补丁信息指针字段,挂接所述内存的方法,包括:
当Windows虚拟机业务驱动实现时,在初始化函数中获取第一补丁信息指针,所述第一补丁信息指针为挂接前内核模块数据结构中的原始补丁信息指针;
将所述第一补丁信息指针替换为第二补丁信息指针,并保存所述第一补丁信息指针,所述第二补丁信息指针为所述内存的指针;
当加载业务驱动时,内核业务驱动模块数据结构中的补丁信息指针更新为第二补丁信息指针;
当卸载业务驱动时,内核业务驱动模块数据结构中的补丁信息指针变更为第一补丁信息指针。
2.根据权利要求1所述的一种基于补丁机制的Windows虚拟机与KVM宿主机的通信方法,其特征在于,KVM宿主机根据当前Windows虚拟机的内核模块链表中内核业务驱动的补丁信息指针偏移量,确定所述内存的方法,包括:
KVM宿主机遍历Windows虚拟机的内核模块列表,根据内核模块列表中的驱动名称,确定需要通过内存进行通信的内核业务驱动;
根据Windows虚拟机中当前内核业务驱动模块的补丁信息指针偏移量,确定所述内核业务驱动的补丁信息指针;
根据所述内核业务驱动的补丁信息指针,获取所述内核业务驱动分配的内存。
3.根据权利要求2所述的一种基于补丁机制的Windows虚拟机与KVM宿主机的通信方法,其特征在于,所述KVM宿主机遍历Windows虚拟机的内核模块列表的方法,具体为:
KVM宿主机利用Libvmi技术,遍历Windows虚拟机的内核模块列表。
4.根据权利要求1-3中任一所述的一种基于补丁机制的Windows虚拟机与KVM宿主机的通信方法,其特征在于,当Windows虚拟机业务驱动实现时,在所述Windows虚拟机的内核业务驱动模块中预先分配一块内存之后,所述方法还包括:
对所述内存进行分段,且不同的段用于执行不同的读写操作。
5.一种基于补丁机制的Windows虚拟机与KVM宿主机的通信系统,其特征在于,所述系统包括:
内存分配模块,设置于Windows虚拟机中,用于当Windows虚拟机业务驱动实现时,在所述Windows虚拟机的内核业务驱动模块中预先分配一块内存;
挂接模块,设置于Windows虚拟机中,用于在所述Windows虚拟机中,利用内核业务驱动模块数据结构中的补丁信息指针字段,挂接所述内存;
内存确定模块,设置于KVM宿主机中,用于根据当前Windows虚拟机的内核模块链表中内核业务驱动的补丁信息指针偏移量,确定所述内存;
通信模块,用于在Windows虚拟机与KVM宿主机中,基于所述内存进行双向通信;
其中,所述挂接模块包括:
第一补丁信息指针获取单元,用于当Windows虚拟机业务驱动实现时,在初始化函数中获取第一补丁信息指针,所述第一补丁信息指针为挂接前内核模块数据结构中的原始补丁信息指针;
替换单元,用于将所述第一补丁信息指针替换为第二补丁信息指针,并保存所述第一补丁信息指针,所述第二补丁信息指针为所述内存的指针;
第一更新单元,用于当加载业务驱动时,将内核业务驱动模块数据结构中的补丁信息指针更新为第二补丁信息指针;
第二更新单元,用于当卸载业务驱动时,将内核业务驱动模块数据结构中的补丁信息指针变更为第一补丁信息指针。
6.根据权利要求5所述的一种基于补丁机制的Windows虚拟机与KVM宿主机的通信系统,其特征在于,所述内存确定模块包括:
遍历单元,用于遍历Windows虚拟机的内核模块列表,根据内核模块列表中的驱动名称确定需要通过内存进行通信的内核业务驱动;
补丁信息指针确定单元,用于根据Windows虚拟机中当前内核业务驱动模块的补丁信息指针偏移量,确定所述内核业务驱动的补丁信息指针;
内存查找单元,用于根据所述内核业务驱动的补丁信息指针,获取所述内核业务驱动分配的内存。
7.根据权利要求5或6所述的一种基于补丁机制的Windows虚拟机与KVM宿主机的通信系统,其特征在于,所述系统还包括:分段模块,用于对所述内存进行分段,且不同的段用于执行不同的读写操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910552215.7A CN110262875B (zh) | 2019-06-25 | 2019-06-25 | 基于补丁机制的Windows虚拟机与KVM宿主机的通信方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910552215.7A CN110262875B (zh) | 2019-06-25 | 2019-06-25 | 基于补丁机制的Windows虚拟机与KVM宿主机的通信方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110262875A CN110262875A (zh) | 2019-09-20 |
CN110262875B true CN110262875B (zh) | 2021-04-27 |
Family
ID=67921090
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910552215.7A Active CN110262875B (zh) | 2019-06-25 | 2019-06-25 | 基于补丁机制的Windows虚拟机与KVM宿主机的通信方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110262875B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20200150997A1 (en) * | 2020-01-17 | 2020-05-14 | Yu Bruce Chang | Windows live migration with transparent fail over linux kvm |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101403983A (zh) * | 2008-11-25 | 2009-04-08 | 北京航空航天大学 | 基于虚拟机的多核处理器的资源监控方法及系统 |
CN101859263A (zh) * | 2010-06-12 | 2010-10-13 | 中国人民解放军国防科学技术大学 | 一种支持在线迁移的虚拟机间快速通信方法 |
CN108845863A (zh) * | 2018-06-12 | 2018-11-20 | 北京百度网讯科技有限公司 | 用于虚拟机与宿主机的通信方法、装置和系统 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103593246B (zh) * | 2012-08-15 | 2017-07-11 | 中国电信股份有限公司 | 虚拟机和宿主机之间的通信方法、宿主机和虚拟机系统 |
CN104123233A (zh) * | 2013-04-26 | 2014-10-29 | 华茂云天科技(北京)有限公司 | 一种虚拟机大容量内存共享方法 |
CN106817388B (zh) * | 2015-11-30 | 2020-07-28 | 阿里巴巴集团控股有限公司 | 虚拟机、宿主机获取数据的方法、装置及访问数据的系统 |
CN106874128B (zh) * | 2017-01-22 | 2020-11-20 | 广州华多网络科技有限公司 | 数据传输方法及装置 |
CN108595244A (zh) * | 2017-12-05 | 2018-09-28 | 北京神州绿盟信息安全科技股份有限公司 | 虚拟机内外通信方法、虚拟机、物理主机及虚拟机系统 |
US11487567B2 (en) * | 2018-11-05 | 2022-11-01 | Intel Corporation | Techniques for network packet classification, transmission and receipt |
-
2019
- 2019-06-25 CN CN201910552215.7A patent/CN110262875B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101403983A (zh) * | 2008-11-25 | 2009-04-08 | 北京航空航天大学 | 基于虚拟机的多核处理器的资源监控方法及系统 |
CN101859263A (zh) * | 2010-06-12 | 2010-10-13 | 中国人民解放军国防科学技术大学 | 一种支持在线迁移的虚拟机间快速通信方法 |
CN108845863A (zh) * | 2018-06-12 | 2018-11-20 | 北京百度网讯科技有限公司 | 用于虚拟机与宿主机的通信方法、装置和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN110262875A (zh) | 2019-09-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10795688B2 (en) | System and method for performing an image-based update | |
CN109168328B (zh) | 虚拟机迁移的方法、装置和虚拟化系统 | |
US11886902B2 (en) | Physical-to-virtual migration method and apparatus, and storage medium | |
CN112199240B (zh) | 一种节点故障时进行节点切换的方法及相关设备 | |
CN112783444A (zh) | 集群磁盘共享方法、系统及存储介质 | |
CN105867962A (zh) | 系统升级的方法和装置 | |
CN111124615A (zh) | 一种虚拟机迁移方法、装置、设备及计算机可读存储介质 | |
CN112506616A (zh) | 一种基于云平台卷实现虚拟机跨云快速恢复的系统及方法 | |
CN110262875B (zh) | 基于补丁机制的Windows虚拟机与KVM宿主机的通信方法及系统 | |
US20220206836A1 (en) | Method and Apparatus for Processing Virtual Machine Migration, Method and Apparatus for Generating Virtual Machine Migration Strategy, Device and Storage Medium | |
US20180081930A1 (en) | Maintaining storage profile consistency in a cluster having local and shared storage | |
WO2023087622A1 (zh) | 虚拟机引导的配置方法、装置、计算机设备和存储介质 | |
CN110413311A (zh) | 系统配置方法及服务器 | |
CN109995571B (zh) | 服务器配置与vnf应用匹配的方法及装置 | |
CN111930707B (zh) | 一种windows云迁移的盘符修正方法及系统 | |
US11226775B2 (en) | Extracting drive letters for partitions in an offline virtual disk | |
CN114443295A (zh) | 一种异构云资源管理调度方法、装置及系统 | |
CN109101253B (zh) | 云计算系统中主机的管理方法和装置 | |
CN113760446A (zh) | 资源调度方法、装置、设备及介质 | |
US20240020103A1 (en) | Parallelizing data processing unit provisioning | |
US20240036896A1 (en) | Generating installation images based upon dpu-specific capabilities | |
US11061666B1 (en) | Distributing computing tasks to individual computer systems | |
CN110795201B (zh) | 一种云平台中服务器的管理方法及装置 | |
CN109245920B (zh) | 交换机自动配置方法、装置、交换机和存储介质 | |
CN116088916A (zh) | 一种用于kvm虚拟化软件的热升级方法与设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |