Condividi tramite


Funzione CreateFileTransactedA (winbase.h)

[Microsoft consiglia vivamente agli sviluppatori di usare mezzi alternativi per soddisfare le esigenze dell'applicazione. Molti scenari per cui è stato sviluppato TxF possono essere ottenuti tramite tecniche più semplici e più facilmente disponibili. Inoltre, TxF potrebbe non essere disponibile nelle versioni future di Microsoft Windows. Per altre informazioni e alternative a TxF, vedere Alternative all'uso di NTFS transazionale.]

Crea o apre un file, un flusso di file o una directory come operazione transazionata. La funzione restituisce un handle che può essere utilizzato per accedere all'oggetto .

Per eseguire questa operazione come operazione non transazionata o per accedere a oggetti diversi dai file ,ad esempio named pipe, dispositivi fisici, mailslots, utilizzare la funzione CreateFile.

Per altre informazioni sulle transazioni, vedere la sezione Osservazioni di questo argomento.

Sintassi

HANDLE CreateFileTransactedA(
  [in]           LPCSTR                lpFileName,
  [in]           DWORD                 dwDesiredAccess,
  [in]           DWORD                 dwShareMode,
  [in, optional] LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  [in]           DWORD                 dwCreationDisposition,
  [in]           DWORD                 dwFlagsAndAttributes,
  [in, optional] HANDLE                hTemplateFile,
  [in]           HANDLE                hTransaction,
  [in, optional] PUSHORT               pusMiniVersion,
                 PVOID                 lpExtendedParameter
);

Parametri

[in] lpFileName

Nome di un oggetto da creare o aprire.

L'oggetto deve risiedere nel computer locale; in caso contrario, la funzione ha esito negativo e l'ultimo codice di errore è impostato su ERROR_TRANSACTIONS_UNSUPPORTED_REMOTE.

Per impostazione predefinita, il nome è limitato a MAX_PATH caratteri. Per estendere questo limite a 32.767 caratteri wide, anteporre "\\?\" al percorso. Per altre informazioni, vedere denominazione di file, percorsi e spazi dei nomi.

Mancia

A partire da Windows 10, versione 1607, è possibile acconsentire esplicitamente alla rimozione della limitazione MAX_PATH senza anteporre "\\?\". Per informazioni dettagliate, vedere la sezione "Limitazione massima della lunghezza del percorso" di nomi, percorsi e spazi dei nomi.

Per creare un flusso di file, specificare il nome del file, i due punti e quindi il nome del flusso. Per altre informazioni, vedere flussi di file.

[in] dwDesiredAccess

Accesso all'oggetto, che può essere riepilogato come lettura, scrittura, entrambi o nessuno dei due (zero). I valori usati più comunemente sono GENERIC_READ, GENERIC_WRITEo entrambi (GENERIC_READ | GENERIC_WRITE). Per altre informazioni, vedere diritti di accesso generico e diritti di accesso e sicurezza dei file.

Se questo parametro è zero, l'applicazione può eseguire query su file, directory o attributi del dispositivo senza accedere a tale file o dispositivo. Per altre informazioni, vedere la sezione Osservazioni di questo argomento.

Non è possibile richiedere una modalità di accesso in conflitto con la modalità di condivisione specificata in una richiesta aperta con un handle aperto. Per altre informazioni, vedere Creazione e apertura di file.

[in] dwShareMode

La modalità di condivisione di un oggetto, che può essere letta, scritta, entrambe, eliminate, tutte queste o nessuna (fare riferimento alla tabella seguente).

Se questo parametro è zero e CreateFileTransacted ha esito positivo, l'oggetto non può essere condiviso e non può essere aperto di nuovo finché l'handle non viene chiuso. Per altre informazioni, vedere la sezione Osservazioni di questo argomento.

Non è possibile richiedere una modalità di condivisione in conflitto con la modalità di accesso specificata in una richiesta aperta con un handle aperto, perché ciò comporta la violazione di condivisione seguente: ERROR_SHARING_VIOLATION. Per altre informazioni, vedere Creazione e apertura di file.

Per consentire a un processo di condividere un oggetto mentre un altro processo ha l'oggetto aperto, utilizzare una combinazione di uno o più dei valori seguenti per specificare la modalità di accesso che è possibile richiedere di aprire l'oggetto.

