APP下载

个人防火墙系统内部模块间通讯的设计与实现

2012-03-20谢秀维

网络安全技术与应用 2012年4期

谢秀维

中国人民银行沧州中心支行科技科 河北 061001

0 引言

随着Internet不断的发展和普及,网络信息安全问题越来越受到人的关注,时常让人担忧。攻击者利用计算机硬件、软件、网络设备等安全漏洞进行攻击。攻击事件一旦发生就可能导致有关的服务中断、重要商业信息失窃、研究机构的重要数据丢失甚至涉及到国家机密等,其灾难性后果不言而喻。防火墙是网络信息安全的主要技术手段之一,个人防火墙得到了广泛应用。

由于防火墙涉及系统文件SYS、动态连接库DLL和用户界面应用程序EXE,因此,不同进程间数据共享就变得至关重要。DLL安装在应用程序和驱动程序之间,为上层应用程序提供网络连接服务。

DLL与EXE及其它调用它的进程都需要共享控管规则数据,但这些数据都不是固定长度的,因此选用了内存映射的方法。此外,由于DLL和SYS都是对截获的封包缓冲区进行操作,如采用全局变量则会降低模块的独立性,而采用内存映射正好解决了这一问题。

1 数据共享

因为 Windows2000不允许应用层的程序直接访问系统内存的地址空间,为了在EXE,DLL和SYS之间共享内存,实现内存共享的原理是:首先用驱动程序(SYS)申请内存空间,SYS中申请的内存在系统地址空间(>=0x80000000),为了让EXE和DLL能够访问这个空间,需要将系统地址空间映射到用户地址空间(<0x80000000),具体的步骤是:

(1) 在SYS中申请内存空间,代码如下:

SystemVirtualAddress=MmAllocateContiguousMemory(NumberOfBytes,HighestAcceptableAddress );

(2) 申请一个MDL结构,代码如下:

Mdl = IoAllocateMdl (SystemVirtualAddress, NumberOfBytes,FALSE,FALSE, NULL);

(3) 在MDL结构中标识内存页

①如果申请内存时使用了非分页池(non-paged pool),使用下面的代码:

MmBuildMdlForNonPagedPool (Mdl);

②如果申请……

登录APP查看全文