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.@)