Partager via


PREFETCH_OPEN_ECP_CONTEXT structure (ntifs.h)

La structure PREFETCH_OPEN_ECP_CONTEXT indique si le prefetcher effectue une requête ouverte donnée sur un fichier.

Syntaxe

typedef struct _PREFETCH_OPEN_ECP_CONTEXT {
  PVOID Context;
} PREFETCH_OPEN_ECP_CONTEXT, *PPREFETCH_OPEN_ECP_CONTEXT;

Membres

Context

Pointeur vers un contexte opaque associé à la demande ouverte.

Remarques

Le prefetcher est un composant du système d’exploitation étroitement intégré au gestionnaire de cache et au gestionnaire de mémoire pour rendre les accès au disque plus efficaces et ainsi améliorer les performances. Si d’autres composants interfèrent avec le prefetcher, les performances du système diminuent et peuvent se bloquer. Par conséquent, le prefetcher attache la structure PREFETCH_OPEN_ECP_CONTEXT à un fichier pour indiquer que le prérécupération a effectué une requête ouverte sur ce fichier. Le prefetcher utilise le GUID GUID_ECP_PREFETCH_OPEN dans un appel à la routine FltCreateFileEx2 ou IoCreateFileEx pour attacher la structure PREFETCH_OPEN_ECP_CONTEXT . Un pilote de filtre de système de fichiers (filtre) peut appeler FltFindExtraCreateParameter pour déterminer si PREFETCH_OPEN_ECP_CONTEXT est attaché au fichier, puis prendre les mesures appropriées. Le filtre doit appeler la routine FltIsEcpFromUserMode pour déterminer si la structure de contexte PREFETCH_OPEN_ECP_CONTEXT provient du mode noyau. Pour empêcher les applications malveillantes d’usurper le prérécupération, le filtre ne doit pas accepter PREFETCH_OPEN_ECP_CONTEXT s’il provient du mode utilisateur.

Une fois que le prefetcher a attaché la structure PREFETCH_OPEN_ECP_CONTEXT à un fichier, toute activité de prérécupération supplémentaire pour le fichier implique l’objet file qui a PREFETCH_OPEN_ECP_CONTEXT attaché. Si un filtre doit identifier les demandes de système de fichiers prérécupération autres que les demandes de création, le filtre doit conserver son propre état (par exemple, les contextes de gestion du gestionnaire de filtres). Le filtre conserve son propre état afin de déterminer si un objet fichier particulier est un objet de fichier de prérécupération.

Le gestionnaire de mémoire peut mettre en cache l’objet de fichier prefetcher. Le gestionnaire de mémoire peut ensuite utiliser l’objet de fichier prefetcher pour d’autres applications qui effectuent des E/S mappées ou des E/S mises en cache à l’aide du gestionnaire de cache. Par conséquent, l’objet de fichier prefetcher peut être utilisé pour la pagination des E/S avant ou après la fermeture de son handle par le prefetcher. Cette E/S de pagination peut inclure des écritures de pagination, même si le prefetcher n’écrit jamais de données. Les écritures de pagination sont générées par d’autres applications. Le gestionnaire de mémoire écrit des données à partir des applications à l’aide de son objet de fichier de prérécupération mis en cache. Par conséquent, le filtre effectue le travail déclenché par la pagination des écritures, le filtre doit toujours effectuer ce travail, même si les écritures de pagination proviennent d’un objet de fichier de prérécupération.

Lorsqu’un filtre détermine qu’une opération de nettoyage s’est produite sur un objet de fichier de prérécupération, le filtre ne doit plus considérer cet objet fichier comme étant ouvert en pré-ouverture.

Les opérations courantes effectuées par le prefetcher sont les suivantes (toutefois, dans ces opérations, le prefetcher ne modifie jamais le contenu du fichier) :

  • Ouvrir et fermer le volume
  • Ouvrir et fermer le fichier
  • Informations sur le fichier de requête
  • Définir les informations de fichier (uniquement pour indiquer au système de fichiers de ne pas mettre à jour l’heure du dernier accès pour cette ouverture)
  • Section Créer une image et des données
  • Effectuer des E/S de pagination asynchrones

Pour éviter d’induire une situation d’interblocage possible, un filtre doit :

  • Ne bloquez jamais les opérations de prérécupération.
  • Passez les opérations de prérécupération sans émettre d’autres demandes de système de fichiers.

Pour qu’une application ou un pilote accède à l’une des données en cours de prérécupération, il doit ouvrir son propre handle dans le fichier ou créer une section ou les deux.

Pour plus d’informations sur l’utilisation des programmes d’environnement pour associer des informations supplémentaires à une opération de IRP_MJ_CREATE sur un fichier, consultez Utilisation de paramètres de création supplémentaires avec une opération de IRP_MJ_CREATE.

La structure PREFETCH_OPEN_ECP_CONTEXT est en lecture seule. Vous devez l’utiliser pour récupérer des informations sur un prédéfini ecp ouvert uniquement. Pour plus d’informations sur ce problème, consultez EcPs définis par le système.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Vista
En-tête ntifs.h (include Ntifs.h)

Voir aussi

FltCreateFileEx2

FltIsEcpFromUserMode

IoCreateFileEx