CreateFileTransactedW, fonction (winbase.h)
[Microsoft recommande vivement aux développeurs d’utiliser d’autres moyens pour répondre aux besoins de votre application. De nombreux scénarios développés par TxF peuvent être réalisés par le biais de techniques plus simples et plus facilement disponibles. En outre, TxF peut ne pas être disponible dans les futures versions de Microsoft Windows. Pour plus d’informations et d’alternatives à TxF, consultez Alternatives à l’utilisation de NTFS transactionnel.]
Crée ou ouvre un fichier, un flux de fichiers ou un répertoire en tant qu’opération transactionnelle. La fonction retourne un handle qui peut être utilisé pour accéder à l’objet.
Pour effectuer cette opération en tant qu’opération nontransdictée ou pour accéder à des objets autres que des fichiers (par exemple, des canaux nommés, des périphériques physiques, des mailslots), utilisez la fonction CreateFile.
Pour plus d’informations sur les transactions, consultez la section Remarques de cette rubrique.
Syntaxe
HANDLE CreateFileTransactedW(
[in] LPCWSTR 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
);
Paramètres
[in] lpFileName
Nom d’un objet à créer ou ouvrir.
L’objet doit résider sur l’ordinateur local ; sinon, la fonction échoue et le dernier code d’erreur est défini sur ERROR_TRANSACTIONS_UNSUPPORTED_REMOTE.
Par défaut, le nom est limité à MAX_PATH caractères. Pour étendre cette limite à 32 767 caractères larges, ajoutez « \\ ?\ » au chemin d’accès. Pour plus d’informations, consultez nommage des fichiers, des chemins d’accès et des espaces de noms.
Pourboire
À compter de Windows 10, version 1607, vous pouvez choisir de supprimer la limitation MAX_PATH sans précéder « \\ ?\ ». Pour plus d’informations, consultez la section « Limite maximale de longueur de chemin » de noms, fichiers, chemin s et espaces de noms.
Pour créer un flux de fichiers, spécifiez le nom du fichier, un signe deux-points, puis le nom du flux. Pour plus d’informations, consultez flux de fichiers.
[in] dwDesiredAccess
Accès à l’objet, qui peut être résumé sous forme de lecture, d’écriture, à la fois ou non (zéro). Les valeurs les plus couramment utilisées sont GENERIC_READ, GENERIC_WRITEou les deux (GENERIC_READ | GENERIC_WRITE). Pour plus d’informations, consultez droits d’accès génériques et sécurité des fichiers et droits d’accès.
Si ce paramètre est égal à zéro, l’application peut interroger des attributs de fichier, de répertoire ou d’appareil sans accéder à ce fichier ou appareil. Pour plus d’informations, consultez la section Remarques de cette rubrique.
Vous ne pouvez pas demander un mode d’accès qui est en conflit avec le mode de partage spécifié dans une requête ouverte qui a un handle ouvert. Pour plus d’informations, consultez Création et ouverture de fichiers.
[in] dwShareMode
Mode de partage d’un objet, qui peut être lu, écrit, à la fois, supprimer, tous ces éléments ou aucun (reportez-vous au tableau suivant).
Si ce paramètre est égal à zéro et CreateFileTransacted réussit, l’objet ne peut pas être partagé et ne peut pas être rouvert tant que le handle n’est pas fermé. Pour plus d’informations, consultez la section Remarques de cette rubrique.
Vous ne pouvez pas demander un mode de partage qui est en conflit avec le mode d’accès spécifié dans une demande ouverte qui a un handle ouvert, car cela entraînerait la violation de partage suivante : ERROR_SHARING_VIOLATION. Pour plus d’informations, consultez Création et ouverture de fichiers.
Pour permettre à un processus de partager un objet pendant qu’un autre processus est ouvert, utilisez une combinaison d’une ou plusieurs des valeurs suivantes pour spécifier le mode d’accès qu’ils peuvent demander pour ouvrir l’objet.
[in, optional] lpSecurityAttributes
Pointeur vers une structure SECURITY_ATTRIBUTES qui contient un descripteur de sécurité facultatif et détermine également si le handle retourné peut être hérité par les processus enfants. Le paramètre peut être NULL.
Si le paramètre lpSecurityAttributes est NULL, le handle retourné par CreateFileTransacted ne peut pas être hérité par les processus enfants que votre application peut créer et l’objet associé au handle retourné obtient un descripteur de sécurité par défaut.
Le bInheritHandle membre de la structure spécifie si le handle retourné peut être hérité.
Le lpSecurityDescriptor membre de la structure spécifie un descripteur de sécurité pour un objet, mais peut également être NULL.
Si lpSecurityDescriptor membre est NULL, l’objet associé au handle retourné reçoit un descripteur de sécurité par défaut.
CreateFileTransacted ignore le membre lpSecurityDescriptor lors de l’ouverture d’un fichier existant, mais continue d’utiliser le membre bInheritHandle.
Pour plus d’informations, consultez la section Remarques de cette rubrique.
[in] dwCreationDisposition
Action à entreprendre sur les fichiers qui existent et qui n’existent pas.
Pour plus d’informations, consultez la section Remarques de cette rubrique.
Ce paramètre doit être l’une des valeurs suivantes, qui ne peuvent pas être combinées.
[in] dwFlagsAndAttributes
Attributs et indicateurs de fichier, FILE_ATTRIBUTE_NORMAL étant la valeur par défaut la plus courante.
Ce paramètre peut inclure n’importe quelle combinaison des attributs de fichier disponibles (FILE_ATTRIBUTE_*). Tous les autres attributs de fichier remplacent FILE_ATTRIBUTE_NORMAL.
Ce paramètre peut également contenir des combinaisons d’indicateurs (FILE_FLAG_) pour contrôler le comportement de mise en mémoire tampon, les modes d’accès et d’autres indicateurs à usage spécial. Ces valeurs s’associent à toutes les valeurs FILE_ATTRIBUTE_.
Ce paramètre peut également contenir des informations sqOS (Security Quality of Service) en spécifiant l’indicateur de SECURITY_SQOS_PRESENT. Des informations supplémentaires relatives aux indicateurs SQOS sont présentées dans le tableau suivant les tableaux d’attributs et d’indicateurs.
Lorsque CreateFileTransacted ouvre un fichier existant, il combine généralement les indicateurs de fichier avec les attributs de fichier du fichier existant et ignore tous les attributs de fichier fournis dans dwFlagsAndAttributes. Les cas spéciaux sont détaillés dans Création et ouverture de fichiers.
Drapeau | Signification |
---|---|
|
Le fichier est ouvert ou créé pour une opération de sauvegarde ou de restauration. Le système garantit que le processus appelant remplace les vérifications de sécurité des fichiers lorsque le processus a des privilèges SE_BACKUP_NAME et SE_RESTORE_NAME. Pour plus d’informations, consultez Modification des privilèges dans unde jeton.
Vous devez définir cet indicateur pour obtenir un handle sur un répertoire. Un handle de répertoire peut être transmis à certaines fonctions au lieu d’un handle de fichier. Pour plus d’informations, consultez Handles d’annuaire. |
|
Le fichier doit être supprimé immédiatement après la fermeture du dernier handle d’enregistreur transactionnel vers le fichier, à condition que la transaction soit toujours active. Si un fichier a été marqué pour suppression et qu’un handle d’enregistreur transactionnel est toujours ouvert une fois la transaction terminée, le fichier n’est pas supprimé.
S’il existe des handles ouverts existants dans un fichier, l’appel échoue, sauf s’ils ont tous été ouverts avec le mode de partage FILE_SHARE_DELETE. Les demandes d’ouverture suivantes pour le fichier échouent, sauf si le mode de partage FILE_SHARE_DELETE est spécifié. |
|
Le fichier est ouvert sans mise en cache système. Cet indicateur n’affecte pas la mise en cache de disque dur ou les fichiers mappés en mémoire. Lorsqu’il est combiné à FILE_FLAG_OVERLAPPED, l’indicateur offre des performances asynchrones maximales, car les E/S ne s’appuient pas sur les opérations synchrones du gestionnaire de mémoire.
Toutefois, certaines opérations d’E/S prennent plus de temps, car les données ne sont pas conservées dans le cache. En outre, les métadonnées du fichier peuvent toujours être mises en cache. Pour vider les métadonnées sur le disque, utilisez la fonction FlushFileBuffers.
Une application doit répondre à certaines exigences lors de l’utilisation de fichiers ouverts avec FILE_FLAG_NO_BUFFERING:
Une application peut déterminer une taille de secteur de volume en appelant la fonction GetDiskFreeSpace. |
|
Les données de fichier sont demandées, mais elles doivent continuer à se trouver dans le stockage distant. Il ne doit pas être transporté vers le stockage local. Cet indicateur est utilisé par les systèmes de stockage distants. |
|
Le traitement normal point d’analyse ne se produit pas ; CreateFileTransacted tente d’ouvrir le point d’analyse. Lorsqu’un fichier est ouvert, un handle de fichier est retourné, que le filtre qui contrôle le point d’analyse soit opérationnel ou non. Cet indicateur ne peut pas être utilisé avec l’indicateur CREATE_ALWAYS. Si le fichier n’est pas un point d’analyse, cet indicateur est ignoré. |
|
Le fichier est ouvert ou créé pour les E/S asynchrones. Une fois l’opération terminée, l’événement spécifié dans la structure Si cet indicateur est spécifié, le fichier peut être utilisé pour les opérations de lecture et d’écriture simultanées. Le système ne conserve pas le pointeur de fichier. Par conséquent, vous devez passer la position du fichier aux fonctions de lecture et d’écriture dans la structure SE CHEVAUCHER ou mettre à jour le pointeur de fichier. Si cet indicateur n’est pas spécifié, les opérations d’E/S sont sérialisées, même si les appels aux fonctions de lecture et d’écriture spécifient une structure SE CHEVAUCHER. |
|
Le fichier est accessible en fonction des règles POSIX. Cela inclut l’autorisation de plusieurs fichiers avec des noms, qui diffèrent uniquement dans le cas, pour les systèmes de fichiers qui prennent en charge ce nom. Veillez à utiliser cette option, car les fichiers créés avec cet indicateur peuvent ne pas être accessibles par les applications écrites pour MS-DOS ou Windows 16 bits. |
|
Le fichier est accessible de manière aléatoire. Le système peut l’utiliser comme indicateur pour optimiser la mise en cache des fichiers. |
|
Le fichier ou l’appareil est ouvert avec une prise en charge de session. Si cet indicateur n’est pas spécifié, les appareils par session (par exemple, un appareil utilisant la redirection USB RemoteFX) ne peuvent pas être ouverts par les processus s’exécutant dans la session 0.
Cet indicateur n’a aucun effet pour les appelants qui ne sont pas dans la session 0. Cet indicateur est pris en charge uniquement sur les éditions serveur de Windows.
Windows Server 2008 R2 et Windows Server 2008 : Cet indicateur n’est pas pris en charge avant Windows Server 2012. |
|
Le fichier est accessible de manière séquentielle de début à fin. Le système peut l’utiliser comme indicateur pour optimiser la mise en cache des fichiers. Si une application déplace le pointeur de fichier pour l’accès aléatoire, la mise en cache optimale peut ne pas se produire. Toutefois, une opération correcte est toujours garantie.
La spécification de cet indicateur peut augmenter les performances des applications qui lisent des fichiers volumineux à l’aide d’un accès séquentiel. Les gains de performances peuvent être encore plus visibles pour les applications qui lisent les fichiers volumineux principalement de manière séquentielle, mais ignorent parfois de petites plages d’octets. Cet indicateur n’a aucun effet si le système de fichiers ne prend pas en charge les E/S mises en cache et les FILE_FLAG_NO_BUFFERING. |
|
Les opérations d’écriture ne passent par aucun cache intermédiaire, elles vont directement sur le disque.
Si FILE_FLAG_NO_BUFFERING n’est pas également spécifié, de sorte que la mise en cache du système soit en vigueur, les données sont écrites dans le cache système, mais sont vidées sur le disque sans délai. Si FILE_FLAG_NO_BUFFERING est également spécifié, de sorte que la mise en cache du système n’est pas en vigueur, les données sont immédiatement vidées sur le disque sans passer par le cache système. Le système d’exploitation demande également un cache de disque dur en écriture sur un support persistant. Toutefois, tout le matériel ne prend pas en charge cette fonctionnalité d’écriture directe. |
Le paramètre dwFlagsAndAttributes peut également spécifier les informations de qualité de service de sécurité. Pour plus d’informations, consultez niveaux d’emprunt d’identité. Lorsque l’application appelante spécifie l’indicateur SECURITY_SQOS_PRESENT dans dwFlagsAndAttributes, il peut également contenir une ou plusieurs des valeurs suivantes.
[in, optional] hTemplateFile
Handle valide pour un fichier de modèle avec le droit d’accès GENERIC_READ. Le fichier de modèle fournit des attributs de fichier et des attributs étendus pour le fichier en cours de création. Ce paramètre peut être NULL.
Lors de l’ouverture d’un fichier existant, CreateFileTransacted ignore le fichier de modèle.
Lors de l’ouverture d’un nouveau fichier chiffré EFS, le fichier hérite de la liste DACL de son répertoire parent.
[in] hTransaction
Handle de la transaction. Ce handle est retourné par la fonction CreateTransaction.
[in, optional] pusMiniVersion
Miniversion à ouvrir. Si la transaction spécifiée dans hTransaction n’est pas la transaction qui modifie le fichier, ce paramètre doit être NULL. Dans le cas contraire, ce paramètre peut être un identificateur de miniversion retourné par le code de contrôle FSCTL_TXFS_CREATE_MINIVERSION, ou l’une des valeurs suivantes.
lpExtendedParameter
Ce paramètre est réservé et doit être NULL.
Valeur de retour
Si la fonction réussit, la valeur de retour est un handle ouvert pour le fichier, l’appareil, le canal nommé ou l’emplacement de messagerie spécifié.
Si la fonction échoue, la valeur de retour est INVALID_HANDLE_VALUE. Pour obtenir des informations d’erreur étendues, appelez GetLastError.
Remarques
Lorsque vous utilisez le handle retourné par CreateFileTransacted, utilisez la version transactionnée des fonctions d’E/S de fichier au lieu des fonctions d’E/S de fichier standard, le cas échéant. Pour plus d’informations, consultez Considérations relatives à la programmation pour lesNTFS transactionnelles.
Lors de l’ouverture d’un handle transactionné dans un répertoire, ce handle doit disposer d’autorisations FILE_WRITE_DATA (FILE_ADD_FILE) et FILE_APPEND_DATA (FILE_ADD_SUBDIRECTORY). Celles-ci sont incluses dans les autorisations de FILE_GENERIC_WRITE. Vous devez ouvrir des répertoires avec moins d’autorisations si vous utilisez simplement le handle pour créer des fichiers ou des sous-répertoires ; sinon, les violations de partage peuvent se produire.
Vous ne pouvez pas ouvrir un fichier avec FILE_EXECUTE niveau d’accès lorsque ce fichier fait partie d’une autre transaction (autrement dit, une autre application l’a ouverte en appelant CreateFileTransacted). Cela signifie que CreateFileTransacted échoue si le niveau d’accès FILE_EXECUTE ou FILE_ALL_ACCESS est spécifié
Lorsqu’une application non transactionnée appelle CreateFileTransacted avec MAXIMUM_ALLOWED spécifié pour lpSecurityAttributes, un handle est ouvert avec le même niveau d’accès à chaque fois. Lorsqu’une application transactionnelle appelle CreateFileTransacted avec MAXIMUM_ALLOWED spécifiée pour lpSecurityAttributes, un handle est ouvert avec une quantité d’accès différente selon que le fichier est verrouillé par une transaction. Par exemple, si l’application appelante a FILE_EXECUTE niveau d’accès pour un fichier, l’application obtient uniquement cet accès si le fichier ouvert n’est pas verrouillé par une transaction ou est verrouillé par une transaction et que l’application est déjà un lecteur transactionnel pour ce fichier.
Consultez NTFS transactionnelle pour obtenir une description complète des opérations traitées.
Utilisez la fonction CloseHandle pour fermer un handle d’objet retourné par CreateFileTransacted lorsque le handle n’est plus nécessaire et avant de valider ou de restaurer la transaction.
Certains systèmes de fichiers, tels que le système de fichiers NTFS, prennent en charge la compression ou le chiffrement des fichiers et répertoires individuels. Sur les volumes mis en forme pour ce type de système de fichiers, un nouveau fichier hérite des attributs de compression et de chiffrement de son répertoire.
Vous ne pouvez pas utiliser CreateFileTransacted pour contrôler la compression sur un fichier ou un répertoire. Pour plus d’informations, consultez compression de fichiers et décompressionet chiffrement de fichiers.
Comportement de lien symbolique : si l’appel à cette fonction crée un fichier, il n’y a aucun changement de comportement.
Si FILE_FLAG_OPEN_REPARSE_POINT est spécifié :
- Si un fichier existant est ouvert et qu’il s’agit d’un lien symbolique, le handle retourné est un handle vers le lien symbolique.
- Si TRUNCATE_EXISTING ou FILE_FLAG_DELETE_ON_CLOSE sont spécifiés, le fichier affecté est un lien symbolique.
- Si un fichier existant est ouvert et qu’il s’agit d’un lien symbolique, le handle retourné est un handle à la cible.
- Si CREATE_ALWAYS, TRUNCATE_EXISTINGou FILE_FLAG_DELETE_ON_CLOSE sont spécifiés, le fichier affecté est la cible.
Comme indiqué précédemment, si le paramètre lpSecurityAttributes est NULL, le handle retourné par CreateFileTransacted ne peut pas être hérité par les processus enfants que votre application peut créer. Les informations suivantes concernant ce paramètre s’appliquent également :
- Si bInheritHandle n’est pas FALSE, qui est n’importe quelle valeur différente de zéro, le handle peut être hérité. Par conséquent, il est essentiel que ce membre de structure soit correctement initialisé pour FALSE si vous n’avez pas l’intention que le handle soit hérité.
- Les listes de contrôle d’accès (ACL) dans le descripteur de sécurité par défaut d’un fichier ou d’un répertoire sont héritées de son répertoire parent.
- Le système de fichiers cible doit prendre en charge la sécurité sur les fichiers et les répertoires du lpSecurityDescriptor
pour avoir un effet sur ces fichiers, qui peuvent être déterminés à l’aide de GetVolumeInformation
Technologie | Supporté |
---|---|
Protocole SMB (Server Message Block) 3.0 | Non |
Basculement transparent SMB 3.0 (TFO) | Non |
SMB 3.0 avec partages de fichiers avec montée en puissance parallèle (SO) | Non |
Cluster Shared Volume File System (CsvFS) | Non |
Système de fichiers résilient (ReFS) | Non |
Notez que SMB 3.0 ne prend pas en charge TxF.
fichiers
Si vous essayez de créer un fichier sur un lecteur de floppy qui n’a pas de disque de floppy ou d’un lecteur de CD-ROM qui n’a pas de CD, le système affiche un message pour que l’utilisateur insère un disque ou un CD. Pour empêcher le système d’afficher ce message, appelez la fonction SetErrorMode avec SEM_FAILCRITICALERRORS.Pour plus d’informations, consultez Création et ouverture de fichiers.
Si vous renommez ou supprimez un fichier, puis restaurez-le peu après, le système recherche dans le cache les informations de fichier à restaurer. Les informations mises en cache incluent sa paire de noms courte/longue et son heure de création.
Si vous appelez CreateFileTransacted sur un fichier en attente de suppression suite à un appel précédent à DeleteFile, la fonction échoue. Le système d’exploitation retarde la suppression du fichier jusqu’à ce que tous les handles du fichier soient fermés. GetLastError retourne ERROR_ACCESS_DENIED.
Le paramètre dwDesiredAccess peut être égal à zéro, ce qui permet à l’application d’interroger les attributs de fichier sans accéder au fichier si l’application s’exécute avec des paramètres de sécurité adéquats. Cela est utile pour tester l’existence d’un fichier sans l’ouvrir pour l’accès en lecture et/ou en écriture, ou pour obtenir d’autres statistiques sur le fichier ou le répertoire. Consultez obtenir et définir des informations de fichier et GetFileInformationByHandle.
Lorsqu’une application crée un fichier sur un réseau, il est préférable d’utiliser GENERIC_READ | GENERIC_WRITE que d’utiliser GENERIC_WRITE seul. Le code résultant est plus rapide, car le redirecteur peut utiliser le gestionnaire de cache et envoyer moins de PME avec plus de données. Cette combinaison évite également un problème où l’écriture dans un fichier sur un réseau peut parfois retourner ERROR_ACCESS_DENIED.
flux de fichiers
Sur les systèmes de fichiers NTFS, vous pouvez utiliser CreateFileTransacted pour créer des flux distincts dans un fichier.Pour plus d’informations, consultez flux de fichiers.
répertoires
Une application ne peut pas créer un répertoire à l’aide de CreateFileTransacted. Par conséquent, seule la valeur OPEN_EXISTING est valide pour dwCreationDisposition pour ce cas d’usage. Pour créer un répertoire, l’application doit appeler CreateDirectoryTransacted, CreateDirectory ou CreateDirectoryEx.Pour ouvrir un répertoire à l’aide de CreateFileTransacted, spécifiez l’indicateur FILE_FLAG_BACKUP_SEMANTICS dans le cadre de dwFlagsAndAttributes. Les vérifications de sécurité appropriées s’appliquent quand cet indicateur est utilisé sans SE_BACKUP_NAME et SE_RESTORE_NAME privilèges.
Lorsque vous utilisez CreateFileTransacted pour ouvrir un répertoire lors de la défragmentation d’un volume de système de fichiers FAT ou FAT32, ne spécifiez pas le droit d’accès MAXIMUM_ALLOWED. L’accès au répertoire est refusé si c’est le cas. Spécifiez plutôt le droit d’accès GENERIC_READ.
Pour plus d’informations, consultez About Directory Management.
Note
L’en-tête winbase.h définit CreateFileTransacted en tant qu’alias qui sélectionne automatiquement la version ANSI ou Unicode de cette fonction en fonction de la définition de la constante de préprocesseur UNICODE. Le mélange de l’utilisation de l’alias neutre en encodage avec du code qui n’est pas neutre en encodage peut entraîner des incompatibilités qui entraînent des erreurs de compilation ou d’exécution. Pour plus d’informations, consultez Conventions pour les prototypes de fonction.
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Windows Vista [applications de bureau uniquement] |
serveur minimum pris en charge | Windows Server 2008 [applications de bureau uniquement] |
plateforme cible | Windows |
d’en-tête | winbase.h (inclure Windows.h) |
bibliothèque | Kernel32.lib |
DLL | Kernel32.dll |
Voir aussi
compression et décompression de fichiers
fonctions de gestion de fichiers
droits d’accès et de sécurité des fichiers
Functions
Rubriques de vue d’ensemble
Considérations relatives à la programmation pour les NTFS transactionnelles