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 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 clonazione completa NET_BUFFER_LIST.

Valore restituito

La funzione FwpsAllocateDeepCloneNetBufferList0 restituisce uno dei codici NTSTATUS seguenti.

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

Osservazioni

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

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

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

La struttura di clonazione completa NET_BUFFER_LIST descrive gli stessi dati descritti dalla struttura NET_BUFFER_LIST originale. La funzione FwpsAllocateDeepCloneNetBufferList0 copia i dati descritti dagli ELENCHI di dati 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 ParentNetBufferList della struttura NET_BUFFER_LIST clone appena creata in modo che punti alla struttura NET_BUFFER_LIST padre. Il membro childRefCount della struttura padre viene incrementato di 1.

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

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 callout non deve contenere pacchetti clonati per un periodo illimitato. Un pacchetto clonato può interferire con le operazioni di risparmio energia in un computer inattiva.

L'uso previsto per pacchetti clonati profondi nel WFP è ottenere chiarimenti da un'applicazione in modalità utente o da un'altra operazione relativamente veloce che richiede un pacchetto indipendente dall'originale. Il driver 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 una quantità arbitraria di tempo.

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

Fabbisogno

Requisito Valore
client minimo supportato WIP build 25324
piattaforma di destinazione Universale
intestazione fwpsk.h (include Fwpsk.h)
libreria Fwpkclnt.lib
IRQL <= DISPATCH_LEVEL

Vedere anche

FwpsFreeCloneNetBufferList0

NET_BUFFER

NET_BUFFER_LIST

NET_BUFFER_LIST_CONTEXT

NdisAllocateNetBufferListPool

NdisAllocateNetBufferPool

funzioni di inserimento di pacchetti