Utilisation d’ECPs pour traiter les opérations de IRP_MJ_CREATE dans un pilote de filtre de système de fichiers

Vous pouvez utiliser des paramètres de création supplémentaires dans votre pilote de filtre de système de fichiers pour traiter les opérations de IRP_MJ_CREATE . Votre pilote de filtre de système de fichiers peut appeler les routines dans les sections suivantes pour récupérer, définir (ajouter), accuser réception et supprimer des PPE pour l’opération de IRP_MJ_CREATE . Vous pouvez également déterminer l’espace du système d’exploitation à partir duquel proviennent les fournisseurs d’applications cloud.

Récupération des fournisseurs d’applications cloud

Pour récupérer les PPE pour l’opération de IRP_MJ_CREATE :

  1. Appelez FltGetEcpListFromCallbackData (ou FsRtlGetEcpListFromIrp) pour récupérer un pointeur vers le ECP_LIST associé à l’opération de création.

  2. Effectuez l’une des opérations suivantes :

    • Appelez FltGetNextExtraCreateParameter (ou FsRtlGetNextExtraCreateParameter) pour récupérer un pointeur vers la structure de contexte ECP suivante (ou la première) dans la liste ECP.
    • Appelez FltFindExtraCreateParameter (ou FsRtlFindExtraCreateParameter) pour rechercher dans la liste ECP une structure de contexte ECP d’un type donné. L’une ou l’autre routine retourne un pointeur vers la structure de contexte ECP si la structure est trouvée.

Définition des fournisseurs d’accès à l’environnement

Pour définir les fournisseurs d’applications cloud pour l’opération de IRP_MJ_CREATE , votre pilote de filtre de système de fichiers effectue les opérations suivantes :

  • Définissez les PPE dans un ECP_LIST existant.

  • Définissez les PPE dans un ECP_LIST nouvellement créé.

Définition d’ecPs dans un ECP_LIST existant

Pour définir des PPE dans un ECP_LIST existant associé à l’opération de création :

  1. Appelez FltGetEcpListFromCallbackData (ou FsRtlGetEcpListFromIrp) pour récupérer un pointeur vers le ECP_LIST associé à l’opération de création.

  2. Appelez FltAllocateExtraCreateParameter (ou FsRtlAllocateExtraCreateParameter) pour allouer un pool de mémoire paginé pour une structure de contexte ECP et générer un pointeur vers cette structure.

  3. Appelez FltInsertExtraCreateParameter (ou FsRtlInsertExtraCreateParameter) pour insérer des structures de contexte ECP dans la structure ECP_LIST.

Définition d’ecPs dans un ECP_LIST nouvellement créé

Si un ECP_LIST n’est pas actuellement associé à l’opération de création, vous devez en créer un, puis définir des fournisseurs d’applications cloud dans celui-ci :

  1. Appelez FltAllocateExtraCreateParameterList (ou FsRtlAllocateExtraCreateParameterList) pour allouer de la mémoire pour une structure ECP_LIST.

  2. Appelez FltAllocateExtraCreateParameter (ou FsRtlAllocateExtraCreateParameter) pour allouer un pool de mémoire paginé pour une structure de contexte ECP et générer un pointeur vers cette structure.

  3. Appelez FltInsertExtraCreateParameter (ou FsRtlInsertExtraCreateParameter) pour insérer des structures de contexte ECP dans le ECP_LIST.

  4. Appelez FltSetEcpListIntoCallbackData (ou FsRtlSetEcpListIntoIrp) pour attacher une liste ECP à l’opération de création.

Suppression des fournisseurs d’accès cloud

Pour supprimer les PPE pour l’opération de IRP_MJ_CREATE :

  1. Appelez FltRemoveExtraCreateParameter (ou FsRtlRemoveExtraCreateParameter) pour rechercher une liste ECP pour une structure de contexte ECP. Si la structure de contexte ECP est trouvée, la routine détache la structure de contexte ECP de la liste ECP.

  2. Pour libérer la mémoire de la structure de contexte ECP détachée, appelez FltFreeExtraCreateParameter (ou FsRtlFreeExtraCreateParameter). Vous pouvez appeler ces routines pour libérer de la mémoire pour la structure de contexte ECP si vous avez alloué la mémoire de l’une des manières suivantes :

Marquage des PPE comme étant reconnus ou détermination de l’état d’accusé de réception

Appelez les routines suivantes pour marquer les PPE comme étant reconnues ou déterminer si les PPE sont marquées comme reconnues :

  • Appelez FltAcknowledgeEcp (ou FsRtlAcknowledgeEcp) pour marquer une structure de contexte ECP comme reconnue. L’ECP peut être marqué comme examiné, utilisé, traité ou toute autre condition de l’ECP.

  • Appelez FltIsEcpAcknowledged (ou FsRtlIsEcpAcknowledged) pour déterminer si une structure de contexte ECP est marquée comme reconnue.

Détermination du mode d’origine

Appelez FltIsEcpFromUserMode (ou FsRtlIsEcpFromUserMode) pour déterminer si une structure de contexte ECP provient du mode utilisateur. Un pilote de filtre de système de fichiers peut refuser d’accepter une structure de contexte ECP provenant du mode utilisateur.

Utilisation de listes de lookaside pour allouer des PPE

Appelez les routines suivantes pour allouer des PPE à partir de listes de lookasides et pour gérer les listes de recherche et les fournisseurs d’applications cloud :