IPropertySetStorage-NTFS ファイル システムの実装
NTFS バージョン 5.0 では、ファイル自体が複合ファイルでない場合に、NTFS ボリューム上のファイルに IPropertySetStorage の実装が提供されます。 NTFS の実装は、複合ファイルの実装に相当します。 例外の詳細については、「解説」を参照してください。
IPropertySetStorage の NTFS 実装へのポインターを取得するには
- StgCreateStorageEx呼び出し、grfFlags パラメーターに STGFMT_FILE を指定して新しいファイルを作成します。
- StgOpenStorageEx呼び出し、grfFlags パラメーターに STGFMT_FILE または STGFMT_ANY 列挙値のいずれかを指定して、既存のファイルを開きます。
ただし、複合ファイルの IPropertySetStorage の NTFS 実装を取得することはできません。 StgOpenStorage複合ファイルを開くと、STGFMT_FILE 列挙値を指定するとエラーが発生します。
また、単純なプロパティ セットは処理できません。 つまり、grfFlags パラメーターで PROPSETFLAG_NONSIMPLE を指定しない限り、Create メソッドと Open メソッドの grfmode パラメーターで STGM_TRANSACTED を指定することはできません。 プロパティ セットストレージオブジェクト自体は、トランザクション処理をサポートしていません。
使用するタイミング
IPropertySetStorage メソッドを呼び出して、現在の NTFS プロパティ セット ストレージにプロパティ セットを作成、開く、または削除します。 また、IPropertySetStorage::Enumメソッドもあります。このメソッドは、ストレージ内のプロパティ セットを列挙するために使用できる列挙子へのポインターを提供します。
互換性
IPropertySetStorage と IPropertyStorage の NTFS 実装は、Windows 2000 以降で使用できます。 以前のバージョンでは、これらのプロパティ セットにアクセスできません。
NTFS 実装は、NTFS ファイルの代替ストリームにプロパティ セットを格納します。 代替ストリームは、メイン ファイルのコピー時にコピーする必要があります。
注意
すべてのファイル システムがこのようなストリームをサポートしているわけではありません。 プロパティ セットを持つ NTFS ファイルが FAT ボリュームにコピーされた場合、ファイル内のデータのみがコピーされます。プロパティ セットが失われます。 この場合、CopyFile 関数はエラーを返しません。
注意
ファイル コピーを実行しているコンピューターが Windows 2000 以降で実行されているコンピューターでない場合は、プロパティ セットが失われる可能性があります。 たとえば、Windows 95 オペレーティング システムで実行されているコンピューターが NTFS ファイルをコピーした場合、ターゲット ファイルが NTFS ボリューム上にある場合でも、プロパティ セットは失われます。
メソッド
IPropertySetStorage の NTFS ファイル システムの実装では、次のメソッドがサポートされています。
-
現在の NTFS ファイル ストレージに新しいプロパティ セットを作成し、戻り値として、IPropertyStorage NTFS ファイル実装へのインターフェイス ポインターを提供します。 grfmode パラメーターで指定する共用モードは STGM_SHARE_EXCLUSIVEする必要があります。
-
現在のプロパティ ストレージ内の既存のプロパティ セットを開きます。 返されると、IPropertyStorageの NTFS ファイル実装へのインターフェイス ポインターが提供されます。 grfmode パラメーターで指定する共用モードは STGM_SHARE_EXCLUSIVEする必要があります。
-
現在のプロパティ ストレージ内のプロパティ セットを削除します。
-
STATPROPSETSTG構造体列挙するために使用するオブジェクトを作成します。 各 STATPROPSETSTG 構造体は、1 つのプロパティ セットに関するデータを提供します。
備考
IPropertySetStorage および IPropertyStorage NTFS 実装は、そのファイルの内容に影響を与えずにファイルにプロパティ セットを格納します。 たとえば、Default.htmという名前の HTML ファイルにプロパティ セットを作成した場合、そのファイルは引き続き Web ブラウザーに正しく表示されます。 つまり、CreateFile 関数を使用してファイルにアクセスする場合、これら 2 つのインターフェイスを使用したファイルへの変更は検出できません。
IPropertySetStorage の NTFS 実装は、NTFS バージョン 5.0 ボリューム上のファイルにプロパティ セットを書き込むときに安全な実装を提供します。 このようなプロパティ セットは、システム障害が発生した場合でも、実装によって破損することはできません。 たとえば、IPropertyStorage::Commit の呼び出し中に、プロパティ セットがディスクにフラッシュされているときにシステムへの電源が失敗した場合、プロパティ セットは中間状態のままになることはありません。 プロパティ セットの以前のバージョンが残っているか、すべての更新プログラムが保存されます。
IPropertySetStorage の NTFS 実装は、次の点で複合ファイルの実装とは異なります。
IEnumSTATPROPSETSTG インターフェイスから取得した STATPROPSETSTG 構造体には、値が常に 0 (CLSID_NULL) である clsid メンバーが含まれています。 複合ファイルの実装では、単純でない場合は、正しい clsid メンバーが返されます (プロパティ セット のストレージ オブジェクトとストリーム オブジェクト参照)。
StgCreateStorageExまたは stgOpenStorageEx 関数を使用して、IPropertySetStorage インターフェイス ポインターの NTFS 実装を取得する場合、grfmode パラメーターは複合ファイルの実装と同じ規則に従う必要があります。
また、次のフラグは使用できません。
STGM_SIMPLE、STGM_TRANSACTED、STGM_CONVERT、STGM_PRIORITY、および STGM_DELETEONRELEASE。
NTFS IPropertySetStorage インターフェイスが stgCreateStorageExまたは stgOpenStorageEx関数によって取得される場合、共有モードは主にそのインターフェイスの他のインスタンスに適用され、ファイル自体を開くインスタンスには適用されません。 たとえば、NTFS IPropertySetStorage インターフェイスを開くには、StgOpenStorageEx 関数を呼び出し、grfmode パラメーターを STGM_READWRITE|STGM_SHARE_EXCLUSIVE、CreateFile 関数を使用してファイルを開く可能性があります。
このインターフェイスを開く場合、このような同時インスタンスには、CreateFile 関数の dwShareMode パラメーターで FILE_SHARE_READ フラグを指定する必要があり、dwAccess パラメーターで DELETE フラグを指定することはできません。 また、DeleteFile 関数と MoveFile 関数は、これらのプロパティ セット インターフェイスが開かれているファイルに対して呼び出す必要はありません。これらの関数には、ファイルへのアクセス delete 必要があります。
NTFS IPropertySetStorage メソッドが読み取り専用で開かれている場合、ファイルに現在プロパティ セットがない場合、返されるオブジェクトは実際にはファイルを開いて保持しません。 そのため、元の開いている操作の共有モードで拒否された場合でも、そのファイルの他の開き方は成功します。
例;NTFS IPropertySetStorage がモード STGM_READ で開かれている場合|STGM_SHARE_EXCLUSIVE、ファイルにプロパティ セットがないため、ファイルを同時に開く STGM_READWRITE|STGM_SHARE_EXCLUSIVE.
関連トピック