Implementación del sistema de archivos IPropertySetStorage-NTFS
NTFS versión 5.0 proporciona una implementación de IPropertySetStorage para archivos en un volumen NTFS cuando los propios archivos no son archivos compuestos. La implementación NTFS es equivalente a la implementación de archivo compuesto. Para obtener más información sobre las excepciones, vea Comentarios.
Para obtener un puntero a la implementación NTFS de IPropertySetStorage
- Llame a StgCreateStorageEx y especifique STGFMT_FILE en el parámetro grfFlags para crear un nuevo archivo.
- Llame a StgOpenStorageEx y especifique el valor de enumeración STGFMT_FILE o STGFMT_ANY en el parámetro grfFlags para abrir un archivo existente.
Sin embargo, no puede obtener la implementación NTFS de IPropertySetStorage para un archivo compuesto. Al abrir un archivo compuesto con StgOpenStorage, especificar el valor de enumeración STGFMT_FILE produce un error.
Además, los conjuntos de propiedades simples no se pueden realizar transacciones. Es decir, no puede especificar STGM_TRANSACTED en el parámetro grfmode de los métodos Create y Open a menos que también especifique PROPSETFLAG_NONSIMPLE en el parámetro grfFlags . El propio objeto de almacenamiento del conjunto de propiedades no admite el procesamiento de transacciones.
Casos en los que se debe usar
Llame a los métodos IPropertySetStorage para crear, abrir o eliminar conjuntos de propiedades en el almacenamiento actual del conjunto de propiedades NTFS. También hay un método, IPropertySetStorage::Enum, que proporciona un puntero a un enumerador que se puede usar para enumerar los conjuntos de propiedades en el almacenamiento.
Compatibilidad
Las implementaciones NTFS de IPropertySetStorage e IPropertyStorage están disponibles a partir de Windows 2000. Las versiones anteriores no pueden tener acceso a estos conjuntos de propiedades.
La implementación NTFS almacena conjuntos de propiedades en secuencias alternativas de un archivo NTFS. Las secuencias alternativas se deben copiar cuando se copia el archivo principal.
Precaución
No todos los sistemas de archivos admiten estos flujos. Si un archivo NTFS con conjuntos de propiedades se copia en un volumen FAT, solo se copian los datos del archivo; el conjunto de propiedades se pierde. La función CopyFile no devuelve un error en este caso.
Precaución
Si el equipo que realiza la copia de archivos no es un equipo que se ejecuta en Windows 2000 o posterior, es posible que se pierdan los conjuntos de propiedades. Por ejemplo, si un equipo que se ejecuta en el sistema operativo Windows 95 copia un archivo NTFS, el conjunto de propiedades se pierde incluso si el archivo de destino también está en un volumen NTFS.
Métodos
La implementación del sistema de archivos NTFS de IPropertySetStorage admite los métodos siguientes.
-
Crea una nueva propiedad establecida en el almacenamiento de archivos NTFS actual y, a cambio, proporciona un puntero de interfaz a la implementación del archivo NTFS IPropertyStorage . El modo de uso compartido especificado en el parámetro grfmode debe ser STGM_SHARE_EXCLUSIVE.
-
Abre un conjunto de propiedades existente en el almacenamiento de propiedades actual. A cambio, proporciona un puntero de interfaz a la implementación del archivo NTFS de IPropertyStorage. El modo de uso compartido especificado en el parámetro grfmode debe ser STGM_SHARE_EXCLUSIVE.
-
Elimina un conjunto de propiedades en el almacenamiento de propiedades actual.
-
Crea un objeto utilizado para enumerar estructuras STATPROPSETSTG . Cada estructura STATPROPSETSTG proporciona datos sobre un único conjunto de propiedades.
Comentarios
Las implementaciones NTFS de las propiedades de almacén IPropertySetStorage e IPropertyStorage en un archivo sin afectar al contenido de ese archivo. Por ejemplo, si crea una propiedad establecida en un archivo HTML denominado Default.htm, ese archivo se sigue mostrando correctamente en un explorador web. Es decir, los cambios en un archivo que usan estas dos interfaces no se detectan al acceder a un archivo con la función CreateFile .
La implementación NTFS de IPropertySetStorage proporciona una implementación segura cuando se usa para escribir conjuntos de propiedades en un archivo en un volumen NTFS versión 5.0. La implementación no puede dañar dichos conjuntos de propiedades incluso en caso de error del sistema. Por ejemplo, si se produce un error en la alimentación en un sistema durante una llamada a IPropertyStorage::Commit mientras el conjunto de propiedades se vacía en el disco, el conjunto de propiedades nunca se deja en un estado intermedio. La versión anterior del conjunto de propiedades permanece o se guardan todas las actualizaciones.
La implementación NTFS de IPropertySetStorage difiere de la implementación del archivo compuesto de las siguientes maneras:
Una estructura STATPROPSETSTG obtenida de la interfaz IEnumSTATPROPSETSTG contiene un miembro clsid cuyo valor es siempre cero (CLSID_NULL). Con la implementación del archivo compuesto, se devuelve el miembro clsid correcto para conjuntos de propiedades no simples (vea Objetos de almacenamiento y de flujo para un conjunto de propiedades).
Al obtener una implementación NTFS de puntero de interfaz IPropertySetStorage mediante la función StgCreateStorageEx o StgOpenStorageEx , el parámetro grfmode debe seguir las mismas reglas que para la implementación del archivo compuesto.
Además, es posible que no se usen las marcas siguientes:
STGM_SIMPLE, STGM_TRANSACTED, STGM_CONVERT, STGM_PRIORITY y STGM_DELETEONRELEASE.
Cuando las funciones StgCreateStorage oStgOpenStorageEx obtienen una interfaz NTFS IPropertySetStorageEx, los modos de uso compartido se aplican principalmente a otras instancias de esa interfaz y no a las instancias de abrir el propio archivo. Por ejemplo, si se abre una interfaz IPropertySetStorage ntfs mediante una llamada a la función StgOpenStorageEx , con el parámetro grfmode establecido en STGM_READWRITE| STGM_SHARE_EXCLUSIVE, es posible abrir el archivo con la función CreateFile .
Estas instancias simultáneas de apertura de esta interfaz están sujetas a las siguientes restricciones: el parámetro dwShareMode de la función CreateFile debe especificar la marca FILE_SHARE_READ y el parámetro dwAccess no debe especificar la marca DELETE . Además, no se debe llamar a las funciones DeleteFile y MoveFile en un archivo para el que están abiertas estas interfaces de conjunto de propiedades, ya que estas funciones requieren acceso DELETE al archivo.
Si se abre un método NTFS IPropertySetStorage como de solo lectura y el archivo no tiene actualmente ningún conjunto de propiedades, el objeto devuelto no contendrá realmente el archivo abierto. Por lo tanto, otras aperturas de ese archivo se realizarán correctamente, incluso si el modo de uso compartido de la operación de apertura original lo rechazaría.
Ejemplo; si se abre un IPropertySetStorage NTFS en el modo STGM_READ| STGM_SHARE_EXCLUSIVE y el archivo no tiene conjuntos de propiedades, será posible abrir simultáneamente el archivo STGM_READWRITE| STGM_SHARE_EXCLUSIVE.
Temas relacionados