Module: wine Branch: master Commit: eb1146a50056b7b4b4f1f44be0e71e97f8ba2c80 URL: https://source.winehq.org/git/wine.git/?a=commit;h=eb1146a50056b7b4b4f1f44be...
Author: Jacek Caban jacek@codeweavers.com Date: Mon Apr 29 16:01:34 2019 +0200
ntoskrnl.exe: Implement PsGetProcessId.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ntoskrnl.exe/ntoskrnl.c | 20 ++++++++++---------- dlls/ntoskrnl.exe/ntoskrnl_private.h | 4 +++- dlls/ntoskrnl.exe/tests/driver.c | 2 ++ include/ddk/ntddk.h | 1 + 4 files changed, 16 insertions(+), 11 deletions(-)
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c index 48e9656..9d78fa7 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/ntoskrnl.c @@ -2462,6 +2462,7 @@ static void *create_process_object( HANDLE handle )
process->header.Type = 3; process->header.WaitListHead.Blink = INVALID_HANDLE_VALUE; /* mark as kernel object */ + NtQueryInformationProcess( handle, ProcessBasicInformation, &process->info, sizeof(process->info), NULL ); return process; }
@@ -2503,6 +2504,15 @@ NTSTATUS WINAPI PsLookupProcessByProcessId( HANDLE processid, PEPROCESS *process return status; }
+/********************************************************************* + * PsGetProcessId (NTOSKRNL.@) + */ +HANDLE WINAPI PsGetProcessId(PEPROCESS process) +{ + TRACE( "%p -> %lx\n", process, process->info.UniqueProcessId ); + return (HANDLE)process->info.UniqueProcessId; +} +
static void *create_thread_object( HANDLE handle ) { @@ -4240,16 +4250,6 @@ void WINAPI ExfUnblockPushLock( EX_PUSH_LOCK *lock, PEX_PUSH_LOCK_WAIT_BLOCK blo }
/********************************************************************* - * PsGetProcessId (NTOSKRNL.@) - */ -HANDLE WINAPI PsGetProcessId(PEPROCESS process) -{ - FIXME("stub: %p\n", process); - - return 0; -} - -/********************************************************************* * FsRtlRegisterFileSystemFilterCallbacks (NTOSKRNL.@) */ NTSTATUS WINAPI FsRtlRegisterFileSystemFilterCallbacks( DRIVER_OBJECT *object, PFS_FILTER_CALLBACKS callbacks) diff --git a/dlls/ntoskrnl.exe/ntoskrnl_private.h b/dlls/ntoskrnl.exe/ntoskrnl_private.h index 1265056..295ff73 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl_private.h +++ b/dlls/ntoskrnl.exe/ntoskrnl_private.h @@ -28,8 +28,10 @@ struct _OBJECT_TYPE void (*release)(void*); /* called when the last reference is released */ };
-struct _EPROCESS { +struct _EPROCESS +{ DISPATCHER_HEADER header; + PROCESS_BASIC_INFORMATION info; };
struct _KTHREAD diff --git a/dlls/ntoskrnl.exe/tests/driver.c b/dlls/ntoskrnl.exe/tests/driver.c index 66fdcaf..0fe7ad3 100644 --- a/dlls/ntoskrnl.exe/tests/driver.c +++ b/dlls/ntoskrnl.exe/tests/driver.c @@ -334,6 +334,8 @@ static void test_currentprocess(void) ret = wait_single(current, 0); ok(ret == STATUS_TIMEOUT, "got %#x\n", ret);
+ ok(PsGetProcessId(current) == PsGetCurrentProcessId(), "process IDs don't match\n"); + thread = PsGetCurrentThread(); ret = wait_single( thread, 0 ); ok(ret == STATUS_TIMEOUT, "got %#x\n", ret); diff --git a/include/ddk/ntddk.h b/include/ddk/ntddk.h index 719ba67..68599bf 100644 --- a/include/ddk/ntddk.h +++ b/include/ddk/ntddk.h @@ -216,6 +216,7 @@ NTSTATUS WINAPI IoRegisterShutdownNotification(PDEVICE_OBJECT); NTSTATUS WINAPI KeExpandKernelStackAndCallout(PEXPAND_STACK_CALLOUT,void*,SIZE_T); void WINAPI KeSetTargetProcessorDpc(PRKDPC,CCHAR); BOOLEAN WINAPI MmIsAddressValid(void *); +HANDLE WINAPI PsGetProcessId(PEPROCESS); NTSTATUS WINAPI PsSetLoadImageNotifyRoutine(PLOAD_IMAGE_NOTIFY_ROUTINE); void WINAPI RtlInitializeGenericTableAvl(PRTL_AVL_TABLE,PRTL_AVL_COMPARE_ROUTINE,PRTL_AVL_ALLOCATE_ROUTINE, PRTL_AVL_FREE_ROUTINE,void *); void WINAPI RtlInsertElementGenericTableAvl(PRTL_AVL_TABLE,void *,ULONG,BOOL*);