Nota Le opzioni di condivisione per ogni handle aperto rimangono attive fino a quando tale handle non viene chiuso, indipendentemente dal contesto del processo.
 
Valore Significato
0
0x00000000
Disabilita le successive operazioni aperte su un oggetto per richiedere qualsiasi tipo di accesso a tale oggetto.
FILE_SHARE_DELETE
0x00000004
Consente alle successive operazioni aperte su un oggetto di richiedere l'accesso di eliminazione.

In caso contrario, altri processi non possono aprire l'oggetto se richiedono l'accesso di eliminazione.

Se questo flag non è specificato, ma l'oggetto è stato aperto per l'accesso all'eliminazione, la funzione ha esito negativo.

FILE_SHARE_READ
0x00000001
Consente alle successive operazioni aperte su un oggetto di richiedere l'accesso in lettura.

In caso contrario, altri processi non possono aprire l'oggetto se richiedono l'accesso in lettura.

Se questo flag non viene specificato, ma l'oggetto è stato aperto per l'accesso in lettura, la funzione ha esito negativo.

FILE_SHARE_WRITE
0x00000002
Consente alle successive operazioni aperte su un oggetto di richiedere l'accesso in scrittura.

In caso contrario, altri processi non possono aprire l'oggetto se richiedono l'accesso in scrittura.

Se questo flag non viene specificato, ma l'oggetto è stato aperto per l'accesso in scrittura o ha un mapping di file con accesso in scrittura, la funzione ha esito negativo.

[in, optional] lpSecurityAttributes

Puntatore a una struttura di SECURITY_ATTRIBUTES che contiene un descrittore di sicurezza facoltativo e determina anche se l'handle restituito può essere ereditato dai processi figlio. Il parametro può essere NULL.

Se il parametro lpSecurityAttributes è NULL, l'handle restituito da CreateFileTransacted non può essere ereditato da alcun processo figlio che l'applicazione può creare e l'oggetto associato all'handle restituito ottiene un descrittore di sicurezza predefinito.

Il bInheritHandle membro della struttura specifica se l'handle restituito può essere ereditato.

Il lpSecurityDescriptor membro della struttura specifica un descrittore di sicurezza per un oggetto, ma può anche essere NULL.

Se membro lpSecurityDescriptor è NULL, all'oggetto associato all'handle restituito viene assegnato un descrittore di sicurezza predefinito.

CreateFileTransacted ignora il membro lpSecurityDescriptor all'apertura di un file esistente, ma continua a usare il membro bInheritHandle .

Per altre informazioni, vedere la sezione Osservazioni di questo argomento.

[in] dwCreationDisposition

Azione da intraprendere sui file esistenti e non esistenti.

Per altre informazioni, vedere la sezione Osservazioni di questo argomento.

Questo parametro deve essere uno dei valori seguenti, che non può essere combinato.

Valore Significato
CREATE_ALWAYS
2
Crea sempre un nuovo file.

Se il file specificato esiste ed è scrivibile, la funzione tronca il file, la funzione ha esito positivo e il codice dell'ultimo errore viene impostato su ERROR_ALREADY_EXISTS (183).

Se il file specificato non esiste ed è un percorso valido, viene creato un nuovo file, la funzione ha esito positivo e l'ultimo codice di errore è impostato su zero.

Per altre informazioni, vedere la sezione Osservazioni di questo argomento.

CREATE_NEW
1
Crea un nuovo file, solo se non esiste già.

Se il file specificato esiste, la funzione ha esito negativo e l'ultimo codice di errore viene impostato su ERROR_FILE_EXISTS (80).

Se il file specificato non esiste ed è un percorso valido per un percorso scrivibile, viene creato un nuovo file.

OPEN_ALWAYS
4
Apre sempre un file.

Se il file specificato esiste, la funzione ha esito positivo e l'ultimo codice di errore viene impostato su ERROR_ALREADY_EXISTS (183).

Se il file specificato non esiste ed è un percorso valido per un percorso scrivibile, la funzione crea un file e l'ultimo codice di errore è impostato su zero.

