IPreviousVersionsInfo
COM公式ドキュメント
Windows Server 2003 で提供されるシャドウ コピー技術によって、復元を目的として保存されたサーバー上のファイルやフォルダーの以前のバージョンの有無を確認するメソッドを公開します。
解説(Remarks)
このインターフェイスの CLSID、IID、および定義を次の例に示します。
// {596AB062-B4D2-4215-9F74-E9109B0A8153}
const CLSID CLSID_PreviousVersions = {0x596AB062, 0xB4D2, 0x4215,
{0x9F, 0x74, 0xE9, 0x10, 0x9B, 0x0A, 0x81, 0x53}};
// {76e54780-ad74-48e3-a695-3ba9a0aff10d}
const IID IID_IPreviousVersionsInfo = {0x76E54780, 0xAD74, 0x48E3,
{0xA6, 0x95, 0x3B, 0xA9, 0xA0, 0xAF, 0xF1, 0x0D}};
MIDL_INTERFACE("76e54780-ad74-48e3-a695-3ba9a0aff10d")
IPreviousVersionsInfo : public IUnknown
{
public:
virtual HRESULT STDMETHODCALLTYPE AreSnapshotsAvailable(
/* [string][in] */ LPCWSTR pszPath,
/* [in] */ BOOL fOkToBeSlow,
/* [retval][out] */ BOOL *pfAvailable) = 0;
};
シャドウ コピー技術は、古いバージョンが削除されない限りその完全なコピーを保存するのではなく、変更されたビットのみを保存する点に注意してください。
メソッド 1
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
システムが以前に記録した Windows Server 2003 のボリューム イメージが利用可能かどうかを照会します。
| pszPath | LPWSTR | in | 対象ボリューム上のファイルまたはフォルダーへの完全修飾パスを格納した、null 終端の Unicode 文字列です。 注意 現在サポートされているのは、Windows Server 2003 のボリューム上に保存されたファイルおよびフォルダーへのパスのみです。
|
| fOkToBeSlow | BOOL | in | 保存されたボリューム イメージの有無を判断するためにサーバーへ問い合わせるかどうかを指定するブール値です。詳細については、「解説」セクションを参照してください。 TRUE結果がまだキャッシュされていない場合は、サーバーへ問い合わせます。 FALSEサーバーへ問い合わせません。代わりにキャッシュされた結果を使用します。 |
| pfAvailable | BOOL* | out | 結果を格納するブール変数へのポインターです。この値はメソッド呼び出しが成功した場合にのみ有効であり、それ以外の場合は未定義です。 TRUEpszPath で指定されたファイルまたはフォルダーが存在するボリュームの保存済みイメージが、少なくとも 1 つ利用可能です。 FALSEボリューム イメージは保存されていません。 |
戻り値
型: HRESULT
以下を含む(ただしこれらに限定されない)標準のエラー値を返します。
| 戻り値 | 説明 |
|---|---|
| 成功しました。 | |
| fOkToBeSlow が FALSE であり、かつ結果が現在キャッシュされていません。 |
解説(Remarks)
IPreviousVersionsInfo::AreSnapshotsAvailable をファイルまたはフォルダーに対して呼び出した場合、その結果は特定のファイルやフォルダーに対するロールバック情報が利用可能であることを示すものではなく、ボリューム全体のスナップショットが利用可能であることを示すにすぎません。この結果はキャッシュされ、同じボリューム上に保存された任意の対象について照会する後続の呼び出しは、サーバーへ再度問い合わせる代わりに、キャッシュされた結果へほとんどパフォーマンス上のオーバーヘッドなくアクセスします。
サーバーの応答がメモリにキャッシュされると、fOkToBeSlow が TRUE であっても後続の呼び出しはサーバーへ問い合わせません。fOkToBeSlow が FALSE であり、かつサーバーの応答が以前の呼び出しでまだキャッシュされていない場合、このメソッドは E_PENDING を返します。その場合は、fOkToBeSlow を TRUE に設定して IPreviousVersionsInfo::AreSnapshotsAvailable を再度呼び出し、サーバーへ問い合わせてください。
パフォーマンスを向上させるため、このメソッドを呼び出す UI スレッドでは常に fOkToBeSlow を FALSE に設定する必要があります。メソッドが E_PENDING を返した場合は、次の手順に従ってください。
- バックグラウンド スレッド上で IPreviousVersionsInfo の別のインスタンスを作成します。
- fOkToBeSlow を TRUE に設定して IPreviousVersionsInfo::AreSnapshotsAvailable を呼び出します。
- 元の UI スレッドに対して IPreviousVersionsInfo::AreSnapshotsAvailable を再度呼び出すよう通知します。これにより、結果はキャッシュから取得されます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IPreviousVersionsInfo "{76E54780-AD74-48E3-A695-3BA9A0AFF10D}" #usecom global IPreviousVersionsInfo IID_IPreviousVersionsInfo "{}" #comfunc global IPreviousVersionsInfo_AreSnapshotsAvailable 3 wstr,int,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IPreviousVersionsInfo "{76E54780-AD74-48E3-A695-3BA9A0AFF10D}" #usecom global IPreviousVersionsInfo IID_IPreviousVersionsInfo "{}" #comfunc global IPreviousVersionsInfo_AreSnapshotsAvailable 3 wstr,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。