From 0f0b33c44c55c6e5225c83b9bda66c6ac8704e9c Mon Sep 17 00:00:00 2001 From: Art Yerkes Date: Sat, 29 May 2004 10:45:26 +0000 Subject: [PATCH] NdisQueryPacketLength -- Based in an obvious way on a similar macro. svn path=/trunk/; revision=9539 --- reactos/w32api/include/ddk/ndis.h | 42 +++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/reactos/w32api/include/ddk/ndis.h b/reactos/w32api/include/ddk/ndis.h index 216249df48e..68fc9644f78 100644 --- a/reactos/w32api/include/ddk/ndis.h +++ b/reactos/w32api/include/ddk/ndis.h @@ -2026,6 +2026,48 @@ NdisFreeBuffer( } \ } +/* + * VOID + * NdisQueryPacketLength( + * IN PNDIS_PACKET Packet, + * OUT PUINT PhysicalBufferCount OPTIONAL, + * OUT PUINT BufferCount OPTIONAL, + * OUT PNDIS_BUFFER *FirstBuffer OPTIONAL, + * OUT PUINT TotalPacketLength OPTIONAL); + */ +#define NdisQueryPacketLength(Packet, \ + TotalPacketLength) \ +{ \ + if ((TotalPacketLength)) \ + { \ + if (!(Packet)->Private.ValidCounts) { \ + UINT _Offset; \ + UINT _PacketLength; \ + PNDIS_BUFFER _NdisBuffer; \ + UINT _PhysicalBufferCount = 0; \ + UINT _TotalPacketLength = 0; \ + UINT _Count = 0; \ + \ + for (_NdisBuffer = (Packet)->Private.Head; \ + _NdisBuffer != (PNDIS_BUFFER)NULL; \ + _NdisBuffer = _NdisBuffer->Next) \ + { \ + _PhysicalBufferCount += NDIS_BUFFER_TO_SPAN_PAGES(_NdisBuffer); \ + NdisQueryBufferOffset(_NdisBuffer, &_Offset, &_PacketLength); \ + _TotalPacketLength += _PacketLength; \ + _Count++; \ + } \ + (Packet)->Private.PhysicalCount = _PhysicalBufferCount; \ + (Packet)->Private.TotalLength = _TotalPacketLength; \ + (Packet)->Private.Count = _Count; \ + (Packet)->Private.ValidCounts = TRUE; \ + } \ + \ + if (TotalPacketLength) \ + *((PUINT)TotalPacketLength) = (Packet)->Private.TotalLength; \ + } \ +} + /* * VOID