From 2a92951769be921db460245b163ad280974c854b Mon Sep 17 00:00:00 2001 From: Zebediah Figura Date: Mon, 19 Aug 2019 22:27:48 -0500 Subject: [PATCH] ntoskrnl.exe: Implement IoAcquireRemoveLockEx(). Signed-off-by: Zebediah Figura Signed-off-by: Alexandre Julliard --- dlls/ntoskrnl.exe/ntoskrnl.c | 13 ------------- dlls/ntoskrnl.exe/sync.c | 15 +++++++++++++++ include/ddk/wdm.h | 1 + 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c index 20cee6c7ede..6be59909d43 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/ntoskrnl.c @@ -3050,19 +3050,6 @@ BOOLEAN WINAPI IoSetThreadHardErrorMode(BOOLEAN EnableHardErrors) return FALSE; } -/***************************************************** - * IoAcquireRemoveLockEx (NTOSKRNL.EXE.@) - */ - -NTSTATUS WINAPI IoAcquireRemoveLockEx(PIO_REMOVE_LOCK lock, PVOID tag, - LPCSTR file, ULONG line, ULONG lock_size) -{ - FIXME("(%p, %p, %s, %u, %u): stub\n", lock, tag, debugstr_a(file), line, lock_size); - - return STATUS_NOT_IMPLEMENTED; -} - - /***************************************************** * DllMain */ diff --git a/dlls/ntoskrnl.exe/sync.c b/dlls/ntoskrnl.exe/sync.c index 0b2ca6f6b70..f54fe2a663c 100644 --- a/dlls/ntoskrnl.exe/sync.c +++ b/dlls/ntoskrnl.exe/sync.c @@ -1209,3 +1209,18 @@ void WINAPI IoInitializeRemoveLockEx( IO_REMOVE_LOCK *lock, ULONG tag, lock->Common.Removed = FALSE; lock->Common.IoCount = 0; } + +/*********************************************************************** + * IoAcquireRemoveLockEx (NTOSKRNL.EXE.@) + */ +NTSTATUS WINAPI IoAcquireRemoveLockEx( IO_REMOVE_LOCK *lock, void *tag, + const char *file, ULONG line, ULONG size ) +{ + TRACE("lock %p, tag %p, file %s, line %u, size %u.\n", lock, tag, debugstr_a(file), line, size); + + if (lock->Common.Removed) + return STATUS_DELETE_PENDING; + + InterlockedIncrement( &lock->Common.IoCount ); + return STATUS_SUCCESS; +} diff --git a/include/ddk/wdm.h b/include/ddk/wdm.h index 864c0c919b0..da200c510dd 100644 --- a/include/ddk/wdm.h +++ b/include/ddk/wdm.h @@ -1565,6 +1565,7 @@ void WINAPI ExReleaseResourceForThreadLite(ERESOURCE*,ERESOURCE_THREAD); ULONG WINAPI ExSetTimerResolution(ULONG,BOOLEAN); void WINAPI IoAcquireCancelSpinLock(KIRQL*); +NTSTATUS WINAPI IoAcquireRemoveLockEx(IO_REMOVE_LOCK*,void*,const char*,ULONG, ULONG); NTSTATUS WINAPI IoAllocateDriverObjectExtension(PDRIVER_OBJECT,PVOID,ULONG,PVOID*); PVOID WINAPI IoAllocateErrorLogEntry(PVOID,UCHAR); PIRP WINAPI IoAllocateIrp(CCHAR,BOOLEAN);