structure PREFETCH_OPEN_ECP_CONTEXT (ntifs.h)
La structure PREFETCH_OPEN_ECP_CONTEXT communique si le préfetcher 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 requête ouverte.
Remarques
Le préfetcher 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 efficace et améliorer ainsi les performances. Si d’autres composants interfèrent avec le préfetcher, les performances du système diminuent et peuvent bloquer. Par conséquent, le préfetcher attache la structure PREFETCH_OPEN_ECP_CONTEXT à un fichier pour communiquer que le préfetcher a effectué une demande ouverte sur ce fichier. Le préfetcher 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 (filter) 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 préfetcher attache la structure PREFETCH_OPEN_ECP_CONTEXT à un fichier, toute activité de préfetcher supplémentaire pour le fichier implique l’objet de fichier qui a PREFETCH_OPEN_ECP_CONTEXT attaché. Si un filtre doit identifier les demandes de système de fichiers préfetcher autres que les demandes de création, le filtre doit conserver son propre état (par exemple, le gestionnaire de filtres gère les contextes). Le filtre conserve son propre état afin de déterminer si un objet de fichier particulier est un objet de fichier préfetcher.
Le gestionnaire de mémoire peut mettre en cache l’objet de fichier de préfetcher. Le gestionnaire de mémoire peut ensuite utiliser l’objet de fichier préfetcher 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 de préfetcher peut être utilisé pour paginer les E/S avant ou après que le préfetcher ferme son handle. Ces E/S de pagination peuvent inclure des écritures de pagination, même si le préfetcher 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 préfetcher mis en cache. Par conséquent, le filtre effectue un travail déclenché par des écritures de pagination, le filtre doit toujours effectuer ce travail, même si les écritures de pagination se produisent sur un objet de fichier préfetcher.
Lorsqu’un filtre détermine qu’une opération de nettoyage s’est produite sur un objet de fichier préfetcher, le filtre ne doit plus considérer cet objet de fichier à ouvrir au préalable.
Voici les opérations courantes que le préfetcher effectue (toutefois, dans ces opérations, le préfetcher 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éfinissez les informations de fichier (uniquement pour indiquer au système de fichiers de ne pas mettre à jour l’heure de dernière accès pour cette ouverture)
- Créer une image et une section de données
- Effectuer une pagination asynchrone des E/S
Pour éviter d’entraîner une situation de blocage possible, un filtre doit :
- Ne bloquez jamais les opérations de prérécupération.
- Passez des opérations de préfetcher sans émettre d’autres demandes de système de fichiers.
Pour que toute application ou pilote accède à l’une des données qui sont prérécupérées, elle doit ouvrir son propre handle au fichier ou créer une section ou les deux.
Pour plus d’informations sur l’utilisation des PPE 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émentaire 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éfetcher open ECP uniquement. Pour plus d’informations sur ce problème, consultez System-Defineddes PPE.
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Windows Vista |
d’en-tête | ntifs.h (include Ntifs.h) |