OPEN_EXISTING
3
Apre un file o un dispositivo, solo se esiste.

Se il file specificato non esiste, la funzione ha esito negativo e l'ultimo codice di errore è impostato su ERROR_FILE_NOT_FOUND (2).

Per altre informazioni, vedere la sezione Osservazioni di questo argomento.

TRUNCATE_EXISTING
5
Apre un file e lo tronca in modo che le dimensioni siano pari a zero byte, solo se esiste.

Se il file specificato non esiste, la funzione ha esito negativo e l'ultimo codice di errore è impostato su ERROR_FILE_NOT_FOUND (2).

Il processo chiamante deve aprire il file con il bit GENERIC_WRITE impostato come parte del parametro dwDesiredAccess.

[in] dwFlagsAndAttributes

Gli attributi e i flag del file FILE_ATTRIBUTE_NORMAL il valore predefinito più comune.

Questo parametro può includere qualsiasi combinazione degli attributi del file disponibili (FILE_ATTRIBUTE_*). Tutti gli altri attributi di file sostituiscono FILE_ATTRIBUTE_NORMAL.

Questo parametro può contenere anche combinazioni di flag (FILE_FLAG_) per il controllo del comportamento di buffering, delle modalità di accesso e di altri flag speciali. Questi valori vengono combinati con qualsiasi FILE_ATTRIBUTE_ valori.

Questo parametro può contenere anche informazioni sulla qualità del servizio (SQOS) specificando il flag SECURITY_SQOS_PRESENT. Le informazioni aggiuntive sui flag correlati a SQOS vengono presentate nella tabella che segue gli attributi e le tabelle dei flag.

nota  

Quando CreateFileTransacted apre un file esistente, in genere combina i flag di file con gli attributi di file del file esistente e ignora gli attributi di file forniti come parte di dwFlagsAndAttributes. I casi speciali sono descritti in dettaglio in Creazione e apertura di file.

 
Gli attributi e i flag di file seguenti vengono usati solo per gli oggetti file, non per altri tipi di oggetti che CreateFileTransacted si apre (altre informazioni sono disponibili nella sezione Osservazioni di questo argomento). Per l'accesso più avanzato agli attributi di file, vedere SetFileAttributes. Per un elenco completo di tutti gli attributi di file con i relativi valori e descrizioni, vedere Costanti attributo file.
Attributo Significato
FILE_ATTRIBUTE_ARCHIVE
32 (0x20)
Il file deve essere archiviato. Le applicazioni usano questo attributo per contrassegnare i file per il backup o la rimozione.
FILE_ATTRIBUTE_ENCRYPTED
16384 (0x4000)
Il file o la directory è crittografato. Per un file, ciò significa che tutti i dati nel file vengono crittografati. Per una directory, significa che la crittografia è l'impostazione predefinita per i file e le sottodirectory appena creati. Per altre informazioni, vedere File Encryption.

Questo flag non ha alcun effetto se viene specificato anche FILE_ATTRIBUTE_SYSTEM.

FILE_ATTRIBUTE_HIDDEN
2 (0x2)
Il file è nascosto. Non includerlo in un elenco di directory normale.
FILE_ATTRIBUTE_NORMAL
128 (0x80)
Il file non dispone di altri attributi impostati. Questo attributo è valido solo se usato da solo.
FILE_ATTRIBUTE_OFFLINE
4096 (0x1000)
I dati di un file non sono immediatamente disponibili. Questo attributo indica che i dati dei file vengono spostati fisicamente nell'archiviazione offline. Questo attributo viene usato da Archiviazione remota, il software di gestione gerarchica delle risorse di archiviazione. Le applicazioni non devono modificare arbitrariamente questo attributo.
FILE_ATTRIBUTE_READONLY
1 (0x1)
Il file è di sola lettura. Le applicazioni possono leggere il file, ma non possono scriverlo o eliminarlo.
FILE_ATTRIBUTE_SYSTEM
4 (0x4)
Il file fa parte o viene utilizzato esclusivamente da un sistema operativo.
FILE_ATTRIBUTE_TEMPORARY
256 (0x100)
Il file viene usato per l'archiviazione temporanea. I file system evitano di scrivere nuovamente i dati nell'archiviazione di massa se è disponibile memoria cache sufficiente, perché un'applicazione elimina un file temporaneo dopo la chiusura di un handle. In tal caso, il sistema può evitare completamente di scrivere i dati. In caso contrario, i dati sono scritti dopo la chiusura dell'handle.
 
