[CLASSPNP] Fix SLIST_ENTRY vs SINGLE_LIST_ENTRY issues

This commit is contained in:
Timo Kreuzer 2019-01-08 05:17:19 +01:00
parent 42730f9373
commit dfd876a96b
3 changed files with 11 additions and 11 deletions

View file

@ -2254,8 +2254,8 @@ VOID NTAPI ServiceTransferRequest(PDEVICE_OBJECT Fdo, PIRP Irp)
PUCHAR bufPtr = MmGetMdlVirtualAddress(Irp->MdlAddress); PUCHAR bufPtr = MmGetMdlVirtualAddress(Irp->MdlAddress);
LARGE_INTEGER targetLocation = currentSp->Parameters.Read.ByteOffset; LARGE_INTEGER targetLocation = currentSp->Parameters.Read.ByteOffset;
PTRANSFER_PACKET pkt; PTRANSFER_PACKET pkt;
SINGLE_LIST_ENTRY pktList; SLIST_ENTRY pktList;
PSINGLE_LIST_ENTRY slistEntry; PSLIST_ENTRY slistEntry;
ULONG numPackets; ULONG numPackets;
//KIRQL oldIrql; //KIRQL oldIrql;
ULONG i; ULONG i;

View file

@ -283,8 +283,8 @@ typedef struct _CLASS_ERROR_LOG_DATA {
typedef struct _TRANSFER_PACKET { typedef struct _TRANSFER_PACKET {
SLIST_ENTRY SlistEntry; // for when in free list (use fast slist)
LIST_ENTRY AllPktsListEntry; // entry in fdoData's static AllTransferPacketsList LIST_ENTRY AllPktsListEntry; // entry in fdoData's static AllTransferPacketsList
SINGLE_LIST_ENTRY SlistEntry; // for when in free list (use fast slist)
PIRP Irp; PIRP Irp;
PDEVICE_OBJECT Fdo; PDEVICE_OBJECT Fdo;
@ -475,25 +475,25 @@ struct _CLASS_PRIVATE_FDO_DATA {
/* /*
* Simple singly-linked-list queuing macros, with no synchronization. * Simple singly-linked-list queuing macros, with no synchronization.
*/ */
static inline VOID SimpleInitSlistHdr(SINGLE_LIST_ENTRY *SListHdr) static inline VOID SimpleInitSlistHdr(SLIST_ENTRY *SListHdr)
{ {
SListHdr->Next = NULL; SListHdr->Next = NULL;
} }
static inline VOID SimplePushSlist(SINGLE_LIST_ENTRY *SListHdr, SINGLE_LIST_ENTRY *SListEntry) static inline VOID SimplePushSlist(SLIST_ENTRY *SListHdr, SLIST_ENTRY *SListEntry)
{ {
SListEntry->Next = SListHdr->Next; SListEntry->Next = SListHdr->Next;
SListHdr->Next = SListEntry; SListHdr->Next = SListEntry;
} }
static inline SINGLE_LIST_ENTRY *SimplePopSlist(SINGLE_LIST_ENTRY *SListHdr) static inline SLIST_ENTRY *SimplePopSlist(SLIST_ENTRY *SListHdr)
{ {
SINGLE_LIST_ENTRY *sListEntry = SListHdr->Next; SLIST_ENTRY *sListEntry = SListHdr->Next;
if (sListEntry){ if (sListEntry){
SListHdr->Next = sListEntry->Next; SListHdr->Next = sListEntry->Next;
sListEntry->Next = NULL; sListEntry->Next = NULL;
} }
return sListEntry; return sListEntry;
} }
static inline BOOLEAN SimpleIsSlistEmpty(SINGLE_LIST_ENTRY *SListHdr) static inline BOOLEAN SimpleIsSlistEmpty(SLIST_ENTRY *SListHdr)
{ {
return (SListHdr->Next == NULL); return (SListHdr->Next == NULL);
} }

View file

@ -240,8 +240,8 @@ VOID NTAPI EnqueueFreeTransferPacket(PDEVICE_OBJECT Fdo, PTRANSFER_PACKET Pkt)
* 1. Immediately snap down to our UPPER threshold. * 1. Immediately snap down to our UPPER threshold.
*/ */
if (fdoData->NumTotalTransferPackets > MaxWorkingSetTransferPackets){ if (fdoData->NumTotalTransferPackets > MaxWorkingSetTransferPackets){
SINGLE_LIST_ENTRY pktList; SLIST_ENTRY pktList;
PSINGLE_LIST_ENTRY slistEntry; PSLIST_ENTRY slistEntry;
PTRANSFER_PACKET pktToDelete; PTRANSFER_PACKET pktToDelete;
DBGTRACE(ClassDebugTrace, ("Exiting stress, block freeing (%d-%d) packets.", fdoData->NumTotalTransferPackets, MaxWorkingSetTransferPackets)); DBGTRACE(ClassDebugTrace, ("Exiting stress, block freeing (%d-%d) packets.", fdoData->NumTotalTransferPackets, MaxWorkingSetTransferPackets));
@ -324,7 +324,7 @@ PTRANSFER_PACKET NTAPI DequeueFreeTransferPacket(PDEVICE_OBJECT Fdo, BOOLEAN All
PFUNCTIONAL_DEVICE_EXTENSION fdoExt = Fdo->DeviceExtension; PFUNCTIONAL_DEVICE_EXTENSION fdoExt = Fdo->DeviceExtension;
PCLASS_PRIVATE_FDO_DATA fdoData = fdoExt->PrivateFdoData; PCLASS_PRIVATE_FDO_DATA fdoData = fdoExt->PrivateFdoData;
PTRANSFER_PACKET pkt; PTRANSFER_PACKET pkt;
PSINGLE_LIST_ENTRY slistEntry; PSLIST_ENTRY slistEntry;
//KIRQL oldIrql; //KIRQL oldIrql;
slistEntry = InterlockedPopEntrySList(&fdoData->FreeTransferPacketsList); slistEntry = InterlockedPopEntrySList(&fdoData->FreeTransferPacketsList);