Partager via


Fonction FltSetStreamHandleContext (fltkernel.h)

La routine FltSetStreamHandleContext définit un contexte pour un handle de flux.

Syntaxe

NTSTATUS FLTAPI FltSetStreamHandleContext(
  [in]            PFLT_INSTANCE             Instance,
  [in]            PFILE_OBJECT              FileObject,
  [in]            FLT_SET_CONTEXT_OPERATION Operation,
  [in]            PFLT_CONTEXT              NewContext,
  [out, optional] PFLT_CONTEXT              *OldContext
);

Paramètres

[in] Instance

Pointeur de instance opaque pour le pilote minifiltre instance dont le contexte doit être inséré, supprimé ou remplacé dans la liste des contextes attachés au handle de flux.

[in] FileObject

Pointeur vers un objet de fichier pour le flux de fichiers. Ce paramètre est obligatoire et ne peut pas avoir la valeur NULL.

[in] Operation

Indicateur qui spécifie les détails de l’opération à effectuer. Ce paramètre doit être l’un des suivants :

Valeur Signification
FLT_SET_CONTEXT_REPLACE_IF_EXISTS Si un contexte est déjà défini pour cette instance, FltSetStreamHandleContext le remplace par le contexte spécifié dans NewContext. Sinon, il insère NewContext dans la liste des contextes du handle de flux.
FLT_SET_CONTEXT_KEEP_IF_EXISTS Si un contexte est déjà défini pour cette instance, FltSetStreamHandleContext retourne STATUS_FLT_CONTEXT_ALREADY_DEFINED et ne remplace pas le contexte existant ni n’incrémente le nombre de références. Si un contexte n’a pas encore été défini, la routine insère NewContext dans la liste des contextes pour le handle de flux et incrémente le nombre de références.

[in] NewContext

Pointeur vers le nouveau contexte à définir pour le handle de flux. Ce paramètre est obligatoire et ne peut pas avoir la valeur NULL.

[out, optional] OldContext

Pointeur vers une variable allouée par l’appelant qui reçoit l’adresse du contexte de handle de flux existant pour le paramètre Instance , le cas échéant. Ce paramètre est facultatif et peut être NULL. Pour plus d’informations sur ce paramètre, consultez la section Remarques suivante.

Valeur retournée

La routine FltSetStreamHandleContext retourne STATUS_SUCCESS ou une valeur NTSTATUS appropriée, comme l’un des codes d’erreur suivants :

Code de retour Description
STATUS_FLT_CONTEXT_ALREADY_DEFINED Si FLT_SET_CONTEXT_KEEP_IF_EXISTS a été spécifié pour Operation, ce code d’erreur indique qu’un contexte est déjà attaché au handle de flux.
STATUS_FLT_CONTEXT_ALREADY_LINKED Le contexte vers lequel pointe NewContext est déjà lié à un objet. En d’autres termes, ce code d’erreur indique que NewContext est déjà utilisé en raison d’un appel antérieur réussi d’une routine de contexte FltSetXxx.
STATUS_FLT_DELETING_OBJECT L’instance spécifiée est en cours de démolir. Il s’agit d’un code d’erreur.
STATUS_INVALID_PARAMETER Un paramètre non valide a été passé. Par exemple, le paramètre NewContext ne pointe pas vers un contexte de handle de flux valide ou une valeur non valide a été spécifiée pour Operation.
STATUS_NOT_SUPPORTED Une situation non prise en charge s’est produite, telle que le système de fichiers ne prend pas en charge les contextes par flux pour ce flux de fichiers, ou que l’appelant a fourni un FileObject NULL.

Remarques

Pour plus d’informations sur les contextes, consultez À propos des contextes de minifiltre.

La routine FltSetStreamHandleContext ajoute, supprime ou remplace un contexte pour un pilote de minifiltre instance sur un handle de flux. Un pilote de minifiltre peut attacher un contexte par pilote de minifiltre instance à la poignée de flux.

FltSetStreamHandleContext ne peut pas être appelé sur un Objet FileObject non ouvert. Par conséquent , FltSetStreamHandleContext ne peut pas être appelé à partir d’un rappel de précréation pour un flux, car le flux n’a pas été ouvert à ce stade. Toutefois, un minifiltre peut allouer et configurer le contexte de handle de flux dans le rappel de précréation, le transmettre au rappel post-création à l’aide du paramètre de contexte d’achèvement et définir le contexte de handle de flux sur le flux dans le rappel post-création.

Décompte de références

Si FltSetStreamHandleContext réussit :

  • Le nombre de références sur NewContext est incrémenté. Lorsque NewContext n’est plus nécessaire, le minifiltre doit appeler FltReleaseContext pour décrémenter son nombre de références.

Sinon, si FltSetStreamHandleContext échoue :

  • Le nombre de références sur NewContext reste inchangé.
  • Si OldContext n’a pas la valeur NULL et ne pointe pas vers NULL_CONTEXT oldContext est un pointeur référencé vers le contexte actuellement associé au handle de flux. Le filtre appelant FltSetStreamHandleContext doit également appeler FltReleaseContext pour OldContext lorsque le pointeur de contexte n’est plus nécessaire.

Quelle que soit la réussite :

  • Le filtre appelant FltSetStreamHandleContext doit appeler FltReleaseContext pour décrémenter le nombre de références sur l’objet NewContext incrémenté par FltAllocateContext.

Pour plus d’informations, consultez Référencement de contextes.

Autres opérations de contexte

Pour plus d’informations, consultez Définition de contextes et Libération de contextes :

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible et pris en charge dans microsoft Windows 2000 Update Rollup 1 pour les systèmes d’exploitation SP4, Windows XP SP2, Windows Server 2003 SP1 et versions ultérieures.
Plateforme cible Universal
En-tête fltkernel.h (inclure Fltkernel.h)
Bibliothèque Fltmgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL

Voir aussi

FltAllocateContext

FltDeleteContext

FltDeleteStreamHandleContext

FltGetStreamHandleContext

FltReleaseContext