Bandiera Significato
FILE_FLAG_BACKUP_SEMANTICS
0x02000000
Il file viene aperto o creato per un'operazione di backup o ripristino. Il sistema garantisce che il processo chiamante sostituisa i controlli di sicurezza dei file quando il processo ha SE_BACKUP_NAME e SE_RESTORE_NAME privilegi. Per altre informazioni, vedere Modifica dei privilegi in un token.

È necessario impostare questo flag per ottenere un handle su una directory. Un handle di directory può essere passato ad alcune funzioni anziché a un handle di file. Per altre informazioni, vedere handle di directory .

FILE_FLAG_DELETE_ON_CLOSE
0x04000000
Il file deve essere eliminato immediatamente dopo la chiusura dell'ultimo handle del writer transazionale nel file, purché la transazione sia ancora attiva. Se un file è stato contrassegnato per l'eliminazione e un handle di scrittura transazionale è ancora aperto al termine della transazione, il file non verrà eliminato.

Se sono presenti handle aperti esistenti in un file, la chiamata ha esito negativo a meno che non siano state tutte aperte con la modalità di condivisione FILE_SHARE_DELETE.

Le successive richieste aperte per il file hanno esito negativo, a meno che non venga specificata la modalità di condivisione FILE_SHARE_DELETE.

FILE_FLAG_NO_BUFFERING
0x20000000
Il file viene aperto senza memorizzazione nella cache del sistema. Questo flag non influisce sulla memorizzazione nella cache del disco rigido o sui file mappati alla memoria. Se combinato con FILE_FLAG_OVERLAPPED, il flag offre prestazioni asincrone massime, perché l'I/O non si basa sulle operazioni sincrone della gestione della memoria. Tuttavia, alcune operazioni di I/O richiedono più tempo, perché i dati non vengono mantenuti nella cache. Inoltre, i metadati del file possono comunque essere memorizzati nella cache. Per scaricare i metadati su disco, usare la funzione flushFileBuffers .

Un'applicazione deve soddisfare determinati requisiti quando si aprono file aperti con FILE_FLAG_NO_BUFFERING:

  • L'accesso ai file deve iniziare in corrispondenza degli offset di byte all'interno di un file che sono multipli interi delle dimensioni del settore del volume.
  • L'accesso ai file deve essere per i numeri di byte interi delle dimensioni del settore del volume. Ad esempio, se la dimensione del settore è di 512 byte, un'applicazione può richiedere letture e scritture di 512, 1024, 1536 o 2048 byte, ma non di 335, 981 o 7171 byte.
  • Gli indirizzi del buffer per le operazioni di lettura e scrittura devono essere allineati al settore, ovvero allineati agli indirizzi in memoria che sono multipli interi delle dimensioni del settore del volume. A seconda del disco, questo requisito potrebbe non essere applicato.
Un modo per allineare i buffer su multipli interi delle dimensioni del settore del volume consiste nell'usare VirtualAlloc per allocare i buffer. Alloca memoria allineata agli indirizzi che sono multipli interi delle dimensioni della pagina di memoria del sistema operativo. Poiché le dimensioni della pagina di memoria e del settore del volume sono di 2, questa memoria è allineata anche agli indirizzi che sono multipli interi di dimensioni del settore del volume. Le pagine di memoria sono di 4 o 8 KB; i settori sono 512 byte (dischi rigidi), 2048 byte (CD) o 4096 byte (dischi rigidi) e pertanto i settori del volume non possono mai essere più grandi delle pagine di memoria.

Un'applicazione può determinare una dimensione del settore del volume chiamando la funzione GetDiskFreeSpace .

