Partager via


KsAllocateExtraData, fonction (ks.h)

La fonction KsAllocateExtraData est utilisée avec les irps de streaming pour allouer une mémoire tampon pour 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 éventuellement ê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é passé précédemment à KsProbeStreamIrp pour mettre en mémoire tampon les en-têtes.

[in] ExtraSize

Spécifie la taille, en octets, de mémoire supplémentaire à allouer entre chaque en-tête de flux. Cette valeur doit être alignable 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. Cela doit être libéré par l’appelant.

[out] ExtraBuffer

Pointe vers un pointeur alloué par l’appelant qui, lors de la réussite de l’exécution, 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. Cela doit être libéré par l’appelant.

Valeur de retour

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

Remarques

Lorsque KsAllocateExtraData se termine correctement, un pointeur vers un bloc de mémoire est retourné qui contient les deux en-têtes de données de flux à partir de l’IRP, spécifiés à 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 de ExFreePool.

Exigences

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