+/*
+ * @implemented
+ */
+VOID
+EXPORT
+NdisReturnPackets(
+ IN PNDIS_PACKET *PacketsToReturn,
+ IN UINT NumberOfPackets)
+/*
+ * FUNCTION: Releases ownership of one or more packets
+ * ARGUMENTS:
+ * PacketsToReturn = Pointer to an array of pointers to packet descriptors
+ * NumberOfPackets = Number of pointers in descriptor pointer array
+ */
+{
+ UINT i;
+ PLOGICAL_ADAPTER Adapter;
+ KIRQL OldIrql;
+
+ NDIS_DbgPrint(MID_TRACE, ("Returning %d packets\n", NumberOfPackets));
+
+ for (i = 0; i < NumberOfPackets; i++)
+ {
+ PacketsToReturn[i]->WrapperReserved[0]--;
+ if (PacketsToReturn[i]->WrapperReserved[0] == 0)
+ {
+ Adapter = (PVOID)(ULONG_PTR)PacketsToReturn[i]->Reserved[1];
+
+ NDIS_DbgPrint(MAX_TRACE, ("Freeing packet %d (adapter = 0x%p)\n", i, Adapter));
+
+ KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
+ Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.ReturnPacketHandler(
+ Adapter->NdisMiniportBlock.MiniportAdapterContext,
+ PacketsToReturn[i]);
+ KeLowerIrql(OldIrql);
+ }
+ }
+}\f