FILE_FLAG_OPEN_NO_RECALL
0x00100000
I dati del file vengono richiesti, ma devono continuare a trovarsi nell'archiviazione remota. Non deve essere trasportato nuovamente nella risorsa di archiviazione locale. Questo flag è destinato all'uso da parte di sistemi di archiviazione remoti.
FILE_FLAG_OPEN_REPARSE_POINT
0x00200000
Non si verificherà normale punto di analisi; CreateFileTransacted tenterà di aprire il punto di analisi. Quando un file viene aperto, viene restituito un handle di file, indipendentemente dal fatto che il filtro che controlla il punto di analisi sia operativo. Questo flag non può essere utilizzato con il flag CREATE_ALWAYS. Se il file non è un reparse point, questo flag viene ignorato.
FILE_FLAG_OVERLAPPED
0x40000000
Il file viene aperto o creato per le operazioni di I/O asincrone. Al termine dell'operazione, l'evento specificato nella struttura OVERLAPPED viene impostato sullo stato segnalato. Le operazioni che richiedono una quantità significativa di tempo per elaborare la restituzione ERROR_IO_PENDING.

Se questo flag viene specificato, il file può essere usato per operazioni di lettura e scrittura simultanee. Il sistema non gestisce il puntatore al file, pertanto è necessario passare la posizione del file alle funzioni di lettura e scrittura nella struttura OVERLAPPED o aggiornare il puntatore al file.

Se questo flag non viene specificato, le operazioni di I/O vengono serializzate, anche se le chiamate alle funzioni di lettura e scrittura specificano una struttura OVERLAPPED.

FILE_FLAG_POSIX_SEMANTICS
0x01000000
Il file deve essere accessibile in base alle regole POSIX. Ciò include l'uso di più file con nomi diversi solo nel caso, per i file system che supportano tale denominazione. Prestare attenzione quando si usa questa opzione, perché i file creati con questo flag potrebbero non essere accessibili dalle applicazioni scritte per windows a MS-DOS o a 16 bit.
FILE_FLAG_RANDOM_ACCESS
0x10000000
Il file deve essere accessibile in modo casuale. Il sistema può usarlo come suggerimento per ottimizzare la memorizzazione nella cache dei file.
FILE_FLAG_SESSION_AWARE
0x00800000
Il file o il dispositivo viene aperto con consapevolezza della sessione. Se questo flag non viene specificato, i dispositivi per sessione (ad esempio un dispositivo che usa il reindirizzamento USB RemoteFX) non possono essere aperti dai processi in esecuzione nella sessione 0. Questo flag non ha alcun effetto per i chiamanti non nella sessione 0. Questo flag è supportato solo nelle edizioni server di Windows.

Windows Server 2008 R2 e Windows Server 2008: Questo flag non è supportato prima di Windows Server 2012.

FILE_FLAG_SEQUENTIAL_SCAN
0x08000000
Il file deve essere accessibile in sequenza dall'inizio alla fine. Il sistema può usarlo come suggerimento per ottimizzare la memorizzazione nella cache dei file. Se un'applicazione sposta il puntatore al file per l'accesso casuale, la memorizzazione nella cache ottimale potrebbe non verificarsi. Tuttavia, l'operazione corretta è comunque garantita.

La specifica di questo flag può migliorare le prestazioni per le applicazioni che leggono file di grandi dimensioni usando l'accesso sequenziale. I miglioramenti delle prestazioni possono essere ancora più evidenti per le applicazioni che leggono file di grandi dimensioni principalmente in sequenza, ma occasionalmente ignorano intervalli di byte di piccole dimensioni.

Questo flag non ha alcun effetto se il file system non supporta le operazioni di I/O memorizzate nella cache e FILE_FLAG_NO_BUFFERING.

FILE_FLAG_WRITE_THROUGH
0x80000000
Le operazioni di scrittura non passeranno attraverso alcuna cache intermedia, verranno passate direttamente al disco.

Se non viene specificato anche FILE_FLAG_NO_BUFFERING, in modo che la memorizzazione nella cache del sistema sia attiva, i dati vengono scritti nella cache di sistema, ma scaricati su disco senza ritardi.

Se viene specificata anche FILE_FLAG_NO_BUFFERING, in modo che la memorizzazione nella cache del sistema non sia effettiva, i dati vengono immediatamente scaricati su disco senza passare attraverso la cache di sistema. Il sistema operativo richiede anche una scrittura tramite la cache del disco rigido a supporti persistenti. Tuttavia, non tutti gli hardware supportano questa funzionalità write-through.

 

