Implémentation du système de fichiers IPropertySetStorage-NTFS

NTFS version 5.0 fournit une implémentation d’IPropertySetStorage pour les fichiers sur un volume NTFS lorsque les fichiers eux-mêmes ne sont pas des fichiers composés. L’implémentation NTFS est équivalente à l’implémentation de fichier composé. Pour plus d’informations sur les exceptions, consultez Remarques.

Pour obtenir un pointeur vers l’implémentation NTFS d’IPropertySetStorage

  1. Appelez StgCreateStorageEx et spécifiez STGFMT_FILE dans le paramètre grfFlags pour créer un fichier.
  2. Appelez StgOpenStorageEx et spécifiez la valeur d’énumération STGFMT_FILE ou STGFMT_ANY dans le paramètre grfFlags pour ouvrir un fichier existant.

Toutefois, vous ne pouvez pas obtenir l’implémentation NTFS d’IPropertySetStorage pour un fichier composé. Lors de l’ouverture d’un fichier composé avec StgOpenStorage, la spécification de la valeur d’énumération STGFMT_FILE génère une erreur.

En outre, les jeux de propriétés simples ne peuvent pas être traités. Autrement dit, vous ne pouvez pas spécifier STGM_TRANSACTED dans le paramètre grfmode des méthodes Create et Open , sauf si vous spécifiez également PROPSETFLAG_NONSIMPLE dans le paramètre grfFlags . L’objet de stockage de jeu de propriétés lui-même ne prend pas en charge le traitement des transactions.

Quand l’utiliser

Appelez les méthodes IPropertySetStorage pour créer, ouvrir ou supprimer des jeux de propriétés dans le stockage actuel du jeu de propriétés NTFS. Il existe également une méthode, IPropertySetStorage::Enum, qui fournit un pointeur vers un énumérateur qui peut être utilisé pour énumérer les jeux de propriétés dans le stockage.

Compatibilité

Les implémentations NTFS de IPropertySetStorage et IPropertyStorage sont disponibles à partir de Windows 2000. Les versions antérieures ne peuvent pas accéder à ces jeux de propriétés.

L’implémentation NTFS stocke les jeux de propriétés dans d’autres flux d’un fichier NTFS. Les autres flux doivent être copiés lorsque le fichier main est copié.

Attention

Tous les systèmes de fichiers ne prennent pas en charge ces flux. Si un fichier NTFS avec des jeux de propriétés est copié dans un volume FAT, seules les données du fichier sont copiées ; le jeu de propriétés est perdu. La fonction CopyFile ne retourne pas d’erreur dans ce cas.

 

Attention

Si l’ordinateur qui effectue la copie de fichiers n’est pas un ordinateur exécutant Windows 2000 ou version ultérieure, les jeux de propriétés peuvent être perdus. Par exemple, si un ordinateur s’exécutant sur le système d’exploitation Windows 95 copie un fichier NTFS, le jeu de propriétés est perdu même si le fichier de destination se trouve également sur un volume NTFS.

 

Méthodes

L’implémentation du système de fichiers NTFS d’IPropertySetStorage prend en charge les méthodes suivantes.

IPropertySetStorage::Create

Crée un nouveau jeu de propriétés dans le stockage de fichiers NTFS actuel et, au retour, fournit un pointeur d’interface vers l’implémentation du fichier NTFS IPropertyStorage . Le mode de partage spécifié dans le paramètre grfmode doit être STGM_SHARE_EXCLUSIVE.

IPropertySetStorage::Open

Ouvre un jeu de propriétés existant dans le stockage de propriétés actuel. Au retour, il fournit un pointeur d’interface vers l’implémentation de fichier NTFS d’IPropertyStorage. Le mode de partage spécifié dans le paramètre grfmode doit être STGM_SHARE_EXCLUSIVE.

IPropertySetStorage::D elete

Supprime un jeu de propriétés dans le stockage de propriétés actuel.

IPropertySetStorage::Enum

Crée un objet utilisé pour énumérer les structures STATPROPSETSTG . Chaque structure STATPROPSETSTG fournit des données sur un jeu de propriétés unique.

