Partager via


KsAllocateExtraData, fonction (ks.h)

La fonction KsAllocateExtraData est utilisée avec les irps de streaming pour allouer une mémoire tampon afin de contenir des données d’en-tête supplémentaires. Un pointeur vers la mémoire tampon allouée est retourné et la mémoire tampon doit finalement être libérée par l’appelant.

Syntaxe

KSDDKAPI NTSTATUS KsAllocateExtraData(
  [in, out] PIRP  Irp,
  [in]      ULONG ExtraSize,
  [out]     PVOID *ExtraBuffer
);

Paramètres

[in, out] Irp

Spécifie l’IRP contenant les en-têtes de flux. L’IRP doit avoir été précédemment passé à KsProbeStreamIrp pour mettre en mémoire tampon les en-têtes.

[in] ExtraSize

Spécifie la taille, en octets, de la mémoire supplémentaire à allouer entre chaque en-tête de flux. Cette valeur doit être alignée sur une limite de huit octets. Une copie des en-têtes est placée dans la mémoire tampon retournée, avec la taille de données supplémentaire insérée entre chaque en-tête. Celui-ci doit être libéré par l’appelant.

[out] ExtraBuffer

Pointe vers un pointeur alloué par l’appelant qui, une fois l’exécution réussie, pointe vers une mémoire tampon allouée par le système contenant les en-têtes de flux et le remplissage demandé entre eux. Celui-ci doit être libéré par l’appelant.

Valeur retournée

La fonction KsAllocateExtraData retourne STATUS_SUCCESS si elle réussit, ou renvoie une erreur de ressource ou d’accès.

Remarques

Lorsque KsAllocateExtraData se termine correctement, un pointeur vers un bloc de mémoire est retourné qui contient à la fois les en-têtes de données de flux à partir de l’IRP, spécifié à Irp, et le remplissage entre chaque en-tête de taille spécifiée dans ExtraSize. Voici un exemple de mémoire tampon résultante :

Diagramme illustrant une mémoire tampon résultante.

Lorsque la mémoire tampon supplémentaire n’est plus nécessaire, la mémoire doit être libérée à l’aide d’ExFreePool.

Configuration requise

Condition requise Valeur
Plateforme cible Universal
En-tête ks.h (inclure Ks.h)
Bibliothèque Ks.lib
IRQL < DISPATCH_LEVEL