病毒扫描引擎 API

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

适用范围: SharePoint Foundation 2010

本文内容
IMso_VirusScanner 接口
Initialize 方法
Scan 方法
Clean 方法
ILockBytes 接口

备注

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

本主题介绍为扫描和清理 Windows SharePoint Services 3.0 中的文档而生成兼容病毒扫描引擎 (VSE) 所需的 API。有关 VSE 及其要求的一般介绍,请参阅 概述:病毒扫描引擎 API 实现

IMso_VirusScanner 接口

下表介绍 IMso_VirusScanner 接口所提供的方法。

方法

说明

Initialize

对扫描程序的所有实例分别执行初始化,并返回有关当前 IMso_VirusScanner 实例的信息。

Scan

扫描流内容,并返回感染状态和病毒信息(如果有)。

Clean

尝试从内容中移除病毒感染。

备注

主机应用程序实例化 IMso_VirusScanner 对象并执行下列任务:

  • 将病毒扫描程序实例化为自由线程单元中的一个 INPROC_SERVER。

  • 调用任何其他方法前先调用 Initialize 方法。

  • 确保在调用 Release 之前没有未完成的 Scan 请求。

  • 在完成 Initialize 方法之后、调用 Release 之前,从多个线程同时调用 Scan 或 Clean。

兼容扫描程序是 IMso_VirusScanner 接口的一个实例,它执行下列任务:

  • 通过 Initialize 方法执行所有初始化和资源分配。

  • 在扫描或清理完成时间不确定时,不调用任何操作系统 API。示例包括但不限于文件 I/O 和注册表操作。

Initialize 方法

对扫描程序的所有实例分别执行初始化,并返回有关当前 IMso_VirusScanner 实例的信息。

语法

STDMETHOD Initialize (
      BSTR *pbstrProduct,
      DWORD *pdwProductVersion
);

参数

参数

说明

pbstrProduct [输出]

指定接收标识供应商的应用程序的字符串的变量地址,如"Microsoft Office Word 2007 (12.2627.2625)"中的地址。

pdwProductVersion [输出]

指定接收扫描程序当前使用的特征文件版本的变量地址。

返回值

成功:如果初始化成功,则返回 S_OK。

失败:返回错误代码。

备注

必须在创建 IMso_VirusScanner 实例之后、调用 Scan 或 Clean 方法之前,立即为每个实例调用一次此方法。

Scan 方法

扫描内容,并返回感染状态和病毒信息(如果有)。

语法

STDMETHOD Scan (
      ILockBytes *pilb,
      DWORD *pdwStatus,
      BSTR *pbstrVirusInfo
);

参数

参数

说明

pilb [输入]

包含要扫描的内容的对象。此对象包含有关文件名和文件类型的信息。

pdwStatus [输出]

指定接收内容感染状态的变量地址。

pbstrVirusInfo [输出]

在内容受到感染时指定接收包含病毒相关信息的字符串的变量地址。如果扫描程序检测到多个病毒,则需要连接这些字符串并用 Tab (ASCII 9) 符将它们分隔开。

主机使用 SysFreeString 函数释放返回值。

返回值

成功:如果操作成功完成并且 pdwStatus 和 pbstrVirusInfo 参数包含有效信息,则返回 S_OK。

失败:返回错误代码。

备注

主机同时从多个线程调用此方法。扫描程序应同时执行请求而无需进行内部请求序列化。

Clean 方法

尝试从内容中移除病毒感染。

语法

STDMETHOD Clean (
      ILockBytes *pilbInput,
      ILockBytes *pilbOutput,
      DWORD *pdwStatus,
      BSTR *pbstrVirusInfo
);

参数

参数

说明

pilbInput [输入]

包含要修复的内容的对象。此对象包含有关文件名和文件类型的信息。

pilbOutput [输入]

接收已修复数据的对象。在调用方法时,pilbInput 和 pilbOutput 的内容相同,因此,如果可能,扫描程序需要优化 I/O 操作。

pdwStatus [输出]

指定接收内容感染状态的变量地址。

pbstrVirusInfo [输出]

在内容受到感染时指定接收包含病毒信息的字符串的变量地址。如果扫描程序检测到多个病毒,则需要连接这些字符串,最长可达缓冲区长度,并用 Tab (ASCII 9) 符将它们分隔开。

主机使用 SysFreeString 函数释放返回值。

返回值

成功:如果操作成功完成并且 pdwStatus、wzVirusInfo 和 pilbOutput 参数包含有效信息,则返回 S_OK。

备注

主机同时从多个线程调用此方法。扫描程序应同时执行请求而无需进行内部请求序列化。

ILockBytes 接口

ILockBytes 接口用于允许供应商提取有关文件的额外信息,其中可包括文件名、文件类型、文件大小等等。若需 MSDN 上有关此接口的完整介绍,请参阅 ILockBytes

语法

typedef struct tagSTATSTG {
      LPWSTR pwcsName;
      DWORD type;
      ULARGE_INTEGER cbSize;
      FILETIME mtime;
      FILETIME ctime;
      FILETIME atime;
      DWORD grfMode;
      DWORD grfLocksSupported;
      CLSID clsid;
      DWORD grfStateBits;
      DWORD reserved;
} STATSTG;

成员

成员

说明

pwcsName

一个指向包含名称并以 NULL 结尾的 Unicode 字符串的指针。该字符串的空格由调用方所调用和释放的方法(如同使用 COM CoTaskMemFree 函数调用和释放的方法一样)来分配。当调用返回 STATSTG 结构的方法时,可以通过指定 STATFLAG_NONAME 值来指定不返回该成员,但调用 IEnumSTATSTG::Next 方法除外,该方法无法指定该值。

type

指示存储对象的类型,可以是 STGTY 枚举中的值之一。

cbSize

指定流或字节数组的大小,以字节为单位。

mtime

指示上次修改此存储、流或字节数组的时间。

ctime

指示创建此存储、流或字节数组的时间。

atime

指示上次访问此存储、流或字节数组的时间。

grfMode

指示打开该对象时指定的访问模式。该成员仅在调用 Stat 方法时有效。

grfLocksSupported

指示流或字节数组所支持的区域锁定的类型,可以是 LOCKTYPE 枚举中的值。该成员不用于存储对象。

clsid

指示存储对象的类标识符;对于新存储对象,设置为 CLSID_NULL。该成员不用于流或字节数组。

grfStateBits

指示存储对象的当前状态位,即 IStorage::SetStateBits 方法最近设置的值。该成员对于流或字节数组无效。

reserved

保留以供将来使用。