Jacek Caban : ntoskrnl.exe: Implement PsGetProcessId.

Alexandre Julliard julliard at winehq.org
Mon Apr 29 16:08:50 CDT 2019


Module: wine
Branch: master
Commit: eb1146a50056b7b4b4f1f44be0e71e97f8ba2c80
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=eb1146a50056b7b4b4f1f44be0e71e97f8ba2c80

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Apr 29 16:01:34 2019 +0200

ntoskrnl.exe: Implement PsGetProcessId.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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*);




More information about the wine-cvs mailing list