Il parametro dwFlagsAndAttributes può specificare anche informazioni sulla qualità del servizio per la sicurezza. Per altre informazioni, vedere Livelli di rappresentazione. Quando l'applicazione chiamante specifica il flag SECURITY_SQOS_PRESENT come parte di dwFlagsAndAttributes, può contenere anche uno o più dei valori seguenti.

Flag di sicurezza Significato
SECURITY_ANONYMOUS
Rappresenta un client a livello di rappresentazione anonima.
SECURITY_CONTEXT_TRACKING
La modalità di rilevamento della sicurezza è dinamica. Se questo flag non è specificato, la modalità di rilevamento della sicurezza è statica.
SECURITY_DELEGATION
Rappresenta un client a livello di rappresentazione della delega.
SECURITY_EFFECTIVE_ONLY
Solo gli aspetti abilitati del contesto di sicurezza del client sono disponibili per il server. Se non si specifica questo flag, sono disponibili tutti gli aspetti del contesto di sicurezza del client.

In questo modo il client può limitare i gruppi e i privilegi che un server può usare durante la rappresentazione del client.

SECURITY_IDENTIFICATION
Rappresenta un client a livello di rappresentazione dell'identificazione.
SECURITY_IMPERSONATION
Rappresenta un client a livello di rappresentazione. Questo è il comportamento predefinito se non vengono specificati altri flag insieme al flag SECURITY_SQOS_PRESENT.

[in, optional] hTemplateFile

Handle valido per un file modello con il diritto di accesso GENERIC_READ. Il file modello fornisce attributi di file e attributi estesi per il file in fase di creazione. Questo parametro può essere NULL.

Quando si apre un file esistente, CreateFileTransacted ignora il file modello.

Quando si apre un nuovo file crittografato EFS, il file eredita l'elenco DACL dalla directory padre.

[in] hTransaction

Handle per la transazione. Questo handle viene restituito dalla funzione CreateTransaction.

[in, optional] pusMiniVersion

Miniversione da aprire. Se la transazione specificata in hTransaction non è la transazione che sta modificando il file, questo parametro deve essere NULL. In caso contrario, questo parametro può essere un identificatore miniversione restituito dal codice di controllo FSCTL_TXFS_CREATE_MINIVERSION o uno dei valori seguenti.

Valore Significato
TXFS_MINIVERSION_COMMITTED_VIEW
0x0000
Visualizzazione del file a partire dall'ultimo commit.
TXFS_MINIVERSION_DIRTY_VIEW
0xFFFF
Visualizzazione del file durante la modifica da parte della transazione.
TXFS_MINIVERSION_DEFAULT_VIEW
0xFFFE
Visualizzazione commit o dirty del file, a seconda del contesto. Una transazione che modifica il file ottiene la visualizzazione dirty, mentre una transazione che non modifica il file ottiene la visualizzazione di cui è stato eseguito il commit.

lpExtendedParameter

Questo parametro è riservato e deve essere NULL.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è un handle aperto per il file, il dispositivo, la named pipe o lo slot di posta elettronica specificati.

Se la funzione ha esito negativo, il valore restituito è INVALID_HANDLE_VALUE. Per ottenere informazioni estese sull'errore, chiamare GetLastError.

Osservazioni

Quando si usa l'handle restituito da CreateFileTransacted, usare la versione transazionata delle funzioni di I/O dei file anziché le funzioni di I/O di file standard, se appropriato. Per altre informazioni, vedere considerazioni sulla programmazione per ntfs transazionali.

Quando si apre un handle transazionato in una directory, tale handle deve avere autorizzazioni FILE_WRITE_DATA (FILE_ADD_FILE) e FILE_APPEND_DATA (FILE_ADD_SUBDIRECTORY). Queste sono incluse nelle autorizzazioni di FILE_GENERIC_WRITE. È consigliabile aprire directory con meno autorizzazioni se si usa solo l'handle per creare file o sottodirectory; in caso contrario, possono verificarsi violazioni di condivisione.

