[PATCH v7 0/1] MR1282: ntoskrnl.exe: Implement ExInterlockedInsertTailList.
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. https://gitlab.winehq.org/wine/wine/-/merge_requests/1282
From: Etaash Mathamsetty <etaash.mathamsetty(a)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.@) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/1282
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?
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/1282#note_17089
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. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/1282#note_17090
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
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/1282#note_17285
participants (3)
-
Etaash Mathamsetty -
Etaash Mathamsetty (@etaash.mathamsetty) -
Zebediah Figura (@zfigura)