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