Non è possibile aprire un file con FILE_EXECUTE livello di accesso quando tale file fa parte di un'altra transazione, ovvero un'altra applicazione la apre chiamando CreateFileTransacted). Ciò significa che CreateFileTransacted ha esito negativo se viene specificato il livello di accesso FILE_EXECUTE o FILE_ALL_ACCESS

Quando un'applicazione non transazionata chiama CreateFileTransacted con MAXIMUM_ALLOWED specificato per lpSecurityAttributes, viene aperto un handle con lo stesso livello di accesso ogni volta. Quando un'applicazione transazionale chiama CreateFileTransacted con MAXIMUM_ALLOWED specificato per lpSecurityAttributes, un handle viene aperto con una quantità di accesso diversa in base al fatto che il file sia bloccato da una transazione. Ad esempio, se l'applicazione chiamante ha FILE_EXECUTE livello di accesso per un file, l'applicazione ottiene questo accesso solo se il file aperto non è bloccato da una transazione o è bloccato da una transazione e l'applicazione è già un lettore transazionale per tale file.

Vedere NTFS transazionale per una descrizione completa delle operazioni transazionali.

Utilizzare la funzione CloseHandle per chiudere un handle di oggetto restituito da CreateFileTransacted quando l'handle non è più necessario e prima di eseguire il commit o il rollback della transazione.

Alcuni file system, ad esempio il file system NTFS, supportano la compressione o la crittografia per singoli file e directory. Nei volumi formattati per quel tipo di file system, un nuovo file eredita gli attributi di compressione e crittografia della directory.

Non è possibile utilizzare CreateFileTransacted per controllare la compressione in un file o in una directory. Per altre informazioni, vedere Compressione e decompressione dei file e Crittografia file.

Comportamento del collegamento simbolico: se la chiamata a questa funzione crea un nuovo file, non viene apportata alcuna modifica al comportamento.

Se si specifica FILE_FLAG_OPEN_REPARSE_POINT:

  • Se un file esistente viene aperto ed è un collegamento simbolico, l'handle restituito è un handle per il collegamento simbolico.
  • Se vengono specificati TRUNCATE_EXISTING o FILE_FLAG_DELETE_ON_CLOSE, il file interessato è un collegamento simbolico.
Se FILE_FLAG_OPEN_REPARSE_POINT non è specificato:
  • Se un file esistente viene aperto ed è un collegamento simbolico, l'handle restituito è un handle per la destinazione.
  • Se vengono specificati CREATE_ALWAYS, TRUNCATE_EXISTINGo FILE_FLAG_DELETE_ON_CLOSE, il file interessato è la destinazione.
Non è garantito che una scrittura multi-settore sia atomica, a meno che non si usi una transazione, ovvero l'handle creato è un handle transazionale. Una scrittura a settore singolo è atomica. Le scritture multi-settore memorizzate nella cache potrebbero non essere sempre scritte sul disco; specificare pertanto FILE_FLAG_WRITE_THROUGH per assicurarsi che nel disco venga scritta un'intera scrittura multisezione senza memorizzazione nella cache.

Come indicato in precedenza, se il parametro lpSecurityAttributes è NULL, l'handle restituito da CreateFileTransacted non può essere ereditato da alcun processo figlio che l'applicazione può creare. Si applicano anche le informazioni seguenti relative a questo parametro:

  • Se bInheritHandle non è FALSE, ovvero qualsiasi valore diverso da zero, l'handle può essere ereditato. Pertanto, è fondamentale inizializzare correttamente questo membro della struttura per FALSE se non si intende ereditare l'handle.
  • Gli elenchi di controllo di accesso (ACL) nel descrittore di sicurezza predefinito per un file o una directory vengono ereditati dalla directory padre.
  • Il file system di destinazione deve supportare la sicurezza dei file e delle directory per il lpSecurityDescriptor, che può essere determinato usando GetVolumeInformation
In Windows 8 e Windows Server 2012 questa funzione è supportata dalle tecnologie seguenti.
Tecnologia Sostenuto
Protocollo SMB (Server Message Block) 3.0 No
SMB 3.0 Transparent Failover (TFO) No
SMB 3.0 con condivisioni file con scalabilità orizzontale (SO) No
Cluster Shared Volume File System (CsvFS) No
Resilient File System (ReFS) No
 

Si noti che SMB 3.0 non supporta TxF.

