mirror of
https://github.com/reactos/reactos.git
synced 2024-10-21 21:34:17 +00:00
- Implement NdisDprAllocatePacket
svn path=/branches/aicom-network-fixes/; revision=36190
This commit is contained in:
parent
c875c6ffac
commit
08c2fa4ccb
|
@ -694,7 +694,7 @@ NdisCopyFromPacketToPacket(
|
|||
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
* @implemented
|
||||
*/
|
||||
VOID
|
||||
EXPORT
|
||||
|
@ -710,7 +710,37 @@ NdisDprAllocatePacket(
|
|||
* PoolHandle = Handle returned by NdisAllocatePacketPool
|
||||
*/
|
||||
{
|
||||
*Status = NDIS_STATUS_FAILURE;
|
||||
PNDIS_PACKET Temp;
|
||||
PNDISI_PACKET_POOL Pool = (PNDISI_PACKET_POOL)PoolHandle;
|
||||
|
||||
NDIS_DbgPrint(MAX_TRACE, ("Status (0x%X) Packet (0x%X) PoolHandle (0x%X).\n",
|
||||
Status, Packet, PoolHandle));
|
||||
|
||||
*Packet = NULL;
|
||||
|
||||
if (Pool == NULL)
|
||||
{
|
||||
*Status = NDIS_STATUS_FAILURE;
|
||||
return;
|
||||
}
|
||||
|
||||
KeAcquireSpinLockAtDpcLevel(&Pool->SpinLock.SpinLock);
|
||||
|
||||
if (Pool->FreeList) {
|
||||
Temp = Pool->FreeList;
|
||||
Pool->FreeList = (PNDIS_PACKET)Temp->Private.Head;
|
||||
|
||||
KeReleaseSpinLockFromDpcLevel(&Pool->SpinLock.SpinLock);
|
||||
|
||||
RtlZeroMemory(&Temp->Private, sizeof(NDIS_PACKET_PRIVATE));
|
||||
Temp->Private.Pool = Pool;
|
||||
|
||||
*Packet = Temp;
|
||||
*Status = NDIS_STATUS_SUCCESS;
|
||||
} else {
|
||||
*Status = NDIS_STATUS_RESOURCES;
|
||||
KeReleaseSpinLockFromDpcLevel(&Pool->SpinLock.SpinLock);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue