Derek Lesho : ntoskrnl.exe: Implement PsIsSystemThread.

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


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

Author: Derek Lesho <dereklesho52 at gmail.com>
Date:   Mon Apr 29 16:01:20 2019 +0200

ntoskrnl.exe: Implement PsIsSystemThread.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ntoskrnl.exe/ntoskrnl.c         | 9 +++++++++
 dlls/ntoskrnl.exe/ntoskrnl.exe.spec  | 2 +-
 dlls/ntoskrnl.exe/ntoskrnl_private.h | 5 +++++
 dlls/ntoskrnl.exe/tests/driver.c     | 2 ++
 include/ddk/ntifs.h                  | 1 +
 5 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c
index d7f57ba..48e9656 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.c
+++ b/dlls/ntoskrnl.exe/ntoskrnl.c
@@ -3057,6 +3057,15 @@ HANDLE WINAPI PsGetCurrentThreadId(void)
 
 
 /***********************************************************************
+ *           PsIsSystemThread   (NTOSKRNL.EXE.@)
+ */
+BOOLEAN WINAPI PsIsSystemThread(PETHREAD thread)
+{
+    return thread->kthread.process == PsInitialSystemProcess;
+}
+
+
+/***********************************************************************
  *           PsGetVersion   (NTOSKRNL.EXE.@)
  */
 BOOLEAN WINAPI PsGetVersion(ULONG *major, ULONG *minor, ULONG *build, UNICODE_STRING *version )
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
index 7a80206..26d7570 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
+++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
@@ -908,7 +908,7 @@
 @ stdcall PsImpersonateClient(ptr ptr long long long)
 @ extern PsInitialSystemProcess
 @ stub PsIsProcessBeingDebugged
-@ stub PsIsSystemThread
+@ stdcall PsIsSystemThread(ptr)
 @ stub PsIsThreadImpersonating
 @ stub PsIsThreadTerminating
 @ stub PsJobType
diff --git a/dlls/ntoskrnl.exe/ntoskrnl_private.h b/dlls/ntoskrnl.exe/ntoskrnl_private.h
index e580522..1265056 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl_private.h
+++ b/dlls/ntoskrnl.exe/ntoskrnl_private.h
@@ -39,6 +39,11 @@ struct _KTHREAD
     CLIENT_ID id;
 };
 
+struct _ETHREAD
+{
+    struct _KTHREAD kthread;
+};
+
 void *alloc_kernel_object( POBJECT_TYPE type, HANDLE handle, SIZE_T size, LONG ref ) DECLSPEC_HIDDEN;
 HANDLE kernel_object_handle( void *obj, unsigned int access ) DECLSPEC_HIDDEN;
 NTSTATUS kernel_object_from_handle( HANDLE handle, POBJECT_TYPE type, void **ret ) DECLSPEC_HIDDEN;
diff --git a/dlls/ntoskrnl.exe/tests/driver.c b/dlls/ntoskrnl.exe/tests/driver.c
index 8dbae9d..66fdcaf 100644
--- a/dlls/ntoskrnl.exe/tests/driver.c
+++ b/dlls/ntoskrnl.exe/tests/driver.c
@@ -337,6 +337,8 @@ static void test_currentprocess(void)
     thread = PsGetCurrentThread();
     ret = wait_single( thread, 0 );
     ok(ret == STATUS_TIMEOUT, "got %#x\n", ret);
+
+    ok(!PsIsSystemThread((PETHREAD)KeGetCurrentThread()), "unexpected system thread\n");
 }
 
 static void sleep(void)
diff --git a/include/ddk/ntifs.h b/include/ddk/ntifs.h
index ec4d1d5..2c61329 100644
--- a/include/ddk/ntifs.h
+++ b/include/ddk/ntifs.h
@@ -131,6 +131,7 @@ typedef struct _FS_FILTER_CALLBACKS
 
 BOOLEAN WINAPI FsRtlIsNameInExpression(PUNICODE_STRING, PUNICODE_STRING, BOOLEAN, PWCH);
 NTSTATUS WINAPI ObQueryNameString(PVOID,POBJECT_NAME_INFORMATION,ULONG,PULONG);
+BOOLEAN WINAPI PsIsSystemThread(PETHREAD);
 NTSTATUS WINAPI PsLookupProcessByProcessId(HANDLE,PEPROCESS*);
 NTSTATUS WINAPI PsLookupThreadByThreadId(HANDLE,PETHREAD*);
 void WINAPI PsRevertToSelf(void);




More information about the wine-cvs mailing list