Notes

Les implémentations NTFS d’IPropertySetStorage et IPropertyStorage stockent des jeux de propriétés dans un fichier sans affecter le contenu de ce fichier. Par exemple, si vous créez un ensemble de propriétés dans un fichier HTML nommé Default.htm, ce fichier s’affiche toujours correctement dans un navigateur Web. Autrement dit, les modifications apportées à un fichier à l’aide de ces deux interfaces sont indétectables lors de l’accès à un fichier avec la fonction CreateFile .

L’implémentation NTFS d’IPropertySetStorage fournit une implémentation sécurisée lorsqu’elle est utilisée pour écrire des jeux de propriétés dans un fichier sur un volume NTFS version 5.0. Ces jeux de propriétés ne peuvent pas être endommagés par l’implémentation, même en cas de défaillance du système. Par exemple, si l’alimentation d’un système échoue lors d’un appel à IPropertyStorage::Commit alors que le jeu de propriétés est vidé sur le disque, le jeu de propriétés n’est jamais laissé dans un état intermédiaire. Soit la version précédente du jeu de propriétés reste, soit toutes les mises à jour sont enregistrées.

L’implémentation NTFS d’IPropertySetStorage diffère de l’implémentation de fichier composé des manières suivantes :

  • Une structure STATPROPSETSTG obtenue à partir de l’interface IEnumSTATPROPSETSTG contient un membre clsid dont la valeur est toujours égale à zéro (CLSID_NULL). Avec l’implémentation de fichier composé, le membre clsid correct est retourné pour les ensembles de propriétés non simples (voir Storage and Stream Objects for a Property Set).

  • Lors de l’obtention d’une implémentation NTFS du pointeur d’interface IPropertySetStorage à l’aide de la fonction StgCreateStorageEx ou StgOpenStorageEx , le paramètre grfmode doit suivre les mêmes règles que pour l’implémentation de fichier composé.

    En outre, les indicateurs suivants ne peuvent pas être utilisés :

    STGM_SIMPLE, STGM_TRANSACTED, STGM_CONVERT, STGM_PRIORITY et STGM_DELETEONRELEASE.

  • Lorsqu’une interface NTFS IPropertySetStorage est obtenue par les fonctions StgCreateStorageEx ou StgOpenStorageEx , les modes de partage s’appliquent principalement à d’autres instances de cette interface, et non aux instances d’ouverture du fichier lui-même. Par exemple, si une interface NTFS IPropertySetStorage est ouverte en appelant la fonction StgOpenStorageEx , avec le paramètre grfmode défini sur STGM_READWRITE| STGM_SHARE_EXCLUSIVE, il est possible d’ouvrir le fichier avec la fonction CreateFile .

    Ces instances simultanées d’ouverture de cette interface sont soumises aux contraintes suivantes : le paramètre dwShareMode de la fonction CreateFile doit spécifier l’indicateur FILE_SHARE_READ et le paramètre dwAccess ne doit pas spécifier l’indicateur DELETE . En outre, les fonctions DeleteFile et MoveFile ne doivent pas être appelées sur un fichier pour lequel ces interfaces de jeu de propriétés sont ouvertes, car ces fonctions nécessitent un accès DELETE au fichier.

  • Si une méthode NTFS IPropertySetStorage est ouverte en lecture seule et que le fichier n’a actuellement aucun jeu de propriétés, l’objet retourné n’ouvre pas le fichier. Par conséquent, d’autres ouvertures de ce fichier réussissent, même si le mode de partage de l’opération d’ouverture d’origine le rejetterait.

    Exemple; si un IPropertySetStorage NTFS est ouvert en mode STGM_READ| STGM_SHARE_EXCLUSIVE, et le fichier n’a pas de jeux de propriétés, il sera possible d’ouvrir simultanément le fichier STGM_READWRITE| STGM_SHARE_EXCLUSIVE.

Implémentation du système de fichiers IPropertyStorage-NTFS

IPropertySetStorage

IPropertyStorage

IStorage::EnumElements

Constantes PROPSETFLAG

STATPROPSETSTG