ウイルス スキャン エンジン API

最終更新日: 2015年3月9日

適用対象: SharePoint Foundation 2010

この記事の内容
IMso_VirusScanner インターフェイス
Initialize メソッド
Scan メソッド
Clean メソッド
ILockBytes インターフェイス

注意

ウイルス スキャン エンジン API は、Microsoft SharePoint Foundation ではサポートされていません。API が SharePoint Foundation に存在しているのは、下位互換を保つためです。

ここでは、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 メソッドを使用したすべての初期化とリソースの割り当て。

  • NO はスキャンまたはクリーニング中に、不確かな完了時間での任意のオペレーティング システム API を呼び出します。例には、ファイルの I/O 、レジストリ操作、およびその他が含まれます。

Initialize メソッド

スキャナのインスタンス単位の初期化をすべて実行し、現在の IMso_VirusScanner インスタンスに関する情報を返します。

構文

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

パラメータ

パラメータ

説明

pbstrProduct [OUT]

"Microsoft Office Word 2007 (12.2627.2625)" のようなベンダのアプリケーションを識別する文字列を受け取る変数のアドレスを指定します。

pdwProductVersion [OUT]

検出プログラムが現在使用している署名ファイルのバージョンを受け取る変数のアドレスを指定します。

戻り値

成功 : 初期化に成功した場合、S_OK を返します。

失敗 : エラー コードを返します。

備考 :

このメソッドは、インスタンスが作成された直後、Scan メソッドまたは Clean メソッドを呼び出す前に、IMso_VirusScanner インスタンスごとに 1 回呼び出す必要があります。

Scan メソッド

コンテンツをスキャンし、感染の状態とウィルス情報 (取得できた場合) を返します。

構文

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

パラメータ

パラメータ

説明

pilb [IN]

スキャンされるコンテンツを含むオブジェクトです。このオブジェクトにはファイル名とファイルの種類に関する情報が含まれます。

pdwStatus [OUT]

コンテンツの感染状態を受け取る変数のアドレスを指定します。

pbstrVirusInfo [OUT]

コンテンツが感染している場合、ウィルスに関する情報を含む文字列を受け取る変数のアドレスを指定します。検出プログラムで複数のウィルスが検出された場合、文字列を連結し、TAB (ASCII 9) 文字で区切る必要があります。

ホストは SysFreeString 関数を使用して、戻り値を解放します。

戻り値

成功 : 操作が正常に完了した場合、S_OK が返され、pdwStatus および pbstrVirusInfo パラメータに有効な情報が含まれます。

失敗 : エラー コードを返します。

備考 :

ホストは、同時に複数のスレッドからこのメソッドを呼び出します。検出プログラムは、要求を内部でシリアル化することなく、同時に実行することを要求されます。

Clean メソッド

コンテンツからウィルス感染を取り除きます。

構文

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

パラメータ

パラメータ

説明

pilbInput [IN]

修復されるコンテンツを含むオブジェクトです。このオブジェクトにはファイル名とファイルの種類に関する情報が含まれます。

pilbOutput [IN]

修復されたデータを受け取るオブジェクトです。メソッドが呼び出された時点では、pilbInput と pilbOutput のコンテンツは同一なので、可能な場合は、検出プログラムの I/O 操作を最適化する必要があります。

pdwStatus [OUT]

コンテンツの感染状態を受け取る変数のアドレスを指定します。

pbstrVirusInfo [OUT]

コンテンツが感染している場合、ウィルスに関する情報を含む文字列を受け取る変数のアドレスを指定します。検出プログラムで複数のウィルスが検出された場合、TAB (ASCII 9) 文字で区切りながら、バッファの長さまでの文字列を連結する必要があります。

ホストは SysFreeString 関数を使用して、戻り値を解放します。

戻り値

成功 : 操作が正常に完了した場合、S_OK が返され、pdwStatus、wzVirusInfo、および pilbOutput パラメータに有効な情報が含まれます。

備考 :

ホストは、同時に複数のスレッドからこのメソッドを呼び出します。検出プログラムは、要求を内部でシリアル化することなく、同時に実行することを要求されます。

ILockBytes インターフェイス

ILockBytesILockBytesILockBytes 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

今後使用するために予約されています。