Implementación de archivos IStorage-Compound

La implementación de archivos compuestos de IStorage permite crear y administrar substorages y secuencias dentro de un objeto de almacenamiento que resida en un objeto de archivo compuesto. Para crear un objeto de archivo compuesto y obtener un puntero de IStorage , llame a la función de API StgCreateStorageEx. Para abrir un objeto de archivo compuesto existente y obtener su puntero de IStorage raíz, llame a StgOpenStorageEx.

Las aplicaciones que usan almacenamiento compuesto deben registrarse en HKEY_CLASSES_ROOT\SystemFileAssociations y deben proporcionar sus propios controladores de propiedades. Para obtener más información, vea la sección "Registrar verbos y otra información de asociación de archivos" del registro de aplicaciones.

Casos en los que se debe usar

La mayoría de las aplicaciones usan esta implementación para crear y administrar almacenamientos y flujos.

Métodos

IStorage::CreateStream

Crea y abre un objeto de secuencia con el nombre especificado incluido en este objeto de almacenamiento. El nombre no debe superar los 31 caracteres de longitud (sin incluir el terminador de cadena). Los caracteres 000 a 01f, que actúan como el primer carácter del nombre de la secuencia/almacenamiento, se reservan para uso de OLE. Es una restricción de archivo compuesto, no una restricción de almacenamiento estructurado. La implementación del archivo compuesto proporcionado por COM del método IStorage::CreateStream no admite los comportamientos siguientes:

  • No se admite la marca STGM_DELETEONRELEASE.
  • No se admite el modo de transacción (STGM_TRANSACTED) para los objetos de secuencia.
  • No se admite la apertura de la misma secuencia más de una vez desde el mismo almacenamiento. La marca STGM_SHARE_EXCLUSIVE modo de uso compartido debe especificarse en el parámetro grfMode .

IStorage::OpenStream

Abre un objeto de secuencia existente dentro de este objeto de almacenamiento mediante los modos de acceso especificados en el parámetro grfMode . Los caracteres 000 a 01f, que actúan como el primer carácter del nombre de la secuencia/almacenamiento, se reservan para uso de OLE. Es una restricción de archivo compuesto, no una restricción de almacenamiento estructurado. La implementación del archivo compuesto proporcionado por COM del método IStorage::OpenStream no admite el siguiente comportamiento:

  • Marca de STGM_DELETEONRELEASE.
  • Modo de transacción (STGM_TRANSACTED) para objetos de secuencia.
  • Abrir la misma secuencia más de una vez desde el mismo almacenamiento. Se debe especificar la marca STGM_SHARE_EXCLUSIVE.

IStorage::CreateStorage

Crea y abre un nuevo objeto de almacenamiento con el nombre especificado en el modo de acceso especificado. El nombre no debe superar los 31 caracteres de longitud (sin incluir el terminador de cadena). Los caracteres 000 a 01f, que actúan como el primer carácter del nombre de la secuencia/almacenamiento, se reservan para uso de OLE. Es una restricción de archivo compuesto, no una restricción de almacenamiento estructurado. La implementación del archivo compuesto proporcionado por COM del método IStorage::CreateStorage no admite el siguiente comportamiento:

  • Marca de STGM_PRIORITY para almacenamientos que no son raíz.
  • Abrir el mismo objeto de almacenamiento más de una vez desde el mismo almacenamiento primario. Se debe especificar la marca STGM_SHARE_EXCLUSIVE.
  • Marca de STGM_DELETEONRELEASE. Si se especifica esta marca, la función devuelve STG_E_INVALIDFLAG.

IStorage::OpenStorage

Abre un objeto de almacenamiento existente con el nombre especificado en el modo de acceso especificado. Los caracteres 000 a 01f, que actúan como el primer carácter del nombre de la secuencia/almacenamiento, se reservan para uso de OLE. Es una restricción de archivo compuesto, no una restricción de almacenamiento estructurado. La implementación del archivo compuesto proporcionado por COM del método IStorage::OpenStorage no admite el siguiente comportamiento:

  • Marca de STGM_PRIORITY para almacenamientos que no son raíz.
  • Abrir el mismo objeto de almacenamiento más de una vez desde el mismo almacenamiento primario. Se debe especificar la marca STGM_SHARE_EXCLUSIVE.
  • Marca de STGM_DELETEONRELEASE. Si se especifica esta marca, la función devuelve STG_E_INVALIDFUNCTION.

IStorage::CopyTo

Copia solo los substorages y secuencias de este objeto de almacenamiento abierto en otro objeto de almacenamiento. El parámetro rgiidExclude se puede establecer en IID_IStream para copiar solo substorages o para IID_IStorage copiar solo secuencias.

IStorage::MoveElementTo

