概述:病毒扫描引擎 API 实现

上次修改时间: 2015年3月9日

适用范围: SharePoint Foundation 2010

备注

病毒扫描引擎 API 在 Microsoft SharePoint Foundation 中已过时。为了实现向后兼容性,该 API 仍存在于 SharePoint Foundation 中。

为了支持防病毒保护,Windows SharePoint Services 3.0 使用基于 Microsoft Exchange Server VS API 2.0 的名为 SP VS API 1.4 的 API,即 Microsoft Office SharePoint 病毒扫描引擎 (VSE) API。SP VS API 1.4 结合了大量原始设计,并对其在 Microsoft SQL Server 环境中的运行速度进行了优化。通过创建一个直接集成到 Windows SharePoint Services 3.0 的 File/Save 和 File/Open 路径中的较低级别的 API,并通过消除 VS API 2.0 对消息处理应用程序编程接口 (MAPI) 的依赖可达到此目的。

由于 Windows SharePoint Services 3.0 是 SQL 文档存储而不是邮件存储,因此在保存(上载)或打开(下载)文档时将对文档进行实时扫描,并即时为用户提供扫描结果。默认情况下,Windows SharePoint Services 3.0 不支持手动扫描,通常称作"后台"或"计划扫描"。

SP VS API 1.4 体系结构

Windows SharePoint Services 3.0 使用一个将 SP VS API 1.0 公开为防病毒软件供应商组件 (VSE) 的 COM 层的体系结构,以便与 Windows SharePoint Services 3.0 管理的防病毒管理器 (AVM) 进行通信。

AVM 处理文件时所使用的逻辑旨在执行以下操作:

  • 支持两种请求:上载(保存)和下载(打开)。

  • 从 Windows SharePoint Services 3.0 数据库中获取指示扫描状态的文件属性。

  • 评估如何通过使用其属性来处理文件以确定是否对文件进行扫描。

  • 为相应的上下文和环境(网页或应用程序对话框)发布适当的用户界面,或完成必需的操作(打开或保存)。

  • 将指示扫描状态的文件属性存储回 Windows SharePoint Services 3.0 数据库中。

AVM 逻辑设计使 VSE 不用对数据库进行实际读取或直接编写,因为此功能是由内部 AVM 进程管理的。此设计还使 AVM 能够确定要为每个文件执行的操作,具体取决于在扫描并清除文件后由 VSE 返回的状态代码。

VSE 安装和实时更新

VSE 必须是这样的一个模块,它在 Web 服务器进程空间中运行,并扫描传入和传出内容以确定其是否感染病毒。VSE 将实例化由供应商提供的病毒扫描程序对象,并管理调用扫描程序以对内容进行扫描的线程池。当 VSE 检测到新的供应商代码或新的签名文件时,它将实例化扫描程序的新实例并开始使用该实例来安排新的请求。当所有使用上一实例的请求完成时,扫描 VSE 将释放该实例。也就是说,所有实例与旧的扫描程序版本一起完成,同时新的实例使用最新的扫描程序版本。此过程可确保在更新过程中不会丢失任何请求或使请求保持未完成状态。但是,这意味着仍然保留的实例不会与当前实例一起完成并且会在下次请求文件时被重新扫描,原因是版本被标记为旧版本。

使用 STSADM.EXE 进行扫描程序更新

由于 Windows SharePoint Services 3.0 中的安全性已改进,因此更改了注册表项更新。计时器作业(病毒扫描程序更新)会检查每台前端 Web 服务器的防病毒状态并在必要时更新每台服务器。与 Windows SharePoint Services 3.0 中的任何计时器作业一样,此计时器作业可以配置为按照指定时间间隔运行。默认情况下,此作业每 5 分钟运行一次。

为了实现向后兼容,更新项的作用仍与在 Windows SharePoint Services 2.0 中的作用一样,但 Windows SharePoint Services 3.0 管理服务必须处于运行状态,因为它将启用要运行的计时器作业。在进行设置时,该项会对 avvendorid 和 avvendorupdatecount 值每次增加 1。在 Windows SharePoint Services 3.0 的"单击"安装中,管理服务在默认情况下处于禁用状态,因此不会运行。

为了避免有关计时器作业是否正在 Windows SharePoint Services 3.0 和 Microsoft Office SharePoint Server 2007 中运行的复杂性和不确定性,建议使用 STSADM.EXE 触发更新。无论管理服务是否正在运行,此方法都有效。

