Implementazione del file system IPropertySetStorage-NTFS
NTFS versione 5.0 fornisce un'implementazione di IPropertySetStorage per i file in un volume NTFS quando i file stessi non sono file composti. L'implementazione NTFS equivale all'implementazione del file composto. Per altre informazioni sulle eccezioni, vedere Osservazioni.
Per ottenere un puntatore all'implementazione NTFS di IPropertySetStorage
- Chiamare StgCreateStorageEx e specificare STGFMT_FILE nel parametro grfFlags per creare un nuovo file.
- Chiamare StgOpenStorageEx e specificare il valore di enumerazione STGFMT_FILE o STGFMT_ANY nel parametro grfFlags per aprire un file esistente.
Tuttavia, non è possibile ottenere l'implementazione NTFS di IPropertySetStorage per un file composto. Quando si apre un file composto con StgOpenStorage, specificando il valore di enumerazione STGFMT_FILE genera un errore.
Inoltre, i set di proprietà semplici non possono essere transazionati. In questo caso, non è possibile specificare STGM_TRANSACTED nel parametro grfmode dei metodi Create and Open , a meno che non si specifichi anche PROPSETFLAG_NONSIMPLE nel parametro grfFlags . L'oggetto di archiviazione impostato dalla proprietà non supporta l'elaborazione delle transazioni.
Utilizzo
Chiamare i metodi IPropertySetStorage per creare, aprire o eliminare i set di proprietà nel set di proprietà NTFS corrente. Esiste anche un metodo IPropertySetStorage::Enum, che fornisce un puntatore a un enumeratore che può essere usato per enumerare i set di proprietà nell'archiviazione.
Compatibilità
Le implementazioni NTFS di IPropertySetStorage e IPropertyStorage sono disponibili a partire da Windows 2000. Le versioni precedenti non possono accedere a questi set di proprietà.
L'implementazione NTFS archivia i set di proprietà in flussi alternativi di un file NTFS. I flussi alternativi devono essere copiati quando il file principale viene copiato.
Attenzione
Non tutti i file system supportano tali flussi. Se un file NTFS con set di proprietà viene copiato in un volume FAT, vengono copiati solo i dati nel file; il set di proprietà viene perso. La funzione CopyFile non restituisce un errore in questo caso.
Attenzione
Se il computer che esegue la copia del file non è un computer in esecuzione in Windows 2000 o versioni successive, i set di proprietà potrebbero essere persi. Ad esempio, se un computer in esecuzione nel sistema operativo Windows 95 copia un file NTFS, il set di proprietà viene perso anche se il file di destinazione è anche in un volume NTFS.
Metodi
L'implementazione del file system NTFS di IPropertySetStorage supporta i metodi seguenti.
-
Crea una nuova proprietà impostata nell'archiviazione file NTFS corrente e, in caso di restituzione, fornisce un puntatore dell'interfaccia all'implementazione del file NTFS IPropertyStorage . La modalità di condivisione specificata nel parametro grfmode deve essere STGM_SHARE_EXCLUSIVE.
-
Apre una proprietà esistente impostata nell'archiviazione delle proprietà corrente. In caso contrario, fornisce un puntatore dell'interfaccia all'implementazione del file NTFS di IPropertyStorage. La modalità di condivisione specificata nel parametro grfmode deve essere STGM_SHARE_EXCLUSIVE.
-
Elimina una proprietà impostata nell'archiviazione delle proprietà corrente.
-
Crea un oggetto usato per enumerare le strutture STATPROPSETSTG . Ogni struttura STATPROPSETSTG fornisce dati relativi a un singolo set di proprietà.
Commenti
Le implementazioni NTFS di IPropertySetStorage e IPropertyStorage archiviano set di proprietà in un file senza influire sul contenuto di tale file. Ad esempio, se si crea una proprietà impostata in un file HTML denominato Default.htm, tale file viene comunque visualizzato correttamente in un Web browser. Vale a dire, le modifiche apportate a un file usando queste due interfacce non sono rilevabili quando si accede a un file con la funzione CreateFile .
L'implementazione NTFS di IPropertySetStorage fornisce un'implementazione sicura quando viene usata per scrivere set di proprietà su un file in un volume NTFS versione 5.0. Tali set di proprietà non possono essere danneggiati dall'implementazione anche in caso di errore di sistema. Ad esempio, se l'alimentazione di un sistema ha esito negativo durante una chiamata a IPropertyStorage::Commit mentre il set di proprietà viene scaricato sul disco, il set di proprietà non viene mai lasciato in uno stato intermedio. La versione precedente del set di proprietà rimane o tutti gli aggiornamenti vengono salvati.
L'implementazione NTFS di IPropertySetStorage differisce dall'implementazione del file composto nei modi seguenti:
Una struttura STATPROPSETSTG ottenuta dall'interfaccia IEnumSTATPROPSETSTG contiene un membro clsid il cui valore è sempre zero (CLSID_NULL). Con l'implementazione del file composto, il membro clsid corretto viene restituito per i set di proprietà non semplici (vedere Oggetti di archiviazione e flusso per un set di proprietà).
Quando si ottiene un'implementazione NTFS del puntatore dell'interfaccia IPropertySetStorage usando la funzione StgCreateStorageEx o StgOpenStorageEx, il parametro grfmode deve seguire le stesse regole dell'implementazione del file composto.
Inoltre, i flag seguenti potrebbero non essere usati:
STGM_SIMPLE, STGM_TRANSACTED, STGM_CONVERT, STGM_PRIORITY e STGM_DELETEONRELEASE.
Quando un'interfaccia NTFS IPropertySetStorage viene ottenuta dalle funzioni StgCreateStorageEx o StgOpenStorageEx, le modalità di condivisione si applicano principalmente ad altre istanze di tale interfaccia e non alle istanze di apertura del file stesso. Ad esempio, se un'interfaccia NTFS IPropertySetStorage viene aperta chiamando la funzione StgOpenStorageEx , con il parametro grfmode impostato su STGM_READWRITE| STGM_SHARE_EXCLUSIVE, è possibile aprire il file con la funzione CreateFile .
Tali istanze simultanee di apertura di questa interfaccia sono soggette ai vincoli seguenti: il parametro dwShareMode nella funzione CreateFile deve specificare il flag di FILE_SHARE_READ e il parametro dwAccess non deve specificare il flag DELETE . Inoltre, le funzioni DeleteFile e MoveFile non devono essere chiamate su un file per cui queste interfacce del set di proprietà sono aperte, perché queste funzioni richiedono l'accesso DELETE al file.
Se un metodo NTFS IPropertySetStorage viene aperto come di sola lettura e il file attualmente non ha set di proprietà, l'oggetto restituito non mantiene effettivamente aperto il file. Di conseguenza, altre aperture di tale file avranno esito positivo, anche se la modalità di condivisione dell'operazione aperta originale avrebbe altrimenti rifiutato.
Esempio; se viene aperto un oggetto NTFS IPropertySetStorage nella modalità STGM_READ| STGM_SHARE_EXCLUSIVE e il file non ha set di proprietà, sarà possibile aprire simultaneamente il file STGM_READWRITE| STGM_SHARE_EXCLUSIVE.
Argomenti correlati