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 d’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 transmis, l’appel est supposé se trouver sur un objet de fichier synchrone ou l’appelant attend l’événement de l’objet fichier, sinon il peut être terminé de manière asynchrone. S’il est utilisé 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 fichier ou passer un événement dans ce paramètre et l’attendre. Si ce n’est pas le cas, il n’y a aucun moyen pour l’appelant de savoir quand l’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
Pointe éventuellement vers une routine d’achèvement pour cette IRP.
[in, optional] CompletionContext
Si CompletionRoutine est spécifié, cela fournit un pointeur de contexte dans le rappel de la 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 de status. Il s’agit toujours d’une adresse valide, quel que soit le mode du demandeur. La valeur doit rester valide jusqu’à ce que l’appel ait mis à jour le status. L’appelant doit effectuer des E/S synchrones ou attendre l’événement de l’objet fichier ou un événement transmis dans le paramètre Event 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é sondé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 à partir de la mémoire NonPagedPool.
[in] Length
Spécifie la taille des StreamHeaders passés.
[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 un 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 l’est, les E/S rapides ne peuvent pas être utilisées.
Valeur retournée
La fonction KsStreamIo retourne STATUS_SUCCESS en cas de réussite, STATUS_PENDING si l’action est en attente ou si elle a échoué, elle retourne 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 peuvent être paginables. Il s’agit de la valeur par défaut et peut être utilisé à tout moment. |
KSSTREAM_NONPAGED_DATA | Spécifie que les données ne sont pas paginés 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.
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Universal |
En-tête | ks.h (inclure Ks.h) |
Bibliothèque | Ks.lib |