Use a work item only for calling KdSystemDebugControl with code 10 (which is Tab + K, or "Enter Kernel Debugger") because sometimes when the system crashes work items do not work anymore. Thanks to Filip for pointing out the problem.
Modified: trunk/reactos/drivers/input/keyboard/keyboard.c

Modified: trunk/reactos/drivers/input/keyboard/keyboard.c
--- trunk/reactos/drivers/input/keyboard/keyboard.c	2005-03-21 12:41:54 UTC (rev 14252)
+++ trunk/reactos/drivers/input/keyboard/keyboard.c	2005-03-21 17:09:06 UTC (rev 14253)
@@ -441,7 +441,7 @@
 
    if (SystemArgument1 == NULL && DoSystemDebug != -1)
      {
-       if (KbdWorkItem != NULL)
+       if (KbdWorkItem != NULL && DoSystemDebug == 10) /* 10 is Tab + K (enter kernel debugger) */
          {
            IoQueueWorkItem(KbdWorkItem, (PIO_WORKITEM_ROUTINE)KbdWorkItemRoutine, DelayedWorkQueue, NULL);
          }