一种Windows内核大数据高速通信技术制造技术

技术编号:21115458 阅读:81 留言:0更新日期:2019-05-16 08:54
本发明专利技术公开了一种Windows内核大数据高速通信技术,该发明专利技术针对现有技术中Windows内核缓冲区设备读写,直接方式读写,和其他方式读写的不足,采用Windows内核共享内存的方案,达到Windows内核和应用层大数据高速通信的目的。

【技术实现步骤摘要】
一种Windows内核大数据高速通信技术
本专利技术涉及一种互联网通信
,特别涉及一种Windows内核大数据高速通信技术。
技术介绍
千兆网卡抓包审计,需要在Windows内核中进行抓包,然后把内容发给应用层,进行处理,现有的通信方式速度太慢,无法满足千兆网卡抓包的吞吐量,导致经常丢包。所以需要一种大数据高速通信的技术方式,实现千兆网卡的吞吐量数据传输。
技术实现思路
为克服现有技术的不足,本专利技术通过驱动程序创建内核事件,分配内存页,并映射这些内存页到指定用户模式进程的地址空间,并且将地址返回给应用程序。应用程序打开事件句柄,并进行监听等待。驱动程序抓包获取数据,写入共享内存中,通过事件通知应用程序直接读取共享内存,进行循环处理。驱动程序分配内存页并且映射这些页到特定进程的用户虚拟地址空间上。同时也允许驱动对分配内存的类型具有最大的控制能力。在驱动中使用MmAllocatePagesForMdl分配内存页,得到MDL,然后将该MDL所描述的内存映射到用户层地址空间(MmMapLockedPagesSpecifyCache)。得到用户地址空间的起始地址,并通过IOCTL返回给用户层。驱动无论使用什么标准方法,都是希望分配内存来共享。例如,如果驱动需要一个适当的设备(逻辑)地址作DMA,就像内存块的内核虚拟地址,它能够使用AllocateCommonBuffer来分配内存。如果没有要求特定的内存特性,要被共享的内存大小也是适度的,驱动可以将0填充、非分页物理内存页分配给缓冲区。本专利技术本专利技术技术方案带来的有益效果:本专利技术采用Windows内核共享内存的方案,缓冲数据大,处理速度快,可以及时处理处理千兆网卡的抓包信息;同时安全稳定,不容易导致系统不稳定。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。图1为本专利技术的流程示意图;具体实施方式下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。具体实施方案:驱动程序分配内存页并且映射这些页到特定进程的用户虚拟地址空间上。同时也允许驱动对分配内存的类型具有最大的控制能力。在驱动中使用MmAllocatePagesForMdl分配内存页,得到MDL,然后将该MDL所描述的内存映射到用户层地址空间(MmMapLockedPagesSpecifyCache)。得到用户地址空间的起始地址,并通过IOCTL返回给用户层。驱动无论使用什么标准方法,都是希望分配内存来共享。例如,如果驱动需要一个适当的设备(逻辑)地址作DMA,就像内存块的内核虚拟地址,它能够使用AllocateCommonBuffer来分配内存。如果没有要求特定的内存特性,要被共享的内存大小也是适度的,驱动可以将0填充、非分页物理内存页分配给缓冲区。使用MmAllocatePagesForMDL或者MmAllocatePagesForMdlEx从内存中分配非分页的内存页。这些函数返回一个MDL。驱动使用函数MmGetSystemAddressForMdlSafe映射MDL描述的页到内核虚拟地址空间。从主内存分配页比使用分页内存池或者非分页内存池得到的内存更加安全。这种方式是内核来分配内存空间,但是是使用MmAllocatePagesForMDL从主内存池中分配,返回得到一个MDL,对于驱动如何使用该共享内存,采用MmGetSystemAddressForMdlSafe得到其内核地址。对于应用层使用该共享内存,采用MmMapLockedPagesSpecifyCache映射到应用层进程地址空间中,返回用户层地址空间的起始地址,将其放在IOCTL中返回给用户应用程序。借助一个用来描述共享内存的MDL,驱动现在准备映射这些页到用户进程地址空间。这可以使用函数MmMapLockedPagesSpecifyCache来实现。必须在你希望映射Buffer的进程上下文中调用这个函数。如果是在别的进程上下文中调用,就变成了映射到其他进程上下文中了,需要保证在希望映射Buffer的进程上下文中调用。设定AccessMode参数为UserMode。对MmMapLockedPagesSpecifyCache函数调用返回值是MDL描述内存页映射的用户虚拟地址空间地址。驱动可以将其放在对应IOCTL的缓存中给用户应用程序。需要有一个方法,在不需要时将分配的内存清除掉。需要调用MmFreePageFromMdl来释放内存页。并且调用IoFreeMdl来释放由MmAllocatePageForMdl(Ex)创建的MDL。你几乎都是在你驱动的IRP_MJ_CLEANUP处理例程(WDM)或者EvtFileCleanup事件处理回调(KMDF中作这个工作)。核心代码如下:PVOIDCreateAndMapMemory(OUTPMDL*PMemMdl,OUTPVOID*UserVa){PMDLMdl;PVOIDUserVAToReturn;PHYSICAL_ADDRESSLowAddress;PHYSICAL_ADDRESSHighAddress;SIZE_TTotalBytes;//初始化MmAllocatePagesForMdl需要的PhysicalAddressLowAddress.QuadPart=0;MAX_MEM(HighAddress.QuardPart);TotalBytes.QuadPart=PAGE_SIZE;//分配4K的共享缓冲区Mdl=MmAllocatePagesForMdl(LowAddress,HighAddress,LowAddress,TotalBytes);if(!Mdl){ReturnSTATUS_INSUFFICIENT_RESOURCES;}//映射共享缓冲区到用户地址空间UserVAToReturn=MmMapLockedPagesSpecifyCache(Mdl,UserMode,MmCached,NULL,FALSE,NormalPagePriority);if(!UserVAToReturn){MmFreePagesFromMdl(Mdl);IoFreeMdl(Mdl);ReturnSTATUS_INSUFFICIENT_RESOURCE;}//返回,得到MDL和用户层的虚拟地址*UserVa=UserVAToReturn;*PMemMdl=Mdl;returnSTATUS_SUCCESS;}当然,这种方法也有缺点,调用MmMapLockedPagesSpecifyCache必须在你希望内存页被映射的进程上下文来做。较之使用METHOD_NEITHER的IOCTL方法,该方法表现出不必其更多的灵活性。然而,不像前者,后者只需一个函数(MmMapLockerPagesS本文档来自技高网...

【技术保护点】
1.一种Windows内核大数据高速通信技术,该专利技术通过驱动程序创建内核事件,分配内存页,并映射这些内存页到指定用户模式进程的地址空间,并且将地址返回给应用程序;应用程序打开事件句柄,并进行监听等待;驱动程序抓包获取数据,写入共享内存中,通过事件通知应用程序直接读取共享内存,进行循环处理。

【技术特征摘要】
1.一种Windows内核大数据高速通信技术,该发明通过驱动程序创建内核事件,分配内存页,并映射这些内存页到指定用户模式进程的地址空间,并且将地址返回给应用程序;应用程序打开事件句柄,并进行监听等待;驱动程序抓包获取数据,写入共享内存中,通过事件通知应用程序直接读取共享内存,进行循环处理。2.根据权利要求1所述的一种Windows内核大数据高速通信技术,其特征在于:驱动程序分配内存页并且映射这些页到...

【专利技术属性】
技术研发人员:杨育斌庞博柯宗贵
申请(专利权)人:蓝盾信息安全技术股份有限公司
类型:发明
国别省市:广东,44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1