Win32 API 日本語リファレンス
ホームUI.Shell.PropertiesSystem › IPersistSerializedPropStorage

IPersistSerializedPropStorage

COM
IIDe318ad57-0aa0-450f-aca5-6fab7103d917継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

シリアライズされたプロパティストレージデータを後で使用できるように永続化し、永続化されたデータを新しいプロパティストアインスタンスへ復元するためのメソッドを公開します。(IPersistSerializedPropStorage)

解説(Remarks)

プロパティストアとの間で値を読み書きするには、IPropertyStore インターフェースを使用します。

使用する場面

PSCreateMemoryPropertyStore を呼び出して作成されるインメモリプロパティストアは、このインターフェースの実装を提供します。シリアライズされたプロパティストレージデータを永続化または復元したい場合に、この実装を使用してください。

実装する場面

IPersistSerializedPropStorage は独自実装を目的としたものではありません。インメモリプロパティストアに関連付けられた、システム提供の実装を使用してください。

メソッド 3

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT SetFlags(INT flags)

プロパティストアオブジェクトを読み取り専用状態と読み取り/書き込み状態の間で切り替えます。

flagsINTin

flags パラメーターは、プロパティストレージの動作に関するオプションを設定するために、次のいずれかの値を取ります。

FPSPS_DEFAULT (0x00000000)

Windows 7 以降。プロパティストアオブジェクトは読み取り/書き込みです。

FPSPS_READONLY (0x00000001)

プロパティストアオブジェクトは読み取り専用です。

FPSPS_TREAT_NEW_VALUES_AS_DIRTY (0x00000002)

Windows 8 で導入IPropertyStore::SetValue メソッドを通じてプロパティストアに追加された新しいプロパティ値により、IPersistStream::IsDirty メソッドが S_OK を返すようになります。このフラグが設定されていない場合、プロパティストアへの新しいプロパティ値の追加は、IPersistStream::IsDirty が返す値に影響しません。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

既定の設定は読み取り/書き込みです。IPersistSerializedPropStorage::SetFlags はいつでも呼び出すことができ、プロパティストアの読み取り専用状態と読み取り/書き込み状態を切り替えます。

Windows 7 より前のバージョンの Windows では、呼び出し側はリテラルのゼロ値を flags パラメーターに直接代入して読み取り/書き込み状態を設定できました。Windows 7 以降では、代わりに FPSPS_DEFAULT フラグ値を使用してください。

vtbl 4 HRESULT SetPropertyStorage(PCUSERIALIZEDPROPSTORAGE psps, DWORD cb)

指定されたシリアライズ済みプロパティストレージデータからプロパティストアインスタンスを初期化します。

pspsPCUSERIALIZEDPROPSTORAGEinプロパティストアの初期化に使用される、シリアライズ済みプロパティストアデータへのポインター。
cbDWORDinpsps が指すシリアライズ済みプロパティストレージデータに含まれるバイト数。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

SERIALIZEDPROPSTORAGE 型は Propsys.h において不完全型として定義されています。これは BYTE 値の配列として扱う必要があり、返されるデータの形式は規定されていません。SERIALIZEDPROPSTORAGE 構造体として格納されるデータは、IPersistSerializedPropStorage::GetPropertyStorage の呼び出しによって、直接、またはそのメソッドの呼び出しで生成された永続化データを通じて取得されたものでなければなりません。

vtbl 5 HRESULT GetPropertyStorage(SERIALIZEDPROPSTORAGE** ppsps, DWORD* pcb)

プロパティストアインスタンスからシリアライズ済みプロパティストレージデータを取得します。

ppspsSERIALIZEDPROPSTORAGE**outこのメソッドが返るとき、シリアライズ済みプロパティストレージデータへのポインターのアドレスが格納されます。
pcbDWORD*outこのメソッドが返るとき、ppsps が指すシリアライズ済みプロパティストレージデータに含まれるバイト数が格納されます。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

SERIALIZEDPROPSTORAGE 型は Propsys.h において不完全型として定義されています。これは BYTE 値の配列として扱う必要があり、返されるデータの形式は規定されていません。SERIALIZEDPROPSTORAGE 構造体の内容はディスクやその他のストレージへの永続化に適しており、IPersistSerializedPropStorage::SetPropertyStorage を通じて別のプロパティストアを初期化するために使用できます。

注意 IPersistSerializedPropStorage::GetPropertyStorage を呼び出したアプリケーションは、ppsps が参照するメモリが不要になったときに、後で CoTaskMemFree を呼び出してそのメモリを解放する責任があります。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IPersistSerializedPropStorage "{E318AD57-0AA0-450F-ACA5-6FAB7103D917}"
#usecom global IPersistSerializedPropStorage IID_IPersistSerializedPropStorage "{}"
#comfunc global IPersistSerializedPropStorage_SetFlags            3 int
#comfunc global IPersistSerializedPropStorage_SetPropertyStorage  4 sptr,int
#comfunc global IPersistSerializedPropStorage_GetPropertyStorage  5 var,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。