for (;;) {
if (!Buffer)
- return -1;
+ return 0xFFFFFFFF;
NdisQueryBuffer(Buffer, (PVOID)Data, Size);
NDIS_DbgPrint(MAX_TRACE, ("DstBuffer (0x%X) DstOffset (0x%X) SrcData (0x%X) Length (%d)\n", DstBuffer, DstOffset, SrcData, Length));
/* Skip DstOffset bytes in the destination buffer chain */
- if (SkipToOffset(DstBuffer, DstOffset, &DstData, &DstSize) == -1)
+ if (SkipToOffset(DstBuffer, DstOffset, &DstData, &DstSize) == 0xFFFFFFFF)
return 0;
/* Start copying the data */
NDIS_DbgPrint(MAX_TRACE, ("DstData 0x%X SrcBuffer 0x%X SrcOffset 0x%X Length %d\n",DstData,SrcBuffer, SrcOffset, Length));
/* Skip SrcOffset bytes in the source buffer chain */
- if (SkipToOffset(SrcBuffer, SrcOffset, &SrcData, &SrcSize) == -1)
+ if (SkipToOffset(SrcBuffer, SrcOffset, &SrcData, &SrcSize) == 0xFFFFFFFF)
return 0;
/* Start copying the data */
/* Skip DstOffset bytes in the destination buffer chain */
NdisQueryBuffer(DstBuffer, (PVOID)&DstData, &DstSize);
- if (SkipToOffset(DstBuffer, DstOffset, &DstData, &DstSize) == -1)
+ if (SkipToOffset(DstBuffer, DstOffset, &DstData, &DstSize) == 0xFFFFFFFF)
return 0;
/* Skip SrcOffset bytes in the source packet */
NdisGetFirstBufferFromPacket(SrcPacket, &SrcBuffer, (PVOID)&SrcData, &SrcSize, &Total);
- if (SkipToOffset(SrcBuffer, SrcOffset, &SrcData, &SrcSize) == -1)
+ if (SkipToOffset(SrcBuffer, SrcOffset, &SrcData, &SrcSize) == 0xFFFFFFFF)
return 0;
/* Copy the data */
for (Total = 0;;) {
NDIS_DbgPrint(MAX_TRACE, ("Status (0x%X) Packet (0x%X) PoolHandle (0x%X).\n",
Status, Packet, PoolHandle));
+ if (Pool == NULL)
+ {
+ *Status = NDIS_STATUS_FAILURE;
+ return;
+ }
+
KeAcquireSpinLock(&Pool->SpinLock.SpinLock, &OldIrql);
if (Pool->FreeList) {
* ProtocolReservedLength = Size of protocol reserved area in bytes
*/
{
- PNDIS_PACKET_POOL Pool;
- UINT Size, Length, i;
- PNDIS_PACKET Packet, NextPacket;
-
- NDIS_DbgPrint(MAX_TRACE, ("Status (0x%X) PoolHandle (0x%X) "
- "NumberOfDescriptors (%d) ProtocolReservedLength (%d).\n",
- Status, PoolHandle, NumberOfDescriptors, ProtocolReservedLength));
-
- Length = sizeof(NDIS_PACKET) + ProtocolReservedLength;
- Size = sizeof(NDIS_PACKET_POOL) + Length * NumberOfDescriptors;
-
- Pool = ExAllocatePool(NonPagedPool, Size);
- if (Pool) {
- KeInitializeSpinLock(&Pool->SpinLock.SpinLock);
- Pool->PacketLength = Length;
-
- if (NumberOfDescriptors > 0) {
- Packet = (PNDIS_PACKET)&Pool->Buffer;
- Pool->FreeList = Packet;
-
- NextPacket = (PNDIS_PACKET)((ULONG_PTR)Packet + Length);
- for (i = 1; i < NumberOfDescriptors; i++) {
- Packet->Private.Head = (PNDIS_BUFFER)NextPacket;
- Packet = NextPacket;
- NextPacket = (PNDIS_PACKET)((ULONG_PTR)Packet + Length);
- }
- Packet->Private.Head = NULL;
- } else
- Pool->FreeList = NULL;
-
- *Status = NDIS_STATUS_SUCCESS;
- *PoolHandle = (PNDIS_HANDLE)Pool;
- } else
- *Status = NDIS_STATUS_RESOURCES;
+ NdisAllocatePacketPoolEx(
+ Status,
+ PoolHandle,
+ NumberOfDescriptors,
+ 0,
+ ProtocolReservedLength);
}
* NDIS 5.0
*/
{
- UNIMPLEMENTED
+ PNDIS_PACKET_POOL Pool;
+ UINT Size, Length, i;
+ PNDIS_PACKET Packet, NextPacket;
+
+ NDIS_DbgPrint(MAX_TRACE, ("Status (0x%X) PoolHandle (0x%X) "
+ "NumberOfDescriptors (%d) ProtocolReservedLength (%d).\n",
+ Status, PoolHandle, NumberOfDescriptors, ProtocolReservedLength));
+
+ if (NumberOfDescriptors > 0xffff)
+ {
+ *Status = NDIS_STATUS_RESOURCES;
+ }
+ else
+ {
+ NumberOfDescriptors += NumberOfOverflowDescriptors;
+ if (NumberOfDescriptors > 0xffff)
+ {
+ NumberOfDescriptors = 0xffff;
+ }
+
+ Length = sizeof(NDIS_PACKET) + ProtocolReservedLength;
+ Size = sizeof(NDIS_PACKET_POOL) + Length * NumberOfDescriptors;
+
+ Pool = ExAllocatePool(NonPagedPool, Size);
+ if (Pool)
+ {
+ KeInitializeSpinLock(&Pool->SpinLock.SpinLock);
+ Pool->PacketLength = Length;
+
+ if (NumberOfDescriptors > 0)
+ {
+ Packet = (PNDIS_PACKET)&Pool->Buffer;
+ Pool->FreeList = Packet;
+
+ NextPacket = (PNDIS_PACKET)((ULONG_PTR)Packet + Length);
+ for (i = 1; i < NumberOfDescriptors; i++)
+ {
+ Packet->Private.Head = (PNDIS_BUFFER)NextPacket;
+ Packet = NextPacket;
+ NextPacket = (PNDIS_PACKET)((ULONG_PTR)Packet + Length);
+ }
+ Packet->Private.Head = NULL;
+ }
+ else
+ Pool->FreeList = NULL;
+
+ *Status = NDIS_STATUS_SUCCESS;
+ *PoolHandle = (PNDIS_HANDLE)Pool;
+ } else
+ *Status = NDIS_STATUS_RESOURCES;
+ }
}
/* Skip DestinationOffset bytes in the destination packet */
NdisGetFirstBufferFromPacket(Destination, &DstBuffer, (PVOID)&DstData, &DstSize, &Total);
- if (SkipToOffset(DstBuffer, DestinationOffset, &DstData, &DstSize) == -1)
+ if (SkipToOffset(DstBuffer, DestinationOffset, &DstData, &DstSize) == 0xFFFFFFFF)
return;
/* Skip SourceOffset bytes in the source packet */
NdisGetFirstBufferFromPacket(Source, &SrcBuffer, (PVOID)&SrcData, &SrcSize, &Total);
- if (SkipToOffset(SrcBuffer, SourceOffset, &SrcData, &SrcSize) == -1)
+ if (SkipToOffset(SrcBuffer, SourceOffset, &SrcData, &SrcSize) == 0xFFFFFFFF)
return;
/* Copy the data */