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 |