else
    {
        /* System Thread */
        Thread->StartAddress = StartRoutine;
        PspSetCrossThreadFlag(Thread, CT_SYSTEM_THREAD_BIT);

Looks good to me.

And CT_SYSTEM_THREAD_BIT is defined to 0x10 which is correct:

    union
    {
        struct
        {
           ULONG Terminated:1;
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
           ULONG ThreadInserted:1;
#else
           ULONG DeadThread:1;
#endif
           ULONG HideFromDebugger:1;
           ULONG ActiveImpersonationInfo:1;
           ULONG SystemThread:1;


so your patch was correct and should be re-applied.

On 12-Aug-08, at 3:22 PM, sginsberg@svn.reactos.org wrote:

Author: sginsberg
Date: Tue Aug 12 17:22:51 2008
New Revision: 35294

URL: http://svn.reactos.org/svn/reactos?rev=35294&view=rev
Log:
- Temporarily revert my last change. We don't set the SystemThread flag appropriately and it is always zero

Modified:
   trunk/reactos/ntoskrnl/ps/kill.c

Modified: trunk/reactos/ntoskrnl/ps/kill.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ps/kill.c?rev=35294&r1=35293&r2=35294&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/ps/kill.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/ps/kill.c [iso-8859-1] Tue Aug 12 17:22:51 2008
@@ -1086,7 +1086,7 @@
    PETHREAD Thread = PsGetCurrentThread();

    /* Make sure this is a system thread */
-    if (!Thread->SystemThread) return STATUS_INVALID_PARAMETER;
+    if (Thread->SystemThread) return STATUS_INVALID_PARAMETER;

    /* Terminate it for real */
    return PspTerminateThreadByPointer(Thread, ExitStatus, TRUE);


Best regards,
Alex Ionescu