Partager via


Fonction ReOpenFile (winbase.h)

Rouvre l’objet système de fichiers spécifié avec des droits d’accès, un mode de partage et des drapeaux différents.

Syntaxe

HANDLE ReOpenFile(
  [in] HANDLE hOriginalFile,
  [in] DWORD  dwDesiredAccess,
  [in] DWORD  dwShareMode,
  [in] DWORD  dwFlagsAndAttributes
);

Paramètres

[in] hOriginalFile

Handle de l’objet à rouvrir. L’objet doit avoir été créé par la fonction CreateFile .

[in] dwDesiredAccess

Accès requis à l’objet. Pour obtenir la liste des valeurs, consultez Sécurité des fichiers et droits d’accès. Vous ne pouvez pas demander un mode d’accès qui est en conflit avec le mode de partage spécifié dans une demande ouverte précédente dont le handle est toujours ouvert.

Si ce paramètre est égal à zéro (0), l’application peut interroger les attributs de l’appareil sans accéder à l’appareil. Cela est utile si une application souhaite déterminer la taille d’un lecteur de disquette et les formats qu’il prend en charge sans nécessiter de disquette dans le lecteur.

[in] dwShareMode

Mode de partage de l’objet. 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 précédente dont le handle est toujours ouvert.

Si ce paramètre est égal à zéro (0) et que CreateFile réussit, l’objet ne peut pas être partagé et ne peut pas être rouvert tant que le handle n’est pas fermé.

Pour permettre à d’autres processus de partager l’objet pendant que votre processus est ouvert, utilisez une combinaison d’une ou plusieurs des valeurs suivantes pour spécifier le type d’accès qu’ils peuvent demander lorsqu’ils ouvrent l’objet. Ces options de partage restent en vigueur jusqu’à ce que vous fermiez le handle de l’objet.

Valeur Signification
FILE_SHARE_DELETE
0x00000004
Active les opérations d’ouverture suivantes sur l’objet pour demander la suppression de l’accès. Sinon, d’autres processus ne peuvent pas ouvrir l’objet s’ils demandent l’accès à la suppression.

Si l’objet a déjà été ouvert avec l’accès de suppression, le mode de partage doit inclure cet indicateur.

FILE_SHARE_READ
0x00000001
Permet aux opérations d’ouverture suivantes sur l’objet de demander l’accès en lecture. Sinon, d’autres processus ne peuvent pas ouvrir l’objet s’ils demandent un accès en lecture.

Si l’objet a déjà été ouvert avec un accès en lecture, le mode de partage doit inclure cet indicateur.

FILE_SHARE_WRITE
0x00000002
Active les opérations d’ouverture suivantes sur l’objet pour demander l’accès en écriture. Sinon, d’autres processus ne peuvent pas ouvrir l’objet s’ils demandent un accès en écriture.

Si l’objet a déjà été ouvert avec un accès en écriture, le mode de partage doit inclure cet indicateur.

[in] dwFlagsAndAttributes

Indicateurs de fichier. Ce paramètre peut prendre une ou plusieurs des valeurs suivantes.

Valeur Signification
FILE_FLAG_BACKUP_SEMANTICS
0x02000000
Indique que 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, à condition qu’il dispose des privilèges SE_BACKUP_NAME et SE_RESTORE_NAME . Pour plus d’informations, consultez Modification des privilèges dans un jeton.

Vous pouvez également définir cet indicateur pour obtenir un handle dans un répertoire. Lorsqu’il est indiqué, un handle de répertoire peut être passé à certaines fonctions à la place d’un handle de fichier.

FILE_FLAG_DELETE_ON_CLOSE
0x04000000
Indique que le système d’exploitation doit supprimer le fichier immédiatement après la fermeture de tous ses descripteurs, non seulement le handle spécifié, mais également tout autre handle ouvert ou dupliqué.

Les demandes ouvertes suivantes pour le fichier échouent, sauf si FILE_SHARE_DELETE est utilisé.

FILE_FLAG_NO_BUFFERING
0x20000000
Indique au système d’ouvrir le fichier sans mise en mémoire tampon ou mise en cache intermédiaire. Lorsqu’il est combiné avec FILE_FLAG_OVERLAPPED, l’indicateur offre des performances asynchrones maximales, car les E/S ne reposent 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.

Une application doit répondre à des exigences spécifiques lors de l’utilisation de fichiers ouverts avec FILE_FLAG_NO_BUFFERING :

  • L’accès au fichier doit commencer à des décalages d’octets dans le fichier qui sont des multiples entiers de la taille du secteur du volume.
  • L’accès au fichier doit être pour les nombres d’octets qui sont des multiples entiers de la taille du secteur du volume. Par exemple, si la taille du secteur est de 512 octets, une application peut demander des lectures et écritures de 512, 1024, 1536 ou 2 048 octets, mais pas de 335, 981 ou 7171 octets.
  • Les adresses de mémoire tampon pour les opérations de lecture et d’écriture doivent être alignées sur les adresses en mémoire qui sont des multiples entiers de la taille du secteur du volume. Selon le disque, cette exigence peut ne pas être appliquée.
Une façon d’aligner des mémoires tampons sur des multiples entiers de la taille du secteur de volume consiste à utiliser VirtualAlloc pour allouer les mémoires tampons. Il alloue de la mémoire alignée sur les adresses qui sont des multiples entiers de la taille de la page mémoire du système d’exploitation. Étant donné que les tailles de page mémoire et de secteur de volume ont une puissance de 2, cette mémoire est également alignée sur les adresses qui sont des multiples entiers d’une taille de secteur de volume. Les pages mémoire ont une taille de 4 à 8 Ko ; Les secteurs sont de 512 octets (disques durs) ou de 2 048 octets (CD), et par conséquent, les secteurs de volume ne peuvent jamais être plus grands que les pages mémoire.

