Utilisation de la position de fichier actuelle
Lorsque vous créez ou ouvrez un fichier, vous pouvez amener le gestionnaire d’E/S à créer un pointeur de position de fichier actuel associé au descripteur de fichier. Une fois que vous l’avez fait, vous pouvez lire et écrire des données dans la position de fichier actuelle, et le gestionnaire d’E/S met automatiquement à jour la position en fonction du nombre d’octets qui ont été lus ou écrits.
Par défaut, le gestionnaire d’E/S ne conserve pas de pointeur de position de fichier actuel. Cette valeur par défaut offre de l’efficacité, car le maintien correct de la position actuelle du fichier nécessite que le gestionnaire d’E/S synchronise chaque opération de lecture et d’écriture sur l’objet fichier.
Pour créer un handle associé à un pointeur de position de fichier actuel, spécifiez le droit d’accès SYNCHRONIZE dans le paramètre DesiredAccess à ZwCreateFile, IoCreateFile ou ZwOpenFile, et FILE_SYNCHRONOUS_IO_ALERT ou FILE_SYNCHRONOUS_IO_NONALERT dans le paramètre CreateOptions ou OpenOptions . Veillez à ne pas spécifier également le droit d’accès FILE_APPEND_DATA.
ZwReadFile et ZwWriteFile mettent automatiquement à jour le pointeur de position de fichier actuel afin qu’il pointe juste au-delà des données affectées par l’opération. Par exemple, si vous lisez 20 octets à partir du décalage d’octets 101, ZwReadFile met à jour la position de fichier actuelle sur 121.
Vous pouvez examiner ou modifier la position actuelle du fichier en appelant Respectivement ZwQueryInformationFile ou ZwSetInformationFile. Dans les deux cas, définissez le paramètre FileInformationClass sur FilePositionInformation.