通过使用 STSADM.EXE,可以获取安装的供应商信息的当前值并更新这些值。有关如何使用 STSADM.EXE 的信息,请参阅 Windows SharePoint Services 管理工具简介(该链接可能指向英文页面)

下表列出扫描程序更新的相关新命令。

命令

说明

avvendorid

数值不等于 currentValue 或 previousValue + 1。

当前扫描程序的供应商 ID。

avvendorupdatecount

数值不等于 currentValue 或 previousValue + 1。

强制执行对当前扫描程序或签名的更新。

必须设置 avvendorupdatecount 以允许系统识别的 avvendorid 命令;否则,必须首先重置 Microsoft Internet Information Services (IIS) 以允许 avvendorid 生效。下面的命令提供了几个示例:

stsadm -o getproperty -pn avvendorid
stsadm -o getproperty -pn avvendorupdatecount
stsadm -o setproperty -pn pn avvendorid -pv [numericvalue]
stsadm -o setproperty -pn avvendorupdatecount -pv [numericvalue]

使用注册表进行扫描程序更新

如前面所述,建议不要对新的扫描程序使用此机制,它仅仅是为了实现向后兼容而存在的。

对确定供应商提供的病毒扫描解决方案的配置的参数进行 VSE 搜索。此值位于 VSE 配置节下的系统注册表中,如下所示:

[HKLM\Software\Microsoft\Shared Tools\Web Server Extensions\AVScanner]

该参数是一个 REG_SZ 值,此值包含按照注册表格式实现 IMso_VirusScanner 的类对象的 CLSID。VSE 使用此值来实例化对象。下面的示例演示注册表值的格式:

CLSID = "{00020906-0000-0000-C000-000000000046}"

备注

这只是一个用于阐释格式的示例 CLSID。实际上,VSE 应编写自己的 CLSID。

使用注册表进行实时更新

VSE 具有一个单独的线程,该线程在注册表配置节发生更改时会收到通知。当 VSE 在其注册表配置节中找到特定值时,它会启动扫描程序重载,其中包括实例化更新的 CLSID 并使用新的参数进行初始化:

Update = DWORD:00000001

在重载完成时,VSE 会将该值重置为 0(零)。

病毒签名更新要求

签名更新必须执行供应商特定的操作以:

  • 在计算机上安装新的数据文件。

  • 通过将 Update 值设置为 1 来通知 VSE。

病毒扫描程序更新要求

代码更新必须执行供应商特定的安装操作以:

  • 在计算机上安装新的代码位。

  • 修改 VSE CLSID 值以指向新的类对象。

  • 通过将 Update 值设置为 1 来通知 VSE。

VSE 注册表的布局

下面是 VSE 配置注册表路径:

[HKLM\Software\Microsoft\Shared Tools\Web Server Extensions\AVScanner]

下表显示用于 VSE 注册表的值。

类型

说明

CLSID

REG_SZ

指定病毒扫描程序类对象。

Update

REG_DWORD

当设置为 1 时,将触发对扫描程序实例的重载。

有关 VSE 中必须提供的接口的说明,请参阅病毒扫描引擎 API

设置页面更新

只要更新防病毒管理页设置,Windows SharePoint Services 3.0 就会对 avvendorid 和 avvendorupdatecount 值每次增加 1。

防病毒属性

使用下表中列出的属性可为服务器配置防病毒保护。指定是否启用防病毒清除、是否启用下载和上载扫描、扫描的超时时间、采用防病毒进程的线程数,以及用户是否可以将可能受病毒感染的文档下载到其客户端计算机上。

命令

说明

avuploadscanenabled

是/否

启用或禁用上载扫描。

avdownloadscanenabled

是/否

启用或禁用下载扫描。

avcleaningenabled

是/否

启用或禁用清除。

avallowdownload

是/否

允许下载受病毒感染的内容和无法清除的内容。

avnumberofthreads

一个数值

要使用的线程数。

avtimeout

一个数值(以秒为单位)

扫描超时之前的时间量。

较大文件支持

Windows SharePoint Services 3.0 支持较大的文件,并支持这些文件的防病毒保护。

若要改进性能,可尝试创建文件作为块区,以便这些文件在被扫描之前不返回到内存。请记住,对较大的文件进行扫描需要花费较长的时间,并且它们可能需要增加服务器或 IIS 的默认超时设置,以允许扫描程序完成其工作。

64 位支持

Windows SharePoint Services 3.0 支持 64 位系统。可能需要对现有扫描程序进行更新以支持 64 位系统,并应分别对它们进行验证。