Partager via


KsStreamIo, fonction (ks.h)

La fonction KsStreamIo effectue un flux de lecture ou d’écriture sur l’objet de fichier spécifié. La fonction tente d’utiliser FastIoDispatch si possible, ou génère une demande de lecture ou d’écriture sur l’objet de l’appareil.

Syntaxe

KSDDKAPI NTSTATUS KsStreamIo(
  [in]           PFILE_OBJECT            FileObject,
  [in, optional] PKEVENT                 Event,
  [in, optional] PVOID                   PortContext,
  [in, optional] PIO_COMPLETION_ROUTINE  CompletionRoutine,
  [in, optional] PVOID                   CompletionContext,
  [in, optional] KSCOMPLETION_INVOCATION CompletionInvocationFlags,
  [out]          PIO_STATUS_BLOCK        IoStatusBlock,
  [in, out]      PVOID                   StreamHeaders,
  [in]           ULONG                   Length,
  [in]           ULONG                   Flags,
  [in]           KPROCESSOR_MODE         RequestorMode
);

Paramètres

[in] FileObject

Spécifie l’objet de fichier sur lequel effectuer les E/S.

[in, optional] Event

Contient éventuellement l’événement à utiliser dans les E/S. Si aucun n’est passé, l’appel est supposé être sur un objet de fichier synchrone ou l’appelant attend l’événement de l’objet de fichier, ou bien il peut être terminé de manière asynchrone. Si elle est utilisée et que l’indicateur KSSTREAM_SYNCHRONOUS n’est pas défini, il doit s’agir d’un événement alloué par le gestionnaire d’objets. Si l’appelant effectue des E/S asynchrones, il doit attendre l’événement de l’objet de fichier ou passer un événement dans ce paramètre et l’attendre. Si ce n’est pas le cas, il n’existe aucun moyen pour l’appelant de savoir quand IoStatusBlock a été mis à jour par l’appel.

[in, optional] PortContext

Contient éventuellement des informations de contexte pour un port d’achèvement.

[in, optional] CompletionRoutine

Si vous le souhaitez, il pointe vers une routine d’achèvement pour cet IRP.

[in, optional] CompletionContext

Si completionRoutine est spécifié, cela fournit un pointeur de contexte dans le rappel de routine d’achèvement.

[in, optional] CompletionInvocationFlags

Spécifie les indicateurs d’appel spécifiant quand la routine d’achèvement est appelée. Consultez le tableau suivant pour connaître les valeurs utilisées.

[out] IoStatusBlock

Emplacement pour retourner les informations d’état. Il s’agit toujours d’une adresse valide, quel que soit le mode demandeur. La valeur doit rester valide tant que l’appel n’a pas mis à jour l’état. L’appelant doit effectuer des E/S synchrones ou attendre l’événement de l’objet de fichier ou un événement transmis dans le paramètre d’événement avant d’autoriser cette adresse à devenir non valide.

[in, out] StreamHeaders

Spécifie la liste des en-têtes de flux. Cette adresse, ainsi que les adresses des mémoires tampons de données, sont supposées avoir été examinées pour obtenir un accès approprié. Les clients en mode noyau qui envoient des en-têtes de streaming doivent allouer les en-têtes de la mémoire NonPagedPool.

[in] Length

Spécifie la taille du StreamHeaders passé.

[in] Flags

Spécifie différents indicateurs pour les E/S. Consultez le tableau suivant pour connaître les valeurs utilisées.

[in] RequestorMode

Indique le mode processeur à placer dans l’IRP si l’un d’eux doit être généré. Cette variable détermine également si un appel d’E/S rapide peut être effectué. Si le mode demandeur n’est pas le mode noyau, mais que le mode précédent est, les E/S rapides ne peuvent pas être utilisées.

Valeur de retour

La fonction KsStreamIo retourne STATUS_SUCCESS si elle réussit, STATUS_PENDING si l’action est en attente ou si elle échoue, elle renvoie une erreur d’E/S.

Remarques

Les valeurs énumérées suivantes sont utilisées pour la variable CompletionInvocationFlags et sont de type KSCOMPLETION_INVOCATION :

CompletionInvocationFlags Description
KsInvokeOnSuccess Appelle la routine d’achèvement en cas de réussite.
KsInvokeOnError Appelle la routine d’achèvement en cas d’erreur.
KsInvokeOnCancel Appelle la routine d’achèvement lors de l’annulation.

Les valeurs définies suivantes sont utilisées pour la variable Flags :

indicateurs Description
KSSTREAM_READ Spécifie qu’un IRP IOCTL_KS_STREAMREAD doit être généré. Il s’agit de la valeur par défaut.
KSSTREAM_WRITE Spécifie qu’un IRP IOCTL_KS_STREAMWRITE doit être généré.
KSSTREAM_PAGED_DATA Spécifie que les données sont paginables. Il s’agit de la valeur par défaut et peut être utilisée à tout moment.
KSSTREAM_NONPAGED_DATA Spécifie que les données ne sont pas mises en page et peuvent être utilisées comme amélioration des performances.
KSSTREAM_SYNCHRONOUS Spécifie que l’IRP est synchrone. Cela signifie que si le paramètre Event est passé, il n’est pas traité comme un événement de gestionnaire d’objets et n’est pas référencé ou déréférencé.

KSSTREAM_READ équivaut à KSPROBE_STREAMREAD.

De même, KSSTREAM_WRITE équivaut à KSPROBE_STREAMWRITE.

Exigences

Exigence Valeur
plateforme cible Universel
d’en-tête ks.h (include Ks.h)
bibliothèque Ks.lib