Condividi tramite


Funzione FwpsAllocateDeepCloneNetBufferList0 (fwpsk.h)

La funzione FwpsAllocateDeepCloneNetBufferList0 alloca una struttura NET_BUFFER_LIST che è un clone profondo di una struttura NET_BUFFER_LIST esistente.

Sintassi

NTSTATUS FwpsAllocateDeepCloneNetBufferList0(
  [in, out]      NET_BUFFER_LIST *originalNetBufferList,
  [in, optional] NDIS_HANDLE     netBufferListPoolHandle,
  [in, optional] NDIS_HANDLE     netBufferPoolHandle,
  [out]          NET_BUFFER_LIST **netBufferList
);

Parametri

[in, out] originalNetBufferList

Puntatore alla struttura di NET_BUFFER_LIST originale clonata.

[in, optional] netBufferListPoolHandle

Handle del pool NET_BUFFER_LIST ottenuto da una chiamata precedente alla funzione NdisAllocateNetBufferListPool . Questo parametro è facoltativo e può essere NULL.

[in, optional] netBufferPoolHandle

Handle del pool NET_BUFFER_LIST ottenuto da una chiamata precedente alla funzione NdisAllocateNetBufferPool . Questo parametro è facoltativo e può essere NULL.

[out] netBufferList

Puntatore a una variabile che riceve un puntatore alla struttura di NET_BUFFER_LIST clonazione profonda.

Valore restituito

La funzione FwpsAllocateDeepCloneNetBufferList0 restituisce uno dei codici NTSTATUS seguenti.

Codice restituito Descrizione
STATUS_SUCCESS La struttura del clone profondo NET_BUFFER_LIST è stata allocata correttamente.
Altri codici di stato Si è verificato un errore.

Commenti

Un driver callout chiama la funzione FwpsAllocateDeepCloneNetBufferList0 per allocare una struttura di clonazione profonda NET_BUFFER_LIST di una struttura NET_BUFFER_LIST esistente.

Questa funzione è un wrapper intorno alla funzione NdisAllocateCloneNetBufferList , ma è specializzata per l'uso da parte delle funzioni di inserimento dei pacchetti WFP.

Se la struttura di clonazione profonda NET_BUFFER_LIST deve avere attributi associati a un pool specifico, il driver di callout deve specificare l'handle del pool nel parametro NetBufferListPoolHandle o NetBufferPoolHandle. Se questi parametri sono NULL, viene usato il pool predefinito preallocato da NDIS.

La struttura di NET_BUFFER_LIST clonazione profonda descrive gli stessi dati descritti dalla struttura di NET_BUFFER_LIST originale. La funzione FwpsAllocateDeepCloneNetBufferList0 copia i dati descritti dagli MDL originali in nuovi buffer di dati. La struttura di clonazione NET_BUFFER_LIST include una struttura di NET_BUFFER_LIST_CONTEXT iniziale.

Questa funzione imposta il membro ParentNetBufferListdella struttura diclonazione appena creata NET_BUFFER_LIST per puntare alla struttura NET_BUFFER_LIST padre. Il membro ChildRefCount della struttura padre viene incrementato da 1.

Un driver di callout può modificare la struttura di clonazione NET_BUFFER_LIST e inserirla nello stack di rete al posto della struttura originaleNET_BUFFER_LIST chiamando le funzioni di inserimento dei pacchetti. Dopo che i dati descritti dalla struttura di clonazione NET_BUFFER_LIST sono stati inseriti correttamente nello stack di rete, il callout driver libera la struttura di clonazione NET_BUFFER_LIST chiamando la funzione FwpsFreeCloneNetBufferList0 .

Un driver di callout può inserire o sostituire singoli buffer net (NET_BUFFER) o MDL all'interno del clone profondo NET_BUFFER_LIST. Il driver deve annullare queste modifiche prima di chiamare la funzione FwpsFreeCloneNetBufferList0 .

Linee guida per la gestione dei pacchetti clonati

Un driver di callout non deve contenere pacchetti clonati in modo indefinito. Un pacchetto clonato può interferire con le operazioni di risparmio energia in un computer inattiva.

L'uso previsto per i pacchetti clonati profondi in WFP consiste nell'ottenere chiarimenti da un'applicazione in modalità utente o da un'altra operazione relativamente veloce che richiede un pacchetto indipendente dall'originale. Il driver di callout non deve contenere pacchetti clonati durante l'attesa dell'input dell'utente, l'autorizzazione del servizio Web o qualsiasi altra operazione che potrebbe richiedere un periodo di tempo arbitrario.

I driver di callout devono sempre restituire pacchetti mantenuti il più rapidamente possibile.

Requisiti

Requisito Valore
Client minimo supportato Build WIP 25324
Piattaforma di destinazione Universale
Intestazione fwpsk.h (includere Fwpsk.h)
Libreria Fwpkclnt.lib
IRQL <= DISPATCH_LEVEL

Vedi anche

FwpsFreeCloneNetBufferList0

NET_BUFFER

NET_BUFFER_LIST

NET_BUFFER_LIST_CONTEXT

NdisAllocateNetBufferListPool

NdisAllocateNetBufferPool

Funzioni di inserimento pacchetti