Une application peut déterminer une taille de secteur de volume en appelant la fonction GetDiskFreeSpace .

FILE_FLAG_OPEN_NO_RECALL
0x00100000
Indique que les données de fichier sont demandées, mais qu’elles doivent continuer à résider dans le stockage distant. Il ne doit pas être retransporté vers le stockage local. Cet indicateur est destiné à être utilisé par les systèmes de stockage distants.
FILE_FLAG_OPEN_REPARSE_POINT
0x00200000
Lorsque cet indicateur est utilisé, le traitement normal du point d’analyse ne se produit pas et ReOpenFile 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é.
FILE_FLAG_OVERLAPPED
0x40000000
Indique au système d’initialiser l’objet, de sorte que les opérations qui prennent beaucoup de temps à traiter retournent ERROR_IO_PENDING. Une fois l’opération terminée, l’événement spécifié est défini sur l’état signalé.

Lorsque vous spécifiez FILE_FLAG_OVERLAPPED, les fonctions de lecture et d’écriture de fichier doivent spécifier une structure CHEVAUCHÉE . Autrement dit, lorsque FILE_FLAG_OVERLAPPED est spécifié, une application doit effectuer une lecture et une écriture qui se chevauchent.

Lorsque FILE_FLAG_OVERLAPPED est spécifié, le système ne gère pas le pointeur de fichier. La position du fichier doit être passée dans le cadre du paramètre lpOverlapped (pointant vers une structure CHEVAUCHEMENT) aux fonctions de lecture et d’écriture de fichier.

Cet indicateur permet également d’effectuer plusieurs opérations simultanément avec le handle (une opération de lecture et d’écriture simultanée, par exemple).

FILE_FLAG_POSIX_SEMANTICS
0x01000000
Indique que le fichier doit être accessible conformément aux règles POSIX. Cela inclut l’autorisation de plusieurs fichiers avec des noms, ne différant que dans la casse, pour les systèmes de fichiers qui prennent en charge ce nommage. Faites attention lorsque vous utilisez 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.
FILE_FLAG_RANDOM_ACCESS
0x10000000
Indique que le fichier est accessible aléatoirement. Le système peut utiliser cette indication pour optimiser la mise en cache du fichier.
FILE_FLAG_SEQUENTIAL_SCAN
0x08000000
Indique que le fichier doit être accessible de manière séquentielle du début à la fin. Le système peut utiliser cette indication pour optimiser la mise en cache du fichier. Si une application déplace le pointeur de fichier pour l’accès aléatoire, une mise en cache optimale peut ne pas se produire ; toutefois, une opération correcte est 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 notables pour les applications qui lisent des fichiers volumineux principalement de manière séquentielle, mais qui ignorent parfois de petites plages d’octets.

FILE_FLAG_WRITE_THROUGH
0x80000000
Indique au système d’écrire dans n’importe quel cache intermédiaire et d’accéder directement au disque. Le système peut toujours mettre en cache les opérations d’écriture, mais ne peut pas les vider paresseusement.
 

Si le handle représente le côté client d’un canal nommé, le paramètre dwFlags peut également contenir des 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 , le paramètre dwFlags peut contenir une ou plusieurs des valeurs suivantes.

Valeur Signification
SECURITY_ANONYMOUS
Empruntez l’identité du client au niveau de l’emprunt d’identité anonyme.
SECURITY_CONTEXT_TRACKING
Le mode de suivi de la sécurité est dynamique. Si cet indicateur n’est pas spécifié, le mode de suivi de la sécurité est statique.
SECURITY_DELEGATION
Empruntez l’identité du client au niveau de l’emprunt d’identité de délégation.
SECURITY_EFFECTIVE_ONLY
Seuls les aspects activés du contexte de sécurité client sont disponibles pour le serveur. Si vous ne spécifiez pas cet indicateur, tous les aspects du contexte de sécurité client sont disponibles.

Cela permet au client de limiter les groupes et les privilèges qu’un serveur peut utiliser lors de l’emprunt d’identité du client.

SECURITY_IDENTIFICATION
Empruntez l’identité du client au niveau de l’emprunt d’identité d’identification.
SECURITY_IMPERSONATION
Empruntez l’identité du client au niveau de l’emprunt d’identité.

Valeur retournée

Si la fonction réussit, la valeur de retour est un handle ouvert pour le fichier spécifié.

Si la fonction échoue, la valeur de retour est INVALID_HANDLE_VALUE. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.

Remarques

Le paramètre dwFlags ne peut contenir aucun des indicateurs d’attribut de fichier (FILE_ATTRIBUTE_*). Ceux-ci ne peuvent être spécifiés que lorsque le fichier est créé.

Dans Windows 8 et Windows Server 2012, cette fonction est prise en charge par les technologies suivantes.

Technologie Prise en charge
Protocole Server Message Block (SMB) 3.0 Oui
Basculement transparent SMB 3.0 (TFO) Oui
SMB 3.0 avec partages de fichiers avec montée en puissance parallèle (SO) Oui
Système de fichiers du volume partagé de cluster (CsvFS) Oui
Système de fichiers résilient (ReFS) Oui

Configuration requise

   
Client minimal pris en charge Windows Vista [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
Plateforme cible Windows
En-tête winbase.h (inclure Windows.h)
Bibliothèque Kernel32.lib
DLL Kernel32.dll

Voir aussi

CreateFile

Fonctions de gestion des fichiers