Copia o mueve un substorage o un flujo de este objeto de almacenamiento a otro objeto de almacenamiento.

IStorage::Commit

Garantiza que los cambios realizados en un objeto de almacenamiento abierto en modo transaccionado se reflejan en el almacenamiento primario; para un almacenamiento raíz, refleja los cambios en el dispositivo real; por ejemplo, un archivo en el disco. En el caso de un objeto de almacenamiento raíz abierto en modo directo, este método no tiene ningún efecto excepto vaciar todos los búferes de memoria en el disco. En el caso de los objetos de almacenamiento que no son raíz en modo directo, este método no tiene ningún efecto.

La implementación de archivos compuestos proporcionados por COM usa un proceso de confirmación en dos fases a menos que se especifique STGC_OVERWRITE en el parámetro grfCommitFlags . Este proceso de dos fases garantiza la solidez de los datos, en caso de que se produzca un error en la operación de confirmación. En primer lugar, todos los datos nuevos se escriben en un espacio sin usar en el archivo subyacente. Si es necesario, se asigna un nuevo espacio al archivo. Una vez completado este paso, se actualiza una tabla del archivo mediante una operación de escritura de un solo sector para indicar que los nuevos datos se usarán en lugar del antiguo. Los datos antiguos se convierten en espacio libre que se usará en la siguiente operación de confirmación. Por lo tanto, los datos antiguos están disponibles y se pueden restaurar si se produce un error al confirmar cambios. Si se especifica STGC_OVERWRITE, se usa una operación de confirmación de fase única. Para obtener más información sobre las marcas de modo transaccionado, consulte enumeración STGC .

IStorage::Revert

Descarta todos los cambios realizados en el objeto de almacenamiento desde la última operación de confirmación.

IStorage::EnumElements

Crea y recupera un puntero a un objeto enumerador que se puede usar para enumerar los objetos de almacenamiento y secuencia contenidos en este objeto de almacenamiento. La implementación del archivo compuesto proporcionado por COM toma una instantánea de esa información. Por lo tanto, los cambios en las secuencias y los almacenamientos no se reflejan en el enumerador hasta que se obtiene un nuevo enumerador.

IStorage::D estroyElement

Quita el elemento especificado (substorage o stream) de este objeto de almacenamiento.

IStorage::RenameElement

Cambia el nombre del substorage o la secuencia especificados en este objeto de almacenamiento. Los caracteres 000 a 01f, que actúan como el primer carácter del nombre de la secuencia/almacenamiento, se reservan para uso de OLE. Es una restricción de archivo compuesto, no una restricción de almacenamiento estructurado.

IStorage::SetElementTimes

Establece las horas de modificación, acceso y creación del elemento de almacenamiento especificado. La implementación del archivo compuesto proporcionado por COM mantiene los tiempos de modificación y cambio de los objetos de almacenamiento internos. Los objetos de almacenamiento raíz admiten lo que sea compatible con el sistema de archivos subyacente (o por ILockBytes). La implementación del archivo compuesto no mantiene ninguna marca de tiempo para secuencias internas. Las marcas de tiempo no admitidas se notifican como cero, lo que permite al autor de la llamada probar el soporte técnico.

IStorage::SetClass

Asigna el CLSID especificado a este objeto de almacenamiento.

IStorage::SetStateBits

Almacena hasta 32 bits de información de estado en este objeto de almacenamiento. El estado establecido por este método es solo para uso externo. La implementación del archivo compuesto proporcionado por COM no realiza ninguna acción en función del estado.

IStorage::Stat

Recupera la estructura STATSTG para este objeto de almacenamiento abierto.

Comentarios

Si el objeto de almacenamiento se abre en modo simple, el uso de los métodos anteriores está restringido. Un almacenamiento está en modo simple si se abre con el elemento STGM_SIMPLE especificado en el parámetro grfMode de la función StgCreateStorageEx o StgOpenStorageEx . Para obtener más información sobre los almacenamientos en modo simple, vea Constantes STGM. Si el objeto de almacenamiento en modo simple se obtuvo de la función StgCreateStorageEx , se puede llamar al método CreateStream , pero el método OpenStream no. Si el objeto de almacenamiento en modo simple se obtuvo de la función StgOpenStorageEx , se puede llamar al método OpenStream , pero el método CreateStream no.

Cuando se usa un objeto de almacenamiento en modo simple para crear una secuencia, el tamaño mínimo de esa secuencia suele ser de 4096 bytes. Si se escriben menos datos en la secuencia, el tamaño se redondea hasta 4096 bytes.

Límites de implementación de archivos compuestos

IFillLockBytes

ILockBytes

IRootStorage

IStorage

Istream

StgCreateDocfile

StgCreateStorageEx

StgOpenStorage

StgOpenStorageEx