From 85a3d093290314315386d901cf4a7eb8238fd457 Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Fri, 20 Mar 2015 12:45:33 +0300 Subject: [PATCH] kernel32: Implement GetProcessIdOfThread(). --- ...api-ms-win-core-processthreads-l1-1-0.spec | 2 +- ...api-ms-win-core-processthreads-l1-1-1.spec | 2 +- ...api-ms-win-core-processthreads-l1-1-2.spec | 2 +- dlls/kernel32/kernel32.spec | 2 +- dlls/kernel32/thread.c | 29 +++++++++++++++++++ 5 files changed, 33 insertions(+), 4 deletions(-) diff --git a/dlls/api-ms-win-core-processthreads-l1-1-0/api-ms-win-core-processthreads-l1-1-0.spec b/dlls/api-ms-win-core-processthreads-l1-1-0/api-ms-win-core-processthreads-l1-1-0.spec index 0b16649edff..80a4780d2fa 100644 --- a/dlls/api-ms-win-core-processthreads-l1-1-0/api-ms-win-core-processthreads-l1-1-0.spec +++ b/dlls/api-ms-win-core-processthreads-l1-1-0/api-ms-win-core-processthreads-l1-1-0.spec @@ -16,7 +16,7 @@ @ stdcall GetExitCodeThread(long ptr) kernel32.GetExitCodeThread @ stdcall GetPriorityClass(long) kernel32.GetPriorityClass @ stdcall GetProcessId(long) kernel32.GetProcessId -@ stub GetProcessIdOfThread +@ stdcall GetProcessIdOfThread(long) kernel32.GetProcessIdOfThread @ stdcall GetProcessTimes(long ptr ptr ptr ptr) kernel32.GetProcessTimes @ stdcall GetProcessVersion(long) kernel32.GetProcessVersion @ stdcall GetStartupInfoW(ptr) kernel32.GetStartupInfoW diff --git a/dlls/api-ms-win-core-processthreads-l1-1-1/api-ms-win-core-processthreads-l1-1-1.spec b/dlls/api-ms-win-core-processthreads-l1-1-1/api-ms-win-core-processthreads-l1-1-1.spec index c9054d208bb..adc72842b55 100644 --- a/dlls/api-ms-win-core-processthreads-l1-1-1/api-ms-win-core-processthreads-l1-1-1.spec +++ b/dlls/api-ms-win-core-processthreads-l1-1-1/api-ms-win-core-processthreads-l1-1-1.spec @@ -21,7 +21,7 @@ @ stdcall GetPriorityClass(long) kernel32.GetPriorityClass @ stdcall GetProcessHandleCount(long ptr) kernel32.GetProcessHandleCount @ stdcall GetProcessId(long) kernel32.GetProcessId -@ stub GetProcessIdOfThread +@ stdcall GetProcessIdOfThread(long) kernel32.GetProcessIdOfThread @ stub GetProcessMitigationPolicy @ stdcall GetProcessTimes(long ptr ptr ptr ptr) kernel32.GetProcessTimes @ stdcall GetProcessVersion(long) kernel32.GetProcessVersion diff --git a/dlls/api-ms-win-core-processthreads-l1-1-2/api-ms-win-core-processthreads-l1-1-2.spec b/dlls/api-ms-win-core-processthreads-l1-1-2/api-ms-win-core-processthreads-l1-1-2.spec index 6894ce86e39..830578f5ea9 100644 --- a/dlls/api-ms-win-core-processthreads-l1-1-2/api-ms-win-core-processthreads-l1-1-2.spec +++ b/dlls/api-ms-win-core-processthreads-l1-1-2/api-ms-win-core-processthreads-l1-1-2.spec @@ -21,7 +21,7 @@ @ stdcall GetPriorityClass(long) kernel32.GetPriorityClass @ stdcall GetProcessHandleCount(long ptr) kernel32.GetProcessHandleCount @ stdcall GetProcessId(long) kernel32.GetProcessId -@ stub GetProcessIdOfThread +@ stdcall GetProcessIdOfThread(long) kernel32.GetProcessIdOfThread @ stub GetProcessMitigationPolicy @ stdcall GetProcessPriorityBoost(long ptr) kernel32.GetProcessPriorityBoost @ stdcall GetProcessTimes(long ptr ptr ptr ptr) kernel32.GetProcessTimes diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec index c95c446b4ba..1179af2e728 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec @@ -780,7 +780,7 @@ @ stdcall -norelay GetProcessHeap() @ stdcall GetProcessHeaps(long ptr) @ stdcall GetProcessId(long) -# @ stub GetProcessIdOfThread +@ stdcall GetProcessIdOfThread(long) @ stdcall GetProcessIoCounters(long ptr) # @ stub GetProcessPreferredUILanguages @ stdcall GetProcessPriorityBoost(long ptr) diff --git a/dlls/kernel32/thread.c b/dlls/kernel32/thread.c index 0abfdf11aeb..3dabf948a68 100644 --- a/dlls/kernel32/thread.c +++ b/dlls/kernel32/thread.c @@ -557,6 +557,35 @@ DWORD WINAPI GetThreadId(HANDLE Thread) return HandleToULong(tbi.ClientId.UniqueThread); } +/********************************************************************** + * GetProcessIdOfThread [KERNEL32.@] + * + * Retrieve process identifier given thread belongs to. + * + * PARAMS + * Thread [I] The thread identifier. + * + * RETURNS + * Success: Process identifier + * Failure: 0 + */ +DWORD WINAPI GetProcessIdOfThread(HANDLE Thread) +{ + THREAD_BASIC_INFORMATION tbi; + NTSTATUS status; + + TRACE("(%p)\n", Thread); + + status = NtQueryInformationThread(Thread, ThreadBasicInformation, &tbi, + sizeof(tbi), NULL); + if (status) + { + SetLastError( RtlNtStatusToDosError(status) ); + return 0; + } + + return HandleToULong(tbi.ClientId.UniqueProcess); +} /*********************************************************************** * GetCurrentThread [KERNEL32.@] Gets pseudohandle for current thread