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