Module: wine Branch: master Commit: ca1c1534223ea58b5a0f16d5ee4fcabfcd4e6946 URL: https://source.winehq.org/git/wine.git/?a=commit;h=ca1c1534223ea58b5a0f16d5e...
Author: Zebediah Figura z.figura12@gmail.com Date: Wed Aug 21 23:16:54 2019 -0500
ntoskrnl.exe: Implement IoGetRequestorProcess().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47623 Signed-off-by: Zebediah Figura z.figura12@gmail.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ntoskrnl.exe/ntoskrnl.c | 9 +++++++++ dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 2 +- dlls/ntoskrnl.exe/tests/driver.c | 2 ++ include/ddk/ntifs.h | 1 + 4 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c index a3dd7b9..18b17f8 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/ntoskrnl.c @@ -3911,3 +3911,12 @@ ULONG WINAPI ExSetTimerResolution(ULONG time, BOOLEAN set_resolution) FIXME("stub: %u %d\n", time, set_resolution); return KeQueryTimeIncrement(); } + +/*********************************************************************** + * IoGetRequestorProcess (NTOSKRNL.EXE.@) + */ +PEPROCESS WINAPI IoGetRequestorProcess(IRP *irp) +{ + TRACE("irp %p.\n", irp); + return irp->Tail.Overlay.Thread->kthread.process; +} diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec index 88c1a06..ddc3f72 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec +++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec @@ -406,7 +406,7 @@ @ stub IoGetInitialStack @ stub IoGetLowerDeviceObject @ stdcall IoGetRelatedDeviceObject(ptr) -@ stub IoGetRequestorProcess +@ stdcall IoGetRequestorProcess(ptr) @ stub IoGetRequestorProcessId @ stub IoGetRequestorSessionId @ stdcall IoGetStackLimits(ptr ptr) diff --git a/dlls/ntoskrnl.exe/tests/driver.c b/dlls/ntoskrnl.exe/tests/driver.c index 6ab3c62..0506011 100644 --- a/dlls/ntoskrnl.exe/tests/driver.c +++ b/dlls/ntoskrnl.exe/tests/driver.c @@ -225,6 +225,8 @@ static void test_irp_struct(IRP *irp, DEVICE_OBJECT *device) ok(!irp->UserEvent, "UserEvent = %p\n", irp->UserEvent); ok(irp->Tail.Overlay.Thread == (PETHREAD)KeGetCurrentThread(), "IRP thread is not the current thread\n"); + + ok(IoGetRequestorProcess(irp) == IoGetCurrentProcess(), "processes didn't match\n"); }
static void test_mdl_map(void) diff --git a/include/ddk/ntifs.h b/include/ddk/ntifs.h index b287b06..39636e8 100644 --- a/include/ddk/ntifs.h +++ b/include/ddk/ntifs.h @@ -131,6 +131,7 @@ typedef struct _FS_FILTER_CALLBACKS
BOOLEAN WINAPI FsRtlIsNameInExpression(PUNICODE_STRING, PUNICODE_STRING, BOOLEAN, PWCH); DEVICE_OBJECT * WINAPI IoGetAttachedDevice(DEVICE_OBJECT*); +PEPROCESS WINAPI IoGetRequestorProcess(IRP*); NTSTATUS WINAPI ObOpenObjectByPointer(void*,ULONG,PACCESS_STATE,ACCESS_MASK,POBJECT_TYPE,KPROCESSOR_MODE,HANDLE*); NTSTATUS WINAPI ObQueryNameString(PVOID,POBJECT_NAME_INFORMATION,ULONG,PULONG); BOOLEAN WINAPI PsIsSystemThread(PETHREAD);