Partager via


CcCopyReadEx, fonction (ntifs.h)

Le CcCopyReadEx routine copie les données d’un fichier mis en cache vers une mémoire tampon utilisateur. Le nombre d’octets d’E/S pour l’opération est facturé au thread émettrice.

Syntaxe

BOOLEAN CcCopyReadEx(
  [in]  PFILE_OBJECT     FileObject,
  [in]  PLARGE_INTEGER   FileOffset,
  [in]  ULONG            Length,
  [in]  BOOLEAN          Wait,
  [out] PVOID            Buffer,
  [out] PIO_STATUS_BLOCK IoStatus,
  [in]  PETHREAD         IoIssuerThread
);

Paramètres

[in] FileObject

Pointeur vers un objet de fichier pour le fichier mis en cache à partir duquel les données doivent être lues.

[in] FileOffset

Pointeur vers une variable qui spécifie le décalage d’octets de départ dans le fichier mis en cache.

[in] Length

Longueur en octets des données à lire.

[in] Wait

Définissez la valeur TRUE si l’appelant peut être placé dans un état d’attente jusqu’à ce que toutes les données aient été copiées, FALSE dans le cas contraire.

[out] Buffer

Pointeur vers une mémoire tampon dans laquelle les données doivent être copiées.

[out] IoStatus

Pointeur vers une structure allouée par l’appelant qui reçoit l’état d’achèvement final et les informations relatives à l’opération. Si toutes les données ne sont pas copiées correctement, IoStatus.Information contient le nombre réel d’octets copiés.

[in] IoIssuerThread

Thread qui émet la demande de lecture. Pour un système de fichiers avec comptabilité d’E/S de disque activée, il s’agit du thread sur lequel les E/S sont facturées. Si IoIssuerThread a la valeur NULL, les E/S sont facturées au thread actuel.

Valeur de retour

La routine CcCopyReadEx retourne TRUE si les données ont été copiées correctement, sinon FALSE.

Remarques

Si 'attente a la valeur TRUE, CcCopyReadEx est garanti pour terminer la demande de copie et retourner TRUE. Si les pages requises du fichier mis en cache résident déjà en mémoire, les données sont copiées immédiatement et aucun blocage ne se produit. Si les pages nécessaires ne sont pas résidentes, l’appelant est placé dans un état d’attente jusqu’à ce que toutes les pages requises aient été rendues résidentes et que les données puissent être copiées.

Si 'attente a la valeur FALSE, CcCopyReadEx refuse de bloquer et retourne la valeur FALSE si les pages requises du fichier mis en cache ne résident pas déjà en mémoire.

FileOffset plus longueur doit être inférieure ou égale à la taille du fichier mis en cache, ou une défaillance d’assertion se produit.

Si une défaillance se produit, CcCopyReadEx déclenche une exception d’état pour cet échec particulier. Par exemple, si un échec d’allocation de pool se produit, CcCopyReadEx déclenche une exception avec l’état STATUS_INSUFFICIENT_RESOURCES ; si une erreur d’E/S se produit, CcCopyReadEx déclenche l’exception d’état de l’erreur d’E/S. Par conséquent, pour contrôler si une défaillance se produit, le pilote doit encapsuler l’appel à CcCopyReadEx dans une instruction try-except try-except ou try-finally.

Pour mettre en cache un fichier, utilisez CcInitializeCacheMap.

Exigences

Exigence Valeur
client minimum pris en charge Windows 8
plateforme cible Universel
d’en-tête ntifs.h (include Ntifs.h, FltKernel.h)
bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

Voir aussi

CcFastCopyRead

CcInitializeCacheMap

CcReadAhead

CcScheduleReadAhead

CcSetAdditionalCacheAttributes

CcSetReadAheadGranularity