Extracting all network data from Net Buffer

Hi all. Who can help me to extract all network data from net buffer (from inside NDIS filter driver) . Do I need copy unused data space also, or it is enough to copy only used data space. Is it right?
ULONG count;
ULONG offset = NET_BUFFER_DATA_OFFSET(pNB);
PMDL pMdl = NET_BUFFER_FIRST_MDL(pNB);
while (offset >= MmGetMdlByteCount(pMdl)) { offset -= MmGetMdlByteCount(pMdl); pMdl = pMdl->Next; }
if (MmGetMdlByteCount(pMdl) - offset <= NET_BUFFER_DATA_LENGTH(pNB))
count = MmGetMdlByteCount(pMdl) - offset;
else
count = NET_BUFFER_DATA_LENGTH(pNB);
NdisMoveMemory((PUCHAR)pFilter->pIrpSend[nSend]->AssociatedIrp.SystemBuffer, (PUCHAR)MmGetMdlVirtualAddress(pMdl) + offset, count);

                pMdl = pMdl->Next;
                offset = NET_BUFFER_DATA_LENGTH(pNB) - count;

                while (pMdl) {
                    if (offset < MmGetMdlByteCount(pMdl)) {
                        NdisMoveMemory((PUCHAR)pFilter->pIrpSend[nSend]->AssociatedIrp.SystemBuffer + count, (PUCHAR)MmGetMdlVirtualAddress(pMdl), offset);
                        count += offset;
                        break;
                    }  
                    NdisMoveMemory((PUCHAR)pFilter->pIrpSend[nSend]->AssociatedIrp.SystemBuffer + count, (PUCHAR)MmGetMdlVirtualAddress(pMdl), MmGetMdlByteCount(pMdl));
                    count += MmGetMdlByteCount(pMdl);
                    offset -= MmGetMdlByteCount(pMdl);

                    pMdl = pMdl->Next; 
                }

Is there any function for this?
Thank to everyone.