详细描述
在下列描述中,将描述本发明的各种实施例。为了说明,阐述了特定的配置和细节,以便提供实施例的彻底理解。但是,对于本领域的一个熟练技术人员而言,可以在没有这些特定细节的情况下实现本发明也是显而易见的。而且,为了突出所述实施例,可省略或简化众所周知的特征。
在进行本发明各种实施例的描述之前,先提供在其中本发明的各种实施例可以实现的计算机和网络环境的描述。尽管不是必要的,但本发明将在由计算机执行的诸如程序模块的计算机可执行指令通用环境中描述。通常,程序包括执行特定任务或实现特定抽象数据类型的例程、对象、组件、数据结构等等。这里所用的术语“程序”或“模块”可指单个程序模块或共同行动的多个程序模块。这里所用的术语“计算机”和“计算设备”包括任何以电子方式执行一个或多个程序的设备,诸如个人计算机(PC)、手持设备、多处理器系统、基于微处理器的可编程消费电子产品、网络PC、小型机、板式PC、膝上型计算机、具有微处理器或微控制器的消费用具、路由器、网关、集线器等等。本发明还可在分布式计算环境中使用,其中任务由通过通信网络链接的远程处理设备执行。在分布式计算环境中,程序可位于本地和远程两者的存储器设备中。
参考图1描述适合于结合本发明各方面的计算机网络环境的例子。示例计算机网络环境包括通过用云表示的安全网络104而彼此通信的若干计算机102。安全网络104可包括许多众所周知的组件,诸如路由器、网关、集线器等,并允许计算机102通过有线和/或无线介质通信。当通过安全网络104彼此交互时,一个或多个计算机102可用作客户机、服务器或相对于其它计算机102的对等机。因而,本发明的各种实施例可在客户机、服务器、对等机或它们的组合上实现,尽管这里所包含的特定例子可能不引用所有这些类型的计算机。
这个例子中的安全网络104被认为是“安全的”网络,其中计算机102由通用的防火墙保护,在此例中被示为因特网网关设备106。因特网网关设备106保护计算机102不受位于在此例中用云表示的公共或不安全网络110上的远程计算机108的侵害。尽管被描述为因特网网关设备106,但这个网关设备可保护安全网络不受其它类型的不安全网络的侵害,不一定是因特网,还包括LAN、WAN或其它合适的网络。
尽管被示为具有多个计算机,但安全网络104可只包括单个计算机102。另外,尽管不安全网络110被示为具有多个远程计算机108,但它也可只有一个。
参考图2,所示的是在此所述的本发明可以在其上实现的计算机102的基本配置的例子。在其最基本配置中,计算机102一般包括至少一个处理单元202和存储器204。处理单元202执行指令以完成按照本发明各种实施例的任务。在完成这样的任务时,处理单元202可发送电子信号到计算机102的其它部分及计算机102外部的设备以产生某些结果。取决于计算机102的准确配置和类型,存储器204可以是易失性的(诸如RAM)、非易失性的(诸如ROM或闪存)、或两者的某种结合。这种最基本配置用虚线206示于图2。
计算机102还可具有附加的部件/功能。例如,计算机102还可包括附加的存储器(可移动的208和/或不可移动的210),包括(但不限于)磁盘、光盘或磁带。计算机存储介质包括以任何方法或技术存储信息的易失性的和非易失性的、可移动的和不可移动的介质存储信息(包括计算机可执行指令、数据结构、程序模块或其它数据)。计算机存储介质包括(但不限于)RAM、ROM、EEPROM、闪存、CD-ROM、数字通用盘(DVD)或其它光存储器、磁带盒、磁带、磁盘存储器或其它磁存储设备、或任何其它能够用于存储所要的信息并能由计算机102访问的介质。任何这样的计算机存储介质都可以是计算机102的一部分。
计算机102较佳地还包含通信连接212,它允许设备与其它设备通信,诸如在安全网络104上的其它计算机102或不安全网络110上的远程计算机108(图2只示出了一台远程计算机108)。通信连接是通信介质的一个例子。通信介质一般包含在诸如载波或其它传输机制的调制数据信号中的计算机可读指令、数据结构、程序模块或其它数据,并包括任何信息传递介质。作为例子(而非限制地)术语“通信介质”包括无线介质,诸如声学、RF、红外及其它无线介质。这里所用的术语“计算机可读介质”包括计算机存储介质和通信介质两者。
计算机102还可具有输入设备216,诸如键盘/小键盘、鼠标、笔、声音输入设备、触摸输入设备等。还可包括输出设备218,诸如显示器220、扬声器、打印机等。这些设备在本领域中众所周知,不需要在此详述。
在随后的描述中,将参考可由一个或多个计算设备执行的动作和操作的符号表示法来描述本发明,除非另有指示。这样,将要理解这种动作和操作,它们有时被称为是由计算机可执行的,包括由计算机102的处理单元以结构化形式表示数据的电子信号的管理。这种处理转换数据或将它保存在计算机102的存储系统中的单元上,它以本领域那些熟练技术人员都理解的方式重新配置或者改变计算机102的操作。保存数据的数据结构是具有由数据格式定义的特定属性的存储器的物理单元。但是,虽然在前述的环境中描述本发明,但并不意味着限制本发明,如那些本领域熟练技术人员将意识到的,这里所述的几种动作和操作还可用硬件实现。
图3是方框图,说明按照本发明的一个实施例可使用的计算机102结构的细节。计算机102包括具有与其相关联的主机防火墙(host firewall),如防火墙代码302所表示的操作系统300。防火墙代码302可以是操作系统300的一个组件或者在计算机102上运行的分离的应用或程序。在所示例子中,防火墙代码302用作主机防火墙,它在那里保护它在其上运行的计算机102。
计算机102还包括实施模块304,它关联于或者就是操作系统300的一个集成部分。实施模块304的功能和部件在下面进一步描述。
按照本发明的一个方面,察觉性防火墙的应用306可以连接到操作系统300和/或实施模块304。除了直接的连接,为察觉性防火墙的应用306提供应用API308来调用实施模块304的功能,将如下面进一步描述。
按照本发明的另一个实施例,非察觉性防火墙的应用310也可连接到操作系统300和/或实施模块304。除了直接连接到操作系统300和/或实施模块304外,为非察觉性防火墙的应用310提供了套接字API 312来调用实施模块304的功能,将如下面还要进一步描述。
防火墙策略314被存储或者关联于计算机102,并可以由操作系统300和/或防火墙代码302访问。在所示实施例中,将防火墙策略314示为数据库,但可以在几个数据库中保存防火墙策略314或者可以用另外的合适的方式存储防火墙策略314。
可提供代理320用于与因特网网关设备106通信。另外,因特网网关设备106包括防火墙软件324(后面称为“边界防火墙324”),可实现它,以便以已知方式保护安全网络104不受远程计算机108侵害。此外,按照本发明的一个方面,在操作系统300上提供防火墙API 326供防火墙代码302访问。
按照本发明的一个实施例,察觉性防火墙的应用306可通过应用API 308请求防火墙代码302和/或边界防火墙324的显式穿越。通过“显式(explicit)”,我们是指穿越防火墙代码302和/或边界防火墙324是由察觉性防火墙的应用306明确地请求的。如在背景章节中描述的,对于先前技术的网络系统,防火墙用试探法来猜测应用的意图。相反,对于本发明,提供了应用API 308,因此察觉性防火墙的应用306(或察觉性防火墙的服务)可显式描述它的需求并将它的请求传送到防火墙代码302和/或边界防火墙324。
察觉性防火墙的应用306可请求各种其它可由防火墙代码302和/或边界防火墙324实施的服务。作为一个例子,察觉性防火墙的应用306可请求与安全网络104外部的一个或多个已知端点连接。连接可以是单一的、一次性连接或者可产生同一连接的许多实例。作为另一个例子,察觉性防火墙的应用306可请求入网和/或出网连接的带宽或连接阻塞(connection throttling)。还有另一个例子,察觉性防火墙的应用306可请求防火墙将连接范围限制到接口、本地或远程地址的子集。还有另一个例子,察觉性防火墙的应用306可请求只有认证过的客户可连接到特定端口。在另一个例子中,察觉性防火墙的应用306可请求实施最小或最大带宽规则和/或可为特定客户请求超时策略,诸如传输控制协议(“TCP”)客户。另外,察觉性防火墙的应用306还可请求特定的协议选项(诸如SACK)打开或关闭,目的是减少攻击面。作为另外的一个例子,察觉性防火墙的应用306可描述需要特别处理的流程的一个或多个属性,诸如与机密数据的连接。
察觉性防火墙的应用306可通过应用API 308将其请求传送到防火墙代码302和/或边界防火墙324。以下是可用于请求直接与诸如远程计算机108的远程计算机或节点通信的格式的结构的特定例子:
struct sockaddr Target;
...//用端点信息初始化Target结构
setsockopt(s,SOL_SOCKET,SO_REQUEST-ACCESS,
&Target,sizeof(Target));
在前述例子中,请求是针对特定套接字的。套接字选项名为SOL_SOCKET、SO_REQUEST_ACCESS。参数描述在术语“struct sockaddr Target”之后;并包括远程端点或者特定远程计算机108的描述。可用其它数据结构来由察觉性防火墙的应用306传送请求。
如果期望,操作系统300和/或实施模块304可向察觉性防火墙的应用306表示支持请求。同样地,操作系统300和/或实施模块304可返回一个值,表示已经接受请求的值并将它传送给防火墙,或者操作系统300不实现这个特定调用。可供选择地,操作系统300和/或实施模块304可返回正在检查状态的指示,并将让防火墙代码302和/或边界防火墙324最终作出决策。
察觉性防火墙的应用306可在应用安装后、请求连接后或者另外的合适时间进行它对应用API 308的调用。在向对应用API 308请求的时候、请求连接的时候或者在另外的时间,可使防火墙代码302和/或边界防火墙324知道这个请求。按照本发明的一个实施例,可在察觉性防火墙的应用306进行连接的尝试时使防火墙代码302和/或边界防火墙324知道该请求。也就是说,或者察觉性防火墙的应用306尝试通过防火墙代码302和/或边界防火墙324发送一些内容,或者察觉性防火墙的应用306表示它正等待通过防火墙之一的通信。为此目的,事件可产生反调用,诸如通用套接字事件通知机制。可将反调用传送到实施模块304。这样一个反调用的格式的例子阐述如下:
void SocketActivityCallback(
DWORD dwProcessID, //引起套接字事件的过程
SOCKET sock, //套接字句柄
SOCK_EVENT event, //套接字事件(例如,绑定)
LPVOID pDetails //套接字事件参数
DWORD cbDetails //事件参数大小
);
对于前述反调用,提供以下参数:dwProcessID,发起事件的过程的ID;sock,为之生成事件的套接字句柄;event,事件ID,诸如SOCKET_EVENT_BIND;pDetail,指向包含事件细节的斑点(blob)的指针,它是事件专用的;以及cbDetails,事件细节斑点大小。可使用其它数据结构或通知机制来通知实施模块304:察觉性防火墙的应用306正尝试建立连接。作为对于反调用的可供替换的例子,可使用输入/输出(I/O)调用。
在每个套接字事件发生后立即激活反调用。按照本发明的一个实施例,实施模块304在套接字事件发生时检查套接字事件并保存有关的套接字状态细节以允许对防火墙代码302和/或边界防火墙324进行适当的通信。
操作系统300和/或实施模块304利用防火墙API 326告知防火墙代码302:察觉性防火墙的应用306请求一个连接。通知可以是如上所述的,并可附加地包括应用专用信息,诸如应用信任级别、应用标识等等。防火墙代码306将请求与防火墙策略314比较并可能允许或拒绝请求。可能或可能不向应用给出指示。
另外,按照本发明实施例,防火墙代码302通知边界防火墙324:请求连接。这个信息可通过认证过的协议或通过代理320传送给边界防火墙324。边界防火墙324另外可对照它自己的策略(未示出,但在本领域中公知)检查请求。假设请求符合防火墙代码302和边界防火墙324两者的策略,则允许连接通过防火墙。
尽管描述为具有防火墙代码302和边界防火墙324二者,但本发明可在只有这些防火墙之一的系统中实现。例如,在只有一台计算机102的家庭网络上,唯一可用的防火墙可能是防火墙代码302。
图4所示的是察觉性防火墙的应用306请求从已知端点(例如,远程计算机108之一)接收单一连接(例如,TCP连接)的过程的例子。
在步骤400,察觉性防火墙的应用306创建一个新的套接字。在步骤402,察觉性防火墙的应用306绑定套接字以在端口N上接收连接。在步骤404,察觉性防火墙的应用306使用应用API 308通知操作系统300和/或实施模块304:它期望来自一个特定地址的连接。例如,这可使用如上所述的调用格式来完成。在步骤404,察觉性防火墙的应用306绑定套接字来以在端口N上接收连接。
在步骤406,察觉性防火墙的应用306激活接受(accept)API(未示出,但在本领域中公知)并且开始等待连接。察觉性防火墙的应用306激活接受API导致一个正在发送的通知,如上所述。操作系统300现在完全知道察觉性防火墙的应用306的意图和连接端点,并且在步骤408使用防火墙API 326告知防火墙代码302:期望来自一指定地址的单一连接在本地端口N上到达。通知还可包括应用专用信息,诸如应用可信级别、应用标识或其它信息。
在步骤410,防火墙代码302将察觉性防火墙的应用306的请求与防火墙策略314比较,并且允许或拒绝请求。在步骤412,防火墙代码302通知边界防火墙324:期望一个具有众所周知的属性的连接。
假设当远程节点在端口N上发起至察觉性防火墙的应用306的连接时,请求符合防火墙代码302和边界防火墙324的策略,则将允许通信。在步骤414,远程计算机108建立连接。
在察觉性防火墙的应用306完成监听端口N之后,在步骤416关闭套接字。然后在步骤418,操作系统300可执行清除,例如通知防火墙代码302,它轮到与边界防火墙324通信。
如能从前述中所理解的,应用API 308和防火墙API 326提供这样的机制,通过这些机制可将请求传送至主机或边界防火墙。然后防火墙可相应地作出反应,如果请求符合防火墙策略314(如果和边界防火墙的防火墙策略有关),则可允许连接。因而,应用API 308和防火墙API 326为应用提供增强的协助,用于在不需要为每种类型的连接编写单独的应用专用的代码的情况下穿过防火墙。
对于刚才所描述的实施例,实施模块304用作操作系统300的组件,或者与其紧密地相关联,并且处理察觉性防火墙的应用306的请求。如果需要,实施模块304可在应用API 308与防火墙API 326的抽象级别之间提供转换。例如,应用API 308可处理套接字和连接,而防火墙API 326可处理端口和流。
按照本发明的另一个实施例,实施模块304另外可允许用户创建简单的防火墙策略或网络访问策略,从而允许或拒绝应用或服务穿过防火墙。下面将描述实施模块304的这方面的功能。尽管在此描述的实施模块304具有已经描述的功能和下面描述的其它功能,但也可为独立的功能提供独立的模块。另外,计算机诸如计算机102可包括只具有这些功能组的一个功能或者功能组的一部分功能的模块。然而,为了易于描述,在此的描述假设实施模块304至少具有这两个所述的功能组。
为了这个描述,配置为与非察觉性防火墙的应用310一起工作的实施模块304的一部分在此将称为拦截模块500(图5)。通常,拦截模块500配置为监视应用和服务的对本地计算机诸如计算机102上网络堆栈508的连接和监听尝试。拦截模块500捕获这些尝试并且确定什么用户正在进行尝试,确定什么应用或服务正在进行尝试,并且进行防火墙策略314查找以确定是否允许用户和应用/服务连接到网络。
图5所示的方框图一般表示计算机102的某些组件和那些组件与拦截模块500的交互。计算机102包括用户模式套接字接口502(例如用户模式Winsock),内核模式套接字接口504(例如内核模式Winsock)和网络适配器510。
通常,图5所示的每个组件以某些形式或者其它形式存在于现有的计算机上,除了拦截模块500以外。按照本发明的一个实施例,这样安排拦截模块500,使得它可以接收和捕获应用和服务的连接或监听尝试。为此,例如,拦截模块500可位于网络堆栈508与非察觉性防火墙的应用310之间,例如在网络堆栈508的接口处。如下面进一步描述的,拦截模块500从连接和/或监听尝试中提取连接需求,确定连接需求是否符合策略,并且如果符合,命令防火墙代码302创建一个较低级别的防火墙过滤器以允许连接。
通常,连接和监听尝试包括连接至一个端点或者由端点来连接的任何尝试。为此目的,如这里所用的,“连接”和/或“监听”尝试包括,特别是,发送请求、接收请求、加入请求和更新请求。
计算机102的监听和/或连接尝试一般包括参数,这些参数将允许拦截模块500确定应用或服务的需求。如一个例子,对于监听和连接尝试两者,一般请求端口的绑定。绑定可能是对于特定端口或者如果可能使用各种端口则对于通配符端口。监听尝试一般将包括套接字地址,在该地址应用或服务希望接收连接。另外,应用ID和用户ID可以从监听尝试的上下文中推断。从这个推断的信息,可对照应用和/或用户的策略评估特定套接字的请求,并且可基于那个策略允许或不允许连接。
如果进行连接请求,那个连接请求将包括与监听请求相似的信息,并且可包括端点地址。此外,可使用此信息并对照策略评估此信息,以便确定是否可以进行连接。
计算机102的一般策略可在防火墙策略314内形成,以或者允许或者拒绝在计算机102上的特定应用和服务对网络的连接。这个一般性策略可在设置计算机102的用户设置时手工地在计算机102上建立、也可由网络管理员来建立、或者可在建立用户的简档时设置为默认的设置。如果需要,策略可基于每个用户。这些一般的策略可能是,例如,“不要让任何应用连接至不安全的网络110,除非拦截模块500具有不同的策略”可将一般的策略与由拦截模块500保存的策略分开存储。
按照本发明的一个实施例,在拦截模块500内的策略(和存储在策略高速缓存612中的,例如)可创建和存储为用户和/或服务/应用的请求的结果。例如,在将服务或应用安装在计算机上时、在发起一个连接时或者在其它合适的时间,可自动地或者通过用户界面来进行这个请求。请求可简单地包括所想要的连接的简单参数,诸如“允许应用X连接至因特网一次”或者,如其它非限制的例子,与察觉性防火墙的应用306的描述一起在上面描述的任何请求。
按照本发明的一个实施例,用户和/或应用的请求不需要用于端口、协议或者IP地址的规则以使应用或服务能够穿过防火墙代码302和/或边界防火墙324。而是,如上所述,在已经建立了一个策略之后,根据应用的连接请求,拦截模块500通过评估应用或服务的连接和监听尝试来确定应用或服务的需求。
图6所示的方框图示出拦截模块500的一般组件。拦截模块500包括逻辑引擎600,它执行在此所述的拦截模块500的大多数基本操作。拦截接口客户602连接到逻辑引擎600,配置为与网络堆栈508交互并捕获由应用诸如非察觉性防火墙的应用310进行的连接和/或拦截请求。配置和策略API 604配置和安排为与防火墙策略314或关联的策略管理器(未示出)的通信。
本地防火墙客户606配置为与防火墙代码302通信。防火墙穿越协议客户608被配置和安排为与边界防火墙324通信。
在图6所示的例子中,拦截模块500包括端点高速缓存610、策略高速缓存612和过滤器高速缓存614。端点高速缓存610存储拦截模块500当前正在管理的各种端点(即节点)的操作状态。它是由逻辑引擎600基于来自拦截接口客户602的输入来更新的。策略高速缓存612存储拦截模块500要实施的策略。在策略高速缓存612中的条目可与在端点高速缓存610(即该给定策略被实施的端点)的条目相关联。单个策略条目可以和多个端点相关联。
拦截接口客户602处理监听和/或连接尝试的细节,与网络堆栈508交互,并且访问逻辑引擎600以通知逻辑引擎600拦截到的动作并且接收授权决策。配置和策略API 604是一个进入拦截模块500的外部接口。可向配置和策略API604进行请求并且将请求存储在策略高速缓存612。例如,可由应用在安装或者连接尝试时通过防火墙策略314来提供策略,或可由用户例如通过套接字API312(图3)来提供。下面给出其它例子。使用本地防火墙客户606来命令防火墙代码302以创建合适的过滤器,类似地,防火墙穿越协议客户608被用来命令该边界防火墙324构建合适的滤波器,并且因而执行许多与代理320相同的功能。
过滤器高速缓存614包括用于逻辑引擎600已经创建的过滤器的条目。在过滤器高速缓存614中条目可与在端点高速缓存610(例如,已经为其创建过滤器的端点)中的条目相关联。单个过滤器可与多个端点相关联。包括在过滤器高速缓存614中的信息包括过滤器的细节(例如,5元组,关联的IPSec策略等),将使用的相应的防火墙过滤器的句柄,和/或防火墙穿越协议客户608的识别信息。
现在转到拦截模块500的操作,在应用或服务试着建立连接之前,用户和/或应用或服务通过配置和策略API 604建立用于应用或服务的策略。在策略高速缓存612中存储策略。在建立策略之后,拦截接口客户602监视应用和服务对在计算机102上的网络堆栈508的连接和监听尝试。拦截接口客户602捕获这些尝试并且将它们发送给逻辑引擎600。逻辑引擎600确定什么用户正在进行尝试、确定什么应用或服务正在进行尝试,并将那个信息存储在端点高速缓存610中。然后逻辑引擎600访问策略高速缓存612以确定是否允许用户和应用或服务连接到所请求的网络。
如果允许用户和应用或服务两者连接到网络,创建合适的防火墙配置诸如较低级别的防火墙过滤器,来允许应用或服务具有无拘无束的网络通信。将防火墙配置存储在过滤器高速缓存614中。本地防火墙客户606和网络穿越协议客户608可使用此过滤器信息来命令防火墙代码302和边界防火墙324以允许建立连接。
按照本发明的一个实施例,为拦截模块500提供通知客户616。通知客户616配置和安排为与外壳通知管理器(未示出,但在本领域中公知)或者相似的组件,以便通知用户一个事件。例如,通知客户616可命令通知管理器以通知用户:应用或服务正在尝试访问因特网和操作系统300正在阻止此尝试,诸如图7的用户界面700所示。另外,通知客户616可命令通知管理器请求与继续阻止或允许访问有关的用户指令,诸如由图7中的702和704允许的。如果适合,通知客户616可等待和通知逻辑引擎600:用户对查询的响应。
如果用户选择按钮704,则允许连接,那个按钮的选择导致为那个应用(这里,应用X)建立策略。如果需要,策略可只允许一次连接,可允许将来的连接,或者可允许在时限内(例如在一天内)的连接。
图8所示的是拦截模块500如何能够使非察觉性防火墙的应用310穿越诸如防火墙代码302和/或边界防火墙324的防火墙的例子。始于步骤800,用户创建允许应用X连接到网络的策略,例如仅在用户运行该应用时。用户稍后在步骤802运行应用X。应用X尝试连接和监听网络堆栈508。拦截模块500在步骤804捕获这些连接和监听尝试。拦截模块500在步骤806确定哪个应用或服务正在进行请求,并在步骤808确定哪个用户正在运行应用或服务。
根据这个信息,拦截模块500确定允许用户和应用连接到网络,并自动修改防火墙策略以允许监听本地端口及连接到所请求的端点。
因为这种用户专用策略只为给定用户建立,不同的用户不能访问网络。例如,在步骤812,第二用户运行应用X,并且在步骤814拦截模块500进行必需的许可检查,类似于步骤806和808。在步骤816,拦截模块500确定不允许第二用户在网络上运行应用X并返回错误给应用,例如通过通知客户616。
图9是流程图,所示的是服务如何能够将服务的网络需求通知防火墙代码302和/或边界防火墙324的例子的步骤。始于步骤900,在计算机上的一个服务,例如计算机102打开一个监听套接字。在步骤902,服务使用API,诸如套接字API 312,以建立策略,例如表示只应该接受来自本地子网(例如安全网络104)的入网通信。在步骤904,服务绑定到套接字并且等待连接尝试。在步骤906,在第二台计算机上的用户,诸如在安全网络104上的另一个计算机102打开尝试连接至在计算机102上的服务的应用。
在计算机102上的拦截模块500在步骤908拦截连接尝试,并将第二台计算机的子网与其自己的子网比较。在步骤910,子网检查成功并且在第二台计算机102上的应用连接至在第一台计算机102上的服务。
在步骤902建立的相同策略可用于拒绝不是来自本地子网的计算机,诸如在步骤912-916中所示的。在步骤912,在远程计算机108上的用户打开尝试连接至在第一台计算机102上的服务的应用。在步骤914,在第一台计算机102上的防火墙代码302拦截连接尝试并且将远程计算机108的子网与其自己的子网比较。在步骤916,子网检查未通过并且不允许在远程计算机104上的应用连接至在第一台计算机102上的服务。
在此列举的所有引用,包括出版物、专利申请和专利,被结合引用作为同样的扩充,与如果每个引用被单独地和明确地提示结合引用一样,并且在此作为整体提出。
在描述本发明的上下文中(尤其在以下权利要求书的上下文中)词语“a”和“an”和“the”和类似的指示物的使用将被解释以覆盖单数和复数两者,除非在这里另行指出或与上下文明显矛盾。词语“comrising”、“having”、“including”和“containing”将解释为“开口”的词语(即,意味着“including,but notlimited to”(包括,但不限于)),除非另行指出。在这里值的范围详述只是意在用作一种简约的方法,每单独的值都各自落在范围内,除非在此特别表示,并且将单独的值结合到说明书中,好象它是在此一个一个单独地列举的。可以任何合适的顺序执行在此描述的所有方法,除非在此另行指出或者与上下文明显矛盾。使用任何或所有例子,或者在此提供的示例性语言(例如“诸如”),只是想要更好地阐明本发明的实施例,并且不在本发明的范围上形成限制,除非另外要求。在说明书中的语言不应该解释为表示任何非要求的元素为实施本发明所必需的。
在这里描述了本发明的较佳实施例,包括发明人所知的完成本发明的最佳模式。这些较佳实施例的变体对于那些本领域的普通技术人员将在阅读前面描述的基础上变得显而易见。发明人期望熟练的技术人员适当地使用这些变体,并且发明人希望不同于如在这里明确描述的来实施本发明。相应地本发明包括所附权利要求书中所述的主题的、由适用法律许可的所有修改和本身。而且,在本发明的所有可能的变体中上述元素的任何组合也由本发明包括,除非这里另行指出或上下文明显矛盾的。