file

Se si tenta di creare un file su un'unità floppy che non dispone di un disco floppy o di un'unità CD-ROM che non dispone di un CD, il sistema visualizza un messaggio per l'utente di inserire un disco o un CD. Per impedire al sistema di visualizzare questo messaggio, chiamare la funzione SetErrorMode con SEM_FAILCRITICALERRORS.

Per altre informazioni, vedere Creazione e apertura di file.

Se si rinomina o si elimina un file e quindi lo si ripristina poco dopo, il sistema cerca nella cache le informazioni sui file da ripristinare. Le informazioni memorizzate nella cache includono la coppia nome breve/lungo e il tempo di creazione.

Se si chiama CreateFileTransacted in un file in sospeso come risultato di una chiamata precedente a DeleteFile, la funzione ha esito negativo. Il sistema operativo ritarda l'eliminazione dei file fino a quando tutti gli handle del file non vengono chiusi. getLastError restituisce ERROR_ACCESS_DENIED.

Il parametro dwDesiredAccess può essere zero, consentendo all'applicazione di eseguire query sugli attributi del file senza accedere al file se l'applicazione è in esecuzione con impostazioni di sicurezza adeguate. Ciò è utile per verificare l'esistenza di un file senza aprirlo per l'accesso in lettura e/o scrittura o per ottenere altre statistiche relative al file o alla directory. Vedere Ottenere e impostare le informazioni sui file e GetFileInformationByHandle.

Quando un'applicazione crea un file in una rete, è preferibile usare GENERIC_READ | GENERIC_WRITE che usare solo GENERIC_WRITE. Il codice risultante è più veloce, perché il redirector può usare gestione cache e inviare meno SMB con più dati. Questa combinazione evita inoltre un problema per cui la scrittura in un file in una rete può occasionalmente restituire ERROR_ACCESS_DENIED.

flussi di file

Nei file system NTFS è possibile usare CreateFileTransacted per creare flussi separati all'interno di un file.

Per altre informazioni, vedere flussi di file.

directory

Un'applicazione non può creare una directory usando CreateFileTransacted, pertanto solo il valore OPEN_EXISTING è valido per dwCreationDisposition per questo caso d'uso. Per creare una directory, l'applicazione deve chiamare CreateDirectoryTransacted, CreateDirectory o CreateDirectoryEx.

Per aprire una directory usando CreateFileTransacted, specificare il flag FILE_FLAG_BACKUP_SEMANTICS come parte di dwFlagsAndAttributes. I controlli di sicurezza appropriati si applicano ancora quando questo flag viene usato senza SE_BACKUP_NAME e SE_RESTORE_NAME privilegi.

Quando si usa CreateFileTransacted per aprire una directory durante la deframmentazione di un volume di file system FAT o FAT32, non specificare il diritto di accesso MAXIMUM_ALLOWED. Se questa operazione viene eseguita, l'accesso alla directory viene negato. Specificare invece il diritto di accesso GENERIC_READ.

Per altre informazioni, vedere Informazioni su Gestione directory.

Nota

L'intestazione winbase.h definisce CreateFileTransacted come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante del preprocessore UNICODE. La combinazione dell'utilizzo dell'alias indipendente dalla codifica con il codice non indipendente dalla codifica può causare mancate corrispondenze che generano errori di compilazione o di runtime. Per altre informazioni, vedere convenzioni di per i prototipi di funzioni.

Fabbisogno

Requisito Valore
client minimo supportato Windows Vista [solo app desktop]
server minimo supportato Windows Server 2008 [solo app desktop]
piattaforma di destinazione Finestre
intestazione winbase.h (include Windows.h)
libreria Kernel32.lib
dll Kernel32.dll

Vedere anche

CloseHandle

CopyFileTransacted

CreateDirectoryTransacted

DeleteFileTransacted

compressione e decompressione dei file

di crittografia file

funzioni di gestione file

diritti di accesso e sicurezza dei file

flussi di file

FindFirstFileTransacted

Funzioni

GetFileAttributesTransacted

MoveFileTransacted

Panoramica

considerazioni sulla programmazione di per i NTFS transazionali

ReadFile

NTFS transazionale (TxF)

WriteFile