Реализация файловой системы IPropertySetStorage-NTFS

NTFS версии 5.0 предоставляет реализацию IPropertySetStorage для файлов на томе NTFS, когда сами файлы не являются составными файлами. Реализация NTFS эквивалентна реализации составного файла. Дополнительные сведения об исключениях см. в разделе Примечания.

Получение указателя на реализацию ФАЙЛОВОЙ СИСТЕМЫ NTFS для IPropertySetStorage

  1. Вызовите StgCreateStorageEx и укажите STGFMT_FILE в параметре grfFlags , чтобы создать новый файл.
  2. Вызовите StgOpenStorageEx и укажите значение перечисления STGFMT_FILE или STGFMT_ANY в параметре grfFlags , чтобы открыть существующий файл.

Однако невозможно получить реализацию NTFS IPropertySetStorage для составного файла. При открытии составного файла с помощью StgOpenStorage указание значения перечисления STGFMT_FILE приводит к ошибке.

Кроме того, простые наборы свойств не могут выполняться. То есть вы не можете указать STGM_TRANSACTED в параметре grfmode методов Create и Open , если вы также не укажете PROPSETFLAG_NONSIMPLE в параметре grfFlags . Сам объект хранилища набора свойств не поддерживает обработку транзакций.

Назначение

Вызовите методы IPropertySetStorage для создания, открытия или удаления наборов свойств в текущем хранилище наборов свойств NTFS. Существует также метод IPropertySetStorage::Enum, который предоставляет указатель на перечислитель, который можно использовать для перечисления наборов свойств в хранилище.

Совместимость

Реализации ФАЙЛОВ NTFS для IPropertySetStorage и IPropertyStorage доступны начиная с Windows 2000. Более ранние версии не могут получить доступ к этим наборам свойств.

Реализация NTFS хранит наборы свойств в альтернативных потоках файла NTFS. При копировании файла main необходимо скопировать альтернативные потоки.

Внимание!

Не все файловые системы поддерживают такие потоки. Если файл NTFS с наборами свойств копируется в том FAT, копируются только данные из файла; набор свойств теряется. В этом случае функция CopyFile не возвращает ошибку.

 

Внимание!

Если компьютер, выполняющий копирование файлов, не является компьютером под управлением Windows 2000 или более поздней версии, наборы свойств могут быть потеряны. Например, если компьютер под управлением операционной системы Windows 95 копирует ФАЙЛ NTFS, набор свойств теряется, даже если целевой файл также находится на томе NTFS.

 

Методы

Реализация файловой системы NTFS IPropertySetStorage поддерживает следующие методы.

IPropertySetStorage::Create

Создает новый набор свойств в текущем хранилище файлов NTFS и при возврате предоставляет указатель интерфейса на реализацию файла NTFS IPropertyStorage . Режим общего доступа, указанный в параметре grfmode , должен быть STGM_SHARE_EXCLUSIVE.

IPropertySetStorage::Open

Открывает существующий набор свойств в текущем хранилище свойств. При возврате он предоставляет указатель интерфейса на реализацию файла NTFS IPropertyStorage. Режим общего доступа, указанный в параметре grfmode , должен быть STGM_SHARE_EXCLUSIVE.

IPropertySetStorage::D elete

Удаляет набор свойств из текущего хранилища свойств.

IPropertySetStorage::Enum

Создает объект, используемый для перечисления структур STATPROPSETSTG . Каждая структура STATPROPSETSTG предоставляет данные об одном наборе свойств.

Комментарии

Реализации файловОЙ системы NTFS для наборов свойств IPropertySetStorage и IPropertyStorage в файле не влияют на содержимое этого файла. Например, если вы создаете набор свойств в HTML-файле с именем Default.htm, этот файл по-прежнему будет правильно отображаться в веб-браузере. То есть изменения в файле с помощью этих двух интерфейсов не будут обнаружиться при доступе к файлу с помощью функции CreateFile .

Реализация NTFS IPropertySetStorage обеспечивает безопасную реализацию при записи наборов свойств в файл на томе NTFS версии 5.0. Такие наборы свойств не могут быть повреждены реализацией даже в случае сбоя системы. Например, если во время вызова IPropertyStorage::Commit происходит сбой питания системы, а набор свойств сбрасывается на диск, набор свойств никогда не остается в промежуточном состоянии. Сохраняется предыдущая версия набора свойств или сохраняются все обновления.

Реализация ФАЙЛОВОЙ СИСТЕМЫ NTFS для IPropertySetStorage отличается от реализации составного файла следующими способами:

  • Структура STATPROPSETSTG , полученная из интерфейса IEnumSTATPROPSETSTG , содержит элемент clsid , значение которого всегда равно нулю (CLSID_NULL). При реализации составного файла правильный элемент clsid возвращается для несложных наборов свойств (см. раздел Storage and Stream Objects for a Property Set).

  • При получении реализации NTFS указателя интерфейса IPropertySetStorage с помощью функции StgCreateStorageEx или StgOpenStorageEx параметр 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 .

    На такие одновременные экземпляры открытия этого интерфейса распространяются следующие ограничения: параметр dwShareMode в функции CreateFile должен указывать флаг FILE_SHARE_READ , а параметр dwAccess не должен указывать флаг DELETE . Кроме того, функции DeleteFile и MoveFile не должны вызываться для файла, для которого открыты интерфейсы набора свойств, так как для этих функций требуется доступ DELETE к файлу.

  • Если метод NTFS IPropertySetStorage открыт как доступный только для чтения и файл в настоящее время не имеет наборов свойств, возвращенный объект фактически не будет содержать открытый файл. Следовательно, другие открытия этого файла будут успешными, даже если режим общего доступа исходной операции открытия в противном случае отклонил бы его.

    Примере; Если файл NTFS IPropertySetStorage открыт в режиме STGM_READ| STGM_SHARE_EXCLUSIVE и файл не имеет наборов свойств, можно будет одновременно открыть файл STGM_READWRITE| STGM_SHARE_EXCLUSIVE.

Реализация файловой системы IPropertyStorage-NTFS

IPropertySetStorage

IPropertyStorage

IStorage::EnumElements

Константы PROPSETFLAG

STATPROPSETSTG