diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c index 89f76742931..dbadacc125e 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/ntoskrnl.c @@ -2688,6 +2688,15 @@ HANDLE WINAPI PsGetThreadId(PETHREAD thread) return thread->kthread.id.UniqueThread; } +/********************************************************************* + * PsGetThreadProcessId (NTOSKRNL.@) + */ +HANDLE WINAPI PsGetThreadProcessId( PETHREAD thread ) +{ + TRACE( "%p -> %p\n", thread, thread->kthread.id.UniqueProcess ); + return thread->kthread.id.UniqueProcess; +} + /*********************************************************************** * KeInsertQueue (NTOSKRNL.EXE.@) */ diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec index 0105afbe95a..202e9198b7e 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec +++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec @@ -902,7 +902,7 @@ @ stub PsGetThreadHardErrorsAreDisabled @ stdcall PsGetThreadId(ptr) @ stub PsGetThreadProcess -@ stub PsGetThreadProcessId +@ stdcall PsGetThreadProcessId(ptr) @ stub PsGetThreadSessionId @ stub PsGetThreadTeb @ stub PsGetThreadWin32Thread diff --git a/dlls/ntoskrnl.exe/tests/driver.c b/dlls/ntoskrnl.exe/tests/driver.c index 1ad468e3623..688c60814ac 100644 --- a/dlls/ntoskrnl.exe/tests/driver.c +++ b/dlls/ntoskrnl.exe/tests/driver.c @@ -346,6 +346,7 @@ static void test_current_thread(BOOL is_system) ok(current != *pPsInitialSystemProcess, "current == PsInitialSystemProcess\n"); ok(PsGetProcessId(current) == PsGetCurrentProcessId(), "process IDs don't match\n"); + ok(PsGetThreadProcessId((PETHREAD)KeGetCurrentThread()) == PsGetCurrentProcessId(), "process IDs don't match\n"); thread = PsGetCurrentThread(); ret = wait_single( thread, 0 ); diff --git a/include/ddk/ntddk.h b/include/ddk/ntddk.h index 74df91909cb..d6ecbae9740 100644 --- a/include/ddk/ntddk.h +++ b/include/ddk/ntddk.h @@ -221,6 +221,7 @@ void WINAPI KeSetTargetProcessorDpc(PRKDPC,CCHAR); BOOLEAN WINAPI MmIsAddressValid(void *); HANDLE WINAPI PsGetProcessId(PEPROCESS); HANDLE WINAPI PsGetThreadId(PETHREAD); +HANDLE WINAPI PsGetThreadProcessId(PETHREAD); NTSTATUS WINAPI PsSetCreateProcessNotifyRoutine(PCREATE_PROCESS_NOTIFY_ROUTINE,BOOLEAN); NTSTATUS WINAPI PsSetCreateProcessNotifyRoutineEx(PCREATE_PROCESS_NOTIFY_ROUTINE_EX,BOOLEAN); NTSTATUS WINAPI PsSetCreateThreadNotifyRoutine(PCREATE_THREAD_NOTIFY_ROUTINE);