IFsrmPropertyBag
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
ファイルの分類プロパティを保持します。
解説(Remarks)
プロパティバッグには、ファイルのすべてのプロパティのインメモリコピーが格納されます。プロパティバッグ内のプロパティの一覧には、FSRM で定義されていない追加のプロパティが含まれる場合があります。これらのプロパティは、ファイル内の他のメタデータに由来することがあります。
このインターフェースは、分類モジュールを実装している場合は IFsrmClassifierModuleImplementation::DoesPropertyValueApply と IFsrmClassifierModuleImplementation::GetPropertyValueToApply に、ストレージモジュールを実装している場合は IFsrmStorageModuleImplementation::LoadProperties と IFsrmStorageModuleImplementation::SaveProperties に渡すことができます。
メソッド 21
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
バッグ内のプロパティを保持しているファイルの名前です。
| name | LPWSTR* | out | 対象ファイルの名前を受け取る文字列ポインタである。 |
ファイルへの相対パスです。
| path | LPWSTR* | out | 名前空間ルートからの相対パスを受け取る文字列ポインタである。 |
解説(Remarks)
相対パスとは、ボリュームのルートからの相対的なファイルのパスです。たとえば、ファイルのパスが "P:\folder1\subfolderA\test.txt" の場合、相対パスは "\folder1\subfolderA" になります。
呼び出し元は、返される相対パスの先頭や末尾に常にバックスラッシュが付いていると想定しないでください。
ファイルが存在するボリュームの名前です。
| volumeName | LPWSTR* | out | ファイルが格納されているボリュームの名前を受け取る文字列ポインタである。 |
解説(Remarks)
このプロパティには、スキャン対象のファイルが存在する場所のボリューム名が格納されます。たとえば、ファイルのパスが "P:\folder1\subfolderA\test.txt" の場合、ボリューム名は "P:\" になります。
呼び出し元は、返されるボリューム名の末尾に常にバックスラッシュが付いていると想定しないでください。
返されるボリューム名は、常にライブボリュームの名前です。分類対象のファイルがスナップショット上にある場合は、そのスナップショットに対応するライブボリュームの名前が返されます。
ファイルが評価される対象となる名前空間ルートの相対パスです。
| relativeNamespaceRoot | LPWSTR* | out | ファイルが属する名前空間ルートの相対パスを受け取る文字列ポインタである。 |
解説(Remarks)
このプロパティは評価コンテキストの下でのみ有効です。分類モジュールがこのプロパティを取得すると、ファイルの評価に使用されているルールの名前空間ルートが返されます。ストレージモジュールには評価コンテキストがないため、このプロパティを取得してはいけません。
相対名前空間ルートとは、ボリュームのルートからの相対的な名前空間ルートのパスです。たとえば、ファイルのパスが "P:\folder1\subfolderA\test.txt" で、名前空間ルートが "P:\folder1" であるルールによってファイルが評価されている場合、相対名前空間ルートは "\folder1" になります。相対名前空間ルートはルールの名前空間ルートによって決まる点に注意してください。
呼び出し元は、返される相対名前空間ルートの先頭や末尾に常にバックスラッシュが付いていると想定しないでください。
ファイルが存在するボリュームを参照するためにスキャナーが使用するインデックスです。
| volumeId | DWORD* | out | ボリュームを識別するインデックス値を受け取る DWORD ポインタである。 |
ファイルの NTFS ファイル識別子です。
| fileId | VARIANT* | out | ファイルを一意に識別するファイル ID を格納した VARIANT を受け取るポインタである。 |
ファイルの親ディレクトリの NTFS 識別子です。
| parentDirectoryId | VARIANT* | out | 親ディレクトリを一意に識別する ID を格納した VARIANT を受け取るポインタである。 |
ファイルのサイズです。
| size | VARIANT* | out | ファイルのサイズ (バイト数) を格納した VARIANT を受け取るポインタである。 |
ファイルの割り当てサイズです。
| sizeAllocated | VARIANT* | out | ファイルに割り当てられたサイズ (バイト数) を格納した VARIANT を受け取るポインタである。 |
ファイルが作成された日時です。
| creationTime | VARIANT* | out | ファイルの作成日時を格納した VARIANT を受け取るポインタである。 |
ファイルに最後にアクセスした日時です。
| lastAccessTime | VARIANT* | out | ファイルの最終アクセス日時を格納した VARIANT を受け取るポインタである。 |
ファイルが最後に変更された日時です。
| lastModificationTime | VARIANT* | out | ファイルの最終更新日時を格納した VARIANT を受け取るポインタである。 |
ファイルの属性です。
| attributes | DWORD* | out | ファイルの属性を示すフラグの組み合わせを受け取る DWORD ポインタである。 |
ファイルの所有者の SID です。
| ownerSid | LPWSTR* | out | ファイルの所有者のセキュリティ識別子 (SID) を文字列で受け取るポインタである。 |
バッグに格納されているプロパティの名前の一覧です。
| filePropertyNames | SAFEARRAY** | out | ファイルに設定されているプロパティ名の一覧を格納した SAFEARRAY を受け取るポインタである。 |
バッグに追加されたエラーメッセージの一覧です。
| messages | SAFEARRAY** | out | プロパティバッグに記録されたメッセージの一覧を格納した SAFEARRAY を受け取るポインタである。 |
解説(Remarks)
メッセージの形式は module_name,rule_name|message です (IFsrmPropertyBag::AddMessage メソッドの呼び出し時に指定したメッセージに、FSRM が module_name,rule_name| の部分を追加します)。
プロパティバッグに関する追加情報を示すフラグのセットです。
| flags | DWORD* | out | プロパティバッグの状態を示すフラグの組み合わせを受け取る DWORD ポインタである。 |
指定されたプロパティをプロパティバッグから取得します。
| name | LPWSTR | in | 取得するプロパティの名前です。 |
| fileProperty | IFsrmProperty** | out | 取得したプロパティへの IFsrmProperty インターフェースです。 |
戻り値
このメソッドは次の値を返します。
解説(Remarks)
ルールの PropertyAffected プロパティに指定されているプロパティ名を使用してください。
指定されたプロパティをプロパティバッグに設定します。
| name | LPWSTR | in | 設定するプロパティの名前です。 |
| value | LPWSTR | in | プロパティに設定する値です。 |
戻り値
このメソッドは次の値を返します。
解説(Remarks)
このプロパティにアクセスするには、呼び出し元がストレージモジュールである必要があります。
バッグにエラーメッセージを追加します。
| message | LPWSTR | in | バッグに追加するエラーメッセージです。メッセージは 4096 文字までに制限されます (4096 文字を超える場合は切り捨てられます)。 |
戻り値
このメソッドは次の値を返します。
解説(Remarks)
バッグに追加できるメッセージは 1 つだけです。エラーログが有効になっている場合、メッセージはエラーログに書き込まれます。
次のいずれかの実装がエラーコードを返した場合、FSRM はエラーコードと関連するメッセージ文字列を含むメッセージを自動的に追加します (このメッセージは 1 件までという上限には数えられません)。
ファイルの内容へアクセスするために使用できるファイルストリームインターフェースを取得します。
| accessMode | FsrmFileStreamingMode | in | 1 つ以上のアクセスモードです。指定できる値については、FsrmFileStreamingMode 列挙型を参照してください。 |
| interfaceType | FsrmFileStreamingInterfaceType | in | 使用するストリーミングインターフェースの種類です。指定できるインターフェースの種類については、FsrmFileStreamingInterfaceType 列挙型を参照してください。 |
| pStreamInterface | VARIANT* | out | ファイルの内容へアクセスするために使用できるストリーミングインターフェースを格納した VARIANT です。この VARIANT の型は VT_DISPATCH です。指定したストリーミングインターフェースを取得するには、VARIANT の dispval メンバーを参照してください。 |
戻り値
このメソッドは次の値を返します。
解説(Remarks)
呼び出し元がアクセスを許可されるためには、IFsrmPipelineModuleDefinition::NeedsFileContent プロパティが TRUE に設定されたモジュールである必要があります。accessMode パラメーターに FsrmFileStreamingMode_Write を指定する場合、呼び出し元はさらにストレージモジュールであり、かつ IFsrmStorageModuleDefinition::UpdatesFileContent プロパティが TRUE に設定されている必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IFsrmPropertyBag "{774589D1-D300-4F7A-9A24-F7B766800250}" #usecom global IFsrmPropertyBag IID_IFsrmPropertyBag "{}" #comfunc global IFsrmPropertyBag_get_Name 7 var #comfunc global IFsrmPropertyBag_get_RelativePath 8 var #comfunc global IFsrmPropertyBag_get_VolumeName 9 var #comfunc global IFsrmPropertyBag_get_RelativeNamespaceRoot 10 var #comfunc global IFsrmPropertyBag_get_VolumeIndex 11 var #comfunc global IFsrmPropertyBag_get_FileId 12 var #comfunc global IFsrmPropertyBag_get_ParentDirectoryId 13 var #comfunc global IFsrmPropertyBag_get_Size 14 var #comfunc global IFsrmPropertyBag_get_SizeAllocated 15 var #comfunc global IFsrmPropertyBag_get_CreationTime 16 var #comfunc global IFsrmPropertyBag_get_LastAccessTime 17 var #comfunc global IFsrmPropertyBag_get_LastModificationTime 18 var #comfunc global IFsrmPropertyBag_get_Attributes 19 var #comfunc global IFsrmPropertyBag_get_OwnerSid 20 var #comfunc global IFsrmPropertyBag_get_FilePropertyNames 21 var #comfunc global IFsrmPropertyBag_get_Messages 22 var #comfunc global IFsrmPropertyBag_get_PropertyBagFlags 23 var #comfunc global IFsrmPropertyBag_GetFileProperty 24 wstr,sptr #comfunc global IFsrmPropertyBag_SetFileProperty 25 wstr,wstr #comfunc global IFsrmPropertyBag_AddMessage 26 wstr #comfunc global IFsrmPropertyBag_GetFileStreamInterface 27 int,int,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_IFsrmPropertyBag "{774589D1-D300-4F7A-9A24-F7B766800250}" #usecom global IFsrmPropertyBag IID_IFsrmPropertyBag "{}" #comfunc global IFsrmPropertyBag_get_Name 7 sptr #comfunc global IFsrmPropertyBag_get_RelativePath 8 sptr #comfunc global IFsrmPropertyBag_get_VolumeName 9 sptr #comfunc global IFsrmPropertyBag_get_RelativeNamespaceRoot 10 sptr #comfunc global IFsrmPropertyBag_get_VolumeIndex 11 sptr #comfunc global IFsrmPropertyBag_get_FileId 12 sptr #comfunc global IFsrmPropertyBag_get_ParentDirectoryId 13 sptr #comfunc global IFsrmPropertyBag_get_Size 14 sptr #comfunc global IFsrmPropertyBag_get_SizeAllocated 15 sptr #comfunc global IFsrmPropertyBag_get_CreationTime 16 sptr #comfunc global IFsrmPropertyBag_get_LastAccessTime 17 sptr #comfunc global IFsrmPropertyBag_get_LastModificationTime 18 sptr #comfunc global IFsrmPropertyBag_get_Attributes 19 sptr #comfunc global IFsrmPropertyBag_get_OwnerSid 20 sptr #comfunc global IFsrmPropertyBag_get_FilePropertyNames 21 sptr #comfunc global IFsrmPropertyBag_get_Messages 22 sptr #comfunc global IFsrmPropertyBag_get_PropertyBagFlags 23 sptr #comfunc global IFsrmPropertyBag_GetFileProperty 24 wstr,sptr #comfunc global IFsrmPropertyBag_SetFileProperty 25 wstr,wstr #comfunc global IFsrmPropertyBag_AddMessage 26 wstr #comfunc global IFsrmPropertyBag_GetFileStreamInterface 27 int,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。