I'm not exactly sure what is calling this function, but it's probably that anti virus I installed to test the KeInitializeGuardedMutex implementation. edit: TkCtrl2k64.sys calls it
-- v7: ntoskrnl.exe: Implement ExInterlockedInsertTailList.
From: Etaash Mathamsetty etaash.mathamsetty@gmail.com
--- dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 2 +- dlls/ntoskrnl.exe/sync.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-)
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec index 0a484829ca3..23770e54367 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec +++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec @@ -167,7 +167,7 @@ @ stub ExInterlockedExtendZone @ stub ExInterlockedIncrementLong @ stub ExInterlockedInsertHeadList -@ stub ExInterlockedInsertTailList +@ stdcall ExInterlockedInsertTailList(ptr ptr ptr) @ stub ExInterlockedPopEntryList @ stub ExInterlockedPushEntryList @ stdcall ExInterlockedRemoveHeadList(ptr ptr) diff --git a/dlls/ntoskrnl.exe/sync.c b/dlls/ntoskrnl.exe/sync.c index d9b5726b920..3ad255b1211 100644 --- a/dlls/ntoskrnl.exe/sync.c +++ b/dlls/ntoskrnl.exe/sync.c @@ -778,6 +778,34 @@ LIST_ENTRY * WINAPI ExInterlockedRemoveHeadList( LIST_ENTRY *list, KSPIN_LOCK *l return ret; }
+/*********************************************************************** + * ExInterlockedInsertTailList (NTOSKRNL.EXE.@) + */ +PLIST_ENTRY WINAPI ExInterlockedInsertTailList( PLIST_ENTRY head, PLIST_ENTRY entry, PKSPIN_LOCK lock ) +{ + PLIST_ENTRY ret; + KIRQL irql; + + TRACE( "(%p %p %p)\n", head, entry, lock ); + + if ( !head || !entry || !lock ) + return NULL; + + KeAcquireSpinLock( lock, &irql ); + + if ( IsListEmpty(head) ) + { + KeReleaseSpinLock( lock, irql ); + return NULL; + } + + ret = head->Blink; + InsertTailList( head, entry ); + + KeReleaseSpinLock( lock, irql ); + + return ret; +}
/*********************************************************************** * InterlockedPopEntrySList (NTOSKRNL.EXE.@)
Zebediah Figura (@zfigura) commented about dlls/ntoskrnl.exe/sync.c:
+{
- PLIST_ENTRY ret;
- KIRQL irql;
- TRACE( "(%p %p %p)\n", head, entry, lock );
- if ( !head || !entry || !lock )
return NULL;
- KeAcquireSpinLock( lock, &irql );
- if ( IsListEmpty(head) )
- {
KeReleaseSpinLock( lock, irql );
return NULL;
- }
So... if the list was empty we don't insert the item? Are you sure that's right?
Zebediah Figura (@zfigura) commented about dlls/ntoskrnl.exe/sync.c:
return ret;
}
+/***********************************************************************
ExInterlockedInsertTailList (NTOSKRNL.EXE.@)
- */
+PLIST_ENTRY WINAPI ExInterlockedInsertTailList( PLIST_ENTRY head, PLIST_ENTRY entry, PKSPIN_LOCK lock ) +{
- PLIST_ENTRY ret;
- KIRQL irql;
Please try to avoid P* types in new code.
On Tue Nov 22 22:56:44 2022 +0000, Zebediah Figura wrote:
So... if the list was empty we don't insert the item? Are you sure that's right?
no that's not right, it was right before when I checked for a null head->blink and head->flink, I think it's probably best to check for that instead