Автономная реализация IPropertyStorage
Предоставляемая системой автономная реализация IPropertySetStorage включает реализацию IPropertyStorage, интерфейса, который считывает и записывает свойства в хранилище наборов свойств. Интерфейс IPropertySetStorage создает и открывает наборы свойств в хранилище. Интерфейсы IEnumSTATPROPSTG и IEnumSTATPROPSETSTG также предоставляются в изолированной реализации.
Чтобы получить указатель на автономную реализацию IPropertyStorage, вызовите функцию StgCreatePropStg , чтобы создать новый набор свойств, или StgOpenPropStg для получения указателя интерфейса на существующий набор свойств (или вызовите методы Create или Open изолированной реализации IPropertySetStorage ).
Автономная реализация IPropertyStorage создает наборы свойств для любого объекта хранилища или потока, а не только в составных хранилищах файлов и потоках. Автономная реализация не зависит от составных файлов и может использоваться с любой реализацией структурированных хранилищ. Дополнительные сведения о реализации составного файла этого интерфейса см. в разделе Реализация составного файла IPropertyStorage-Compound File.
Назначение
Используйте IPropertyStorage для управления свойствами в одном наборе свойств. Его методы поддерживают чтение, запись и удаление свойств и необязательных строковых имен, которые могут быть связаны с идентификаторами свойств. Другие методы поддерживают стандартные операции фиксации и отменить изменения хранилища. Существует также метод, который задает время, связанное с хранилищем свойств, и другой метод, позволяющий использовать назначение ИДЕНТИФИКАТОРа CLSID для связывания другого кода, например кода пользовательского интерфейса, с набором свойств. Метод Enum предоставляет указатель на автономную реализацию IEnumSTATPROPSTG, которая перечисляет свойства в наборе.
Форматы наборов свойств версий 0 и 1
Автономная реализация IPropertyStorage поддерживает форматы сериализации наборов свойств версии 0 и версии 1. Дополнительные сведения см. в разделе Сериализация набора свойств. Наборы свойств создаются в формате версии 0 и остаются в этом формате, если не запрашиваются новые функции. В это время формат обновляется до версии 1.
Например, если набор свойств создается с флагом PROPSETFLAG_DEFAULT, его формат — версия 0. Если типы свойств, соответствующие формату версии 0, записываются в этот набор свойств и считываются из них, набор свойств остается в формате версии 0. Если тип свойства версии 1 записывается в набор свойств, набор свойств автоматически обновляется до версии 1. Впоследствии этот набор свойств больше не может быть прочитан реализациями, которые понимают только версию 0.
Типы IPropertyStorage и Variant
Автономная реализация IPropertyStorage не поддерживает типы вариантов VT_UNKNOWN или VT_DISPATCH в элементе vt структуры PROPVARIANT .
В SafeArray поддерживаются следующие типы вариантов. то есть эти значения можно объединить с VT_ARRAY в элементе vt структуры PROPVARIANT .
Типы variant, поддерживаемые в SafeArray реализацией составного файла IPropertyStorage
VT_I1
VT_UI1
VT_I2
VT_UI2
VT_I4
VT_UI4
VT_INT
VT_UINT
VT_R4
VT_R8
VT_CY
VT_DATE
VT_BSTR
VT_BOOL.
VT_DECIMAL
VT_ERROR
VT_VARIANT
При объединении VT_VARIANT с VT_ARRAY сам SafeArray содержит структуры PROPVARIANT . Однако типы этих элементов должны быть взяты из предыдущего списка, не могут быть VT_VARIANT и не могут содержать индикаторы VT_VECTOR, VT_ARRAY или VT_BYREF.
Методы IPropertyStorage
Автономная реализация IPropertyStorage поддерживает следующие методы:
-
Считывает свойства, указанные в массиве rgpspec , и предоставляет значения всех допустимых свойств в массиве rgvar элементов PROPVARIANT .
В системной автономной реализации повторяющиеся идентификаторы свойств, ссылающиеся на типы потоков или хранилищ, приводят к нескольким вызовам IStorage::OpenStream или IStorage::OpenStorage::OpenStorage , а успех или сбой ReadMultiple зависит от способности базовой реализации хранилища совместно использовать открытые хранилища.
Кроме того, чтобы обеспечить потокобезопасную операцию, если одно и то же свойство с значением потока или хранилища запрашивается несколько раз с помощью одного указателя IPropertyStorage , открытие будет выполнено успешно или завершится сбоем в зависимости от того, открыто ли свойство уже, а также от того, обрабатывает ли базовая файловая система несколько операций открытия потока или хранилища. Таким образом, операция ReadMultiple для свойства со значением потока или хранилища всегда приводит к вызову IStorage::OpenStream или IStorage::OpenStorage, передавая доступ (например, STGM_READWRITE) и общие значения (например, STGM_SHARE_EXCLUSIVE), указанные при первоначальном открытии или создании набора свойств.
Если метод завершается сбоем, значения, записанные в rgvar[], не определены. Если некоторые свойства, возвращаемые потоком или хранилищем, успешно открыты, но до завершения выполнения возникает ошибка, эти свойства должны быть освобождены до возврата метода.
-
Записывает свойства, указанные в массиве rgpspec[], присваивая им теги PROPVARIANT и значения, указанные в rgvar[]. Уже существующим свойствам присваиваются указанные значения PROPVARIANT , а свойства, которые в настоящее время не существуют, создаются.
-
Удаляет свойства, указанные в rgpspec[].
-
Считывает существующие строковые имена, связанные с идентификаторами свойств, указанными в массиве rgpropid[].
-
Присваивает имена строк, указанные в массиве rglpwstrName идентификаторам свойств, указанным в массиве rgpropid .
-
Удаляет строковые имена идентификаторов свойств, указанных в массиве rgpropid , записывая в имя свойства значение NULL .
-
Задает ИДЕНТИФИКАТОР CLSID потока набора свойств. В автономной реализации установка CLSID в неимпляющем наборе свойств (который может содержать свойства с значением хранилища или потока, как описано в разделе IPropertySetStorage::Create) также задает CLSID в базовом подtorage, чтобы его можно было получить с помощью вызова IStorage::Stat.
-
Для простых и неимпляционных наборов свойств выполняет очистку образа памяти в дисковой подсистеме. Кроме того, для неимплированных наборов свойств в режиме транзакций этот метод вызывает метод IStorage::Commit в наборе свойств.
-
Только для неимплейных наборов свойств вызывает метод Revert базового хранилища и повторно открывает поток "содержимое". Для простых наборов свойств возвращает только E_OK.
-
Создает объект перечислителя, реализующий IEnumSTATPROPSTG, методы которого могут вызываться для перечисления структур STATPROPSTG , предоставляющих сведения о каждом из свойств в наборе.
Эта реализация создает массив, в который считывается весь набор свойств и который можно совместно использовать при вызове метода IEnumSTATPROPSTG::Clone .
-
Заполняет элементы структуры STATPROPSETSTG , которая содержит сведения о наборе свойств в целом. При возврате передает указатель на структуру.
Для неимплейных наборов хранилищ эта реализация вызывает IStorage::Stat (или IStream::Stat) для получения сведений из базового хранилища или потока.
-
Только для неимплейных наборов свойств задает время, поддерживаемое базовым хранилищем. Эта реализация SetTimes вызывает метод IStorage::SetElementTimes базового хранилища для изменения времени. Он поддерживает время, поддерживаеме базовым методом, которое может быть временем изменения, временем доступа или временем создания.
Связанные темы