[NTOS:KD/KDBG] Code enhancements for KDBG/KD.
authorHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Sun, 17 Nov 2019 15:44:22 +0000 (16:44 +0100)
committerHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Sun, 17 Nov 2019 22:21:50 +0000 (23:21 +0100)
- Introduce KdpScreenAcquire() / KdpScreenRelease() helpers that allow
  to correctly acquire or release the screen when using INBV for
  "Screen-Mode" debugging.

- Introduce KdpAcquireLock() / KdpReleaseLock() helpers so as to reduce
  the copy-pasted code required when acquiring spin-locks in the KD debug
  logger functions.

- Close the opened KdpLogFileHandle file in the KdpInitDebugLog() logger
  in case we failed to create the logger writer thread.
  Also use explicit kernel-mode handle when opening the log file.

- static-ify some local variables, remove few hardcoded values, and
  minor formatting.

- Correctly define the INIT_FUNCTION's.

ntoskrnl/include/internal/kd.h
ntoskrnl/kd/kdinit.c
ntoskrnl/kd/kdio.c
ntoskrnl/kd64/kdinit.c
ntoskrnl/kdbg/kdb.c

index 162ece5..ef66e2a 100644 (file)
@@ -106,7 +106,7 @@ VOID
 typedef
 VOID
 (NTAPI*PKDP_PRINT_ROUTINE)(
-    LPSTR String,
+    PCHAR String,
     ULONG Length
 );
 
@@ -139,6 +139,12 @@ KdInitSystem(
     PLOADER_PARAMETER_BLOCK LoaderBlock
 );
 
+VOID
+KdpScreenAcquire(VOID);
+
+VOID
+KdpScreenRelease(VOID);
+
 VOID
 NTAPI
 KdpScreenInit(
@@ -155,7 +161,7 @@ KdpSerialInit(
 
 VOID
 NTAPI
-KdpInitDebugLog(
+KdpDebugLogInit(
     struct _KD_DISPATCH_TABLE *DispatchTable,
     ULONG BootPhase
 );
@@ -193,13 +199,6 @@ BOOLEAN
 NTAPI
 KdpDetectConflicts(PCM_RESOURCE_LIST DriverList);
 
-VOID
-NTAPI
-KdpBochsDebugPrint(
-    IN PCH Message,
-    IN ULONG Length
-);
-
 BOOLEAN
 NTAPI
 KdpSafeReadMemory(
index 3e32b16..a73ec17 100644 (file)
@@ -31,7 +31,7 @@ KD_DISPATCH_TABLE DispatchTable[KdMax];
 
 PKDP_INIT_ROUTINE InitRoutines[KdMax] = {KdpScreenInit,
                                          KdpSerialInit,
-                                         KdpInitDebugLog,
+                                         KdpDebugLogInit,
                                          KdpBochsInit,
                                          KdpKdbgInit};
 
@@ -39,9 +39,9 @@ extern ANSI_STRING KdpLogFileName;
 
 /* PRIVATE FUNCTIONS *********************************************************/
 
+INIT_FUNCTION
 PCHAR
 NTAPI
-INIT_FUNCTION
 KdpGetDebugMode(PCHAR Currentp2)
 {
     PCHAR p1, p2 = Currentp2;
@@ -135,9 +135,9 @@ KdpGetDebugMode(PCHAR Currentp2)
     return p2;
 }
 
+INIT_FUNCTION
 VOID
 NTAPI
-INIT_FUNCTION
 KdpCallInitRoutine(ULONG BootPhase)
 {
     PLIST_ENTRY CurrentEntry;
@@ -213,7 +213,7 @@ KdInitSystem(ULONG BootPhase,
         }
         else
         {
-            /* Called from a bugcheck or a re-enable. Unconditionally enable KD */
+            /* Called from a bugcheck or a re-enable. Unconditionally enable KD. */
             KdDebuggerEnabled = TRUE;
         }
 
index 38a1d3f..23b163b 100644 (file)
 /* GLOBALS *******************************************************************/
 
 #define KdpBufferSize  (1024 * 512)
-BOOLEAN KdpLoggingEnabled = FALSE;
-PCHAR KdpDebugBuffer = NULL;
-volatile ULONG KdpCurrentPosition = 0;
-volatile ULONG KdpFreeBytes = 0;
-KSPIN_LOCK KdpDebugLogSpinLock;
-KEVENT KdpLoggerThreadEvent;
-HANDLE KdpLogFileHandle;
+static BOOLEAN KdpLoggingEnabled = FALSE;
+static PCHAR KdpDebugBuffer = NULL;
+static volatile ULONG KdpCurrentPosition = 0;
+static volatile ULONG KdpFreeBytes = 0;
+static KSPIN_LOCK KdpDebugLogSpinLock;
+static KEVENT KdpLoggerThreadEvent;
+static HANDLE KdpLogFileHandle;
 ANSI_STRING KdpLogFileName = RTL_CONSTANT_STRING("\\SystemRoot\\debug.log");
 
-KSPIN_LOCK KdpSerialSpinLock;
+static KSPIN_LOCK KdpSerialSpinLock;
 ULONG  SerialPortNumber = DEFAULT_DEBUG_PORT;
 CPPORT SerialPortInfo   = {0, DEFAULT_DEBUG_BAUD_RATE, 0};
 
-/* Current Port in use. FIXME: Do we support more then one? */
+/* Current Port in use. FIXME: Do we support more than one? */
 ULONG KdpPort;
 
 #define KdpScreenLineLengthDefault 80
-CHAR KdpScreenLineBuffer[KdpScreenLineLengthDefault + 1] = "";
-ULONG KdpScreenLineBufferPos = 0, KdpScreenLineLength = 0;
+static CHAR KdpScreenLineBuffer[KdpScreenLineLengthDefault + 1] = "";
+static ULONG KdpScreenLineBufferPos = 0, KdpScreenLineLength = 0;
 
 const ULONG KdpDmesgBufferSize = 128 * 1024; // 512*1024; // 5*1024*1024;
 PCHAR KdpDmesgBuffer = NULL;
 volatile ULONG KdpDmesgCurrentPosition = 0;
 volatile ULONG KdpDmesgFreeBytes = 0;
 volatile ULONG KdbDmesgTotalWritten = 0;
-KSPIN_LOCK KdpDmesgLogSpinLock;
 volatile BOOLEAN KdbpIsInDmesgMode = FALSE;
+static KSPIN_LOCK KdpDmesgLogSpinLock;
 
 /* UTILITY FUNCTIONS *********************************************************/
 
@@ -57,8 +57,8 @@ volatile BOOLEAN KdbpIsInDmesgMode = FALSE;
  *
  * See also: kd64\kdinit.c
  */
-static SIZE_T
-INIT_FUNCTION
+static INIT_FUNCTION
+SIZE_T
 KdpGetMemorySizeInMBs(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
 {
     PLIST_ENTRY ListEntry;
@@ -98,8 +98,8 @@ KdpGetMemorySizeInMBs(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
 }
 
 /* See also: kd64\kdinit.c */
-static VOID
-INIT_FUNCTION
+static INIT_FUNCTION
+VOID
 KdpPrintBanner(IN SIZE_T MemSizeMBs)
 {
     DPRINT1("-----------------------------------------------------\n");
@@ -109,10 +109,51 @@ KdpPrintBanner(IN SIZE_T MemSizeMBs)
     DPRINT1("ARC Paths: %s %s %s %s\n", KeLoaderBlock->ArcBootDeviceName, KeLoaderBlock->NtHalPathName, KeLoaderBlock->ArcHalDeviceName, KeLoaderBlock->NtBootPathName);
 }
 
-/* FILE DEBUG LOG FUNCTIONS **************************************************/
+/* LOCKING FUNCTIONS *********************************************************/
+
+KIRQL
+NTAPI
+KdpAcquireLock(IN PKSPIN_LOCK SpinLock)
+{
+    KIRQL OldIrql;
+
+    /* Acquire the spinlock without waiting at raised IRQL */
+    while (TRUE)
+    {
+        /* Loop until the spinlock becomes available */
+        while (!KeTestSpinLock(SpinLock));
+
+        /* Spinlock is free, raise IRQL to high level */
+        KeRaiseIrql(HIGH_LEVEL, &OldIrql);
+
+        /* Try to get the spinlock */
+        if (KeTryToAcquireSpinLockAtDpcLevel(SpinLock))
+            break;
+
+        /* Someone else got the spinlock, lower IRQL back */
+        KeLowerIrql(OldIrql);
+    }
+
+    return OldIrql;
+}
 
 VOID
 NTAPI
+KdpReleaseLock(IN PKSPIN_LOCK SpinLock,
+               IN KIRQL OldIrql)
+{
+    /* Release the spinlock */
+    KiReleaseSpinLock(SpinLock);
+    // KeReleaseSpinLockFromDpcLevel(SpinLock);
+
+    /* Restore the old IRQL */
+    KeLowerIrql(OldIrql);
+}
+
+/* FILE DEBUG LOG FUNCTIONS **************************************************/
+
+static VOID
+NTAPI
 KdpLoggerThread(PVOID Context)
 {
     ULONG beg, end, num;
@@ -122,7 +163,7 @@ KdpLoggerThread(PVOID Context)
 
     while (TRUE)
     {
-        KeWaitForSingleObject(&KdpLoggerThreadEvent, 0, KernelMode, FALSE, NULL);
+        KeWaitForSingleObject(&KdpLoggerThreadEvent, Executive, KernelMode, FALSE, NULL);
 
         /* Bug */
         /* Keep KdpCurrentPosition and KdpFreeBytes values in local
@@ -158,32 +199,18 @@ KdpLoggerThread(PVOID Context)
     }
 }
 
-VOID
+static VOID
 NTAPI
-KdpPrintToLogFile(PCH String,
+KdpPrintToLogFile(PCHAR String,
                   ULONG StringLength)
 {
-    ULONG beg, end, num;
     KIRQL OldIrql;
+    ULONG beg, end, num;
 
     if (KdpDebugBuffer == NULL) return;
 
     /* Acquire the printing spinlock without waiting at raised IRQL */
-    while (TRUE)
-    {
-        /* Wait when the spinlock becomes available */
-        while (!KeTestSpinLock(&KdpDebugLogSpinLock));
-
-        /* Spinlock was free, raise IRQL */
-        KeRaiseIrql(HIGH_LEVEL, &OldIrql);
-
-        /* Try to get the spinlock */
-        if (KeTryToAcquireSpinLockAtDpcLevel(&KdpDebugLogSpinLock))
-            break;
-
-        /* Someone else got the spinlock, lower IRQL back */
-        KeLowerIrql(OldIrql);
-    }
+    OldIrql = KdpAcquireLock(&KdpDebugLogSpinLock);
 
     beg = KdpCurrentPosition;
     num = KdpFreeBytes;
@@ -207,21 +234,17 @@ KdpPrintToLogFile(PCH String,
         }
     }
 
-    /* Release spinlock */
-    KiReleaseSpinLock(&KdpDebugLogSpinLock);
-
-    /* Lower IRQL */
-    KeLowerIrql(OldIrql);
+    /* Release the spinlock */
+    KdpReleaseLock(&KdpDebugLogSpinLock, OldIrql);
 
     /* Signal the logger thread */
     if (OldIrql <= DISPATCH_LEVEL && KdpLoggingEnabled)
-        KeSetEvent(&KdpLoggerThreadEvent, 0, FALSE);
+        KeSetEvent(&KdpLoggerThreadEvent, IO_NO_INCREMENT, FALSE);
 }
 
 VOID
 NTAPI
-INIT_FUNCTION
-KdpInitDebugLog(PKD_DISPATCH_TABLE DispatchTable,
+KdpDebugLogInit(PKD_DISPATCH_TABLE DispatchTable,
                 ULONG BootPhase)
 {
     NTSTATUS Status;
@@ -239,12 +262,11 @@ KdpInitDebugLog(PKD_DISPATCH_TABLE DispatchTable,
         KdComPortInUse = NULL;
 
         /* Write out the functions that we support for now */
-        DispatchTable->KdpInitRoutine = KdpInitDebugLog;
+        DispatchTable->KdpInitRoutine = KdpDebugLogInit;
         DispatchTable->KdpPrintRoutine = KdpPrintToLogFile;
 
         /* Register as a Provider */
         InsertTailList(&KdProviders, &DispatchTable->KdProvidersList);
-
     }
     else if (BootPhase == 1)
     {
@@ -272,7 +294,7 @@ KdpInitDebugLog(PKD_DISPATCH_TABLE DispatchTable,
 
         InitializeObjectAttributes(&ObjectAttributes,
                                    &FileName,
-                                   0,
+                                   OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
                                    NULL,
                                    NULL);
 
@@ -291,7 +313,8 @@ KdpInitDebugLog(PKD_DISPATCH_TABLE DispatchTable,
 
         RtlFreeUnicodeString(&FileName);
 
-        if (!NT_SUCCESS(Status)) return;
+        if (!NT_SUCCESS(Status))
+            return;
 
         KeInitializeEvent(&KdpLoggerThreadEvent, SynchronizationEvent, TRUE);
 
@@ -303,8 +326,11 @@ KdpInitDebugLog(PKD_DISPATCH_TABLE DispatchTable,
                                       NULL,
                                       KdpLoggerThread,
                                       NULL);
-
-        if (!NT_SUCCESS(Status)) return;
+        if (!NT_SUCCESS(Status))
+        {
+            NtClose(KdpLogFileHandle);
+            return;
+        }
 
         Priority = 7;
         NtSetInformationThread(ThreadHandle,
@@ -318,28 +344,14 @@ KdpInitDebugLog(PKD_DISPATCH_TABLE DispatchTable,
 
 VOID
 NTAPI
-KdpSerialDebugPrint(LPSTR Message,
+KdpSerialDebugPrint(PCHAR Message,
                     ULONG Length)
 {
+    PCHAR pch = (PCHAR)Message;
     KIRQL OldIrql;
-    PCHAR pch = (PCHAR) Message;
 
     /* Acquire the printing spinlock without waiting at raised IRQL */
-    while (TRUE)
-    {
-        /* Wait when the spinlock becomes available */
-        while (!KeTestSpinLock(&KdpSerialSpinLock));
-
-        /* Spinlock was free, raise IRQL */
-        KeRaiseIrql(HIGH_LEVEL, &OldIrql);
-
-        /* Try to get the spinlock */
-        if (KeTryToAcquireSpinLockAtDpcLevel(&KdpSerialSpinLock))
-            break;
-
-        /* Someone else got the spinlock, lower IRQL back */
-        KeLowerIrql(OldIrql);
-    }
+    OldIrql = KdpAcquireLock(&KdpSerialSpinLock);
 
     /* Output the message */
     while (pch < Message + Length && *pch != '\0')
@@ -352,11 +364,8 @@ KdpSerialDebugPrint(LPSTR Message,
         pch++;
     }
 
-    /* Release spinlock */
-    KiReleaseSpinLock(&KdpSerialSpinLock);
-
-    /* Lower IRQL */
-    KeLowerIrql(OldIrql);
+    /* Release the spinlock */
+    KdpReleaseLock(&KdpSerialSpinLock, OldIrql);
 }
 
 VOID
@@ -399,27 +408,58 @@ KdpSerialInit(PKD_DISPATCH_TABLE DispatchTable,
 
 /* SCREEN FUNCTIONS **********************************************************/
 
+VOID
+KdpScreenAcquire(VOID)
+{
+    if (InbvIsBootDriverInstalled() /* &&
+        !InbvCheckDisplayOwnership() */)
+    {
+        /* Acquire ownership and reset the display */
+        InbvAcquireDisplayOwnership();
+        InbvResetDisplay();
+        InbvSolidColorFill(0, 0, 639, 479, 0);
+        InbvSetTextColor(15);
+        InbvInstallDisplayStringFilter(NULL);
+        InbvEnableDisplayString(TRUE);
+        InbvSetScrollRegion(0, 0, 639, 479);
+    }
+}
+
+// extern VOID NTAPI InbvSetDisplayOwnership(IN BOOLEAN DisplayOwned);
+
+VOID
+KdpScreenRelease(VOID)
+{
+    if (InbvIsBootDriverInstalled()&&
+        InbvCheckDisplayOwnership())
+    {
+        /* Release the display */
+        // InbvSetDisplayOwnership(FALSE);
+        InbvNotifyDisplayOwnershipLost(NULL);
+    }
+}
+
 /*
  * Screen debug logger function KdpScreenPrint() writes text messages into
  * KdpDmesgBuffer, using it as a circular buffer. KdpDmesgBuffer contents could
  * be later (re)viewed using dmesg command of kdbg. KdpScreenPrint() protects
  * KdpDmesgBuffer from simultaneous writes by use of KdpDmesgLogSpinLock.
  */
-VOID
+static VOID
 NTAPI
-KdpScreenPrint(LPSTR Message,
+KdpScreenPrint(PCHAR Message,
                ULONG Length)
 {
-    ULONG beg, end, num;
+    PCHAR pch = (PCHAR)Message;
     KIRQL OldIrql;
-    PCHAR pch = (PCHAR) Message;
+    ULONG beg, end, num;
 
     while (pch < Message + Length && *pch)
     {
-        if(*pch == '\b')
+        if (*pch == '\b')
         {
             /* HalDisplayString does not support '\b'. Workaround it and use '\r' */
-            if(KdpScreenLineLength > 0)
+            if (KdpScreenLineLength > 0)
             {
                 /* Remove last character from buffer */
                 KdpScreenLineBuffer[--KdpScreenLineLength] = '\0';
@@ -436,10 +476,10 @@ KdpScreenPrint(LPSTR Message,
             KdpScreenLineBuffer[KdpScreenLineLength] = '\0';
         }
 
-        if(*pch == '\n' || KdpScreenLineLength == KdpScreenLineLengthDefault)
+        if (*pch == '\n' || KdpScreenLineLength == KdpScreenLineLengthDefault)
         {
             /* Print buffered characters */
-            if(KdpScreenLineBufferPos != KdpScreenLineLength)
+            if (KdpScreenLineBufferPos != KdpScreenLineLength)
                 HalDisplayString(KdpScreenLineBuffer + KdpScreenLineBufferPos);
 
             /* Clear line buffer */
@@ -451,7 +491,7 @@ KdpScreenPrint(LPSTR Message,
     }
 
     /* Print buffered characters */
-    if(KdpScreenLineBufferPos != KdpScreenLineLength)
+    if (KdpScreenLineBufferPos != KdpScreenLineLength)
     {
         HalDisplayString(KdpScreenLineBuffer + KdpScreenLineBufferPos);
         KdpScreenLineBufferPos = KdpScreenLineLength;
@@ -465,21 +505,7 @@ KdpScreenPrint(LPSTR Message,
       return;
 
     /* Acquire the printing spinlock without waiting at raised IRQL */
-    while (TRUE)
-    {
-        /* Wait when the spinlock becomes available */
-        while (!KeTestSpinLock(&KdpDmesgLogSpinLock));
-
-        /* Spinlock was free, raise IRQL */
-        KeRaiseIrql(HIGH_LEVEL, &OldIrql);
-
-        /* Try to get the spinlock */
-        if (KeTryToAcquireSpinLockAtDpcLevel(&KdpDmesgLogSpinLock))
-            break;
-
-        /* Someone else got the spinlock, lower IRQL back */
-        KeLowerIrql(OldIrql);
-    }
+    OldIrql = KdpAcquireLock(&KdpDmesgLogSpinLock);
 
     /* Invariant: always_true(KdpDmesgFreeBytes == KdpDmesgBufferSize);
      * set num to min(KdpDmesgFreeBytes, Length).
@@ -504,11 +530,8 @@ KdpScreenPrint(LPSTR Message,
         KdbDmesgTotalWritten += num;
     }
 
-    /* Release spinlock */
-    KiReleaseSpinLock(&KdpDmesgLogSpinLock);
-
-    /* Lower IRQL */
-    KeLowerIrql(OldIrql);
+    /* Release the spinlock */
+    KdpReleaseLock(&KdpDmesgLogSpinLock, OldIrql);
 
     /* Optional step(?): find out a way to notify about buffer exhaustion,
      * and possibly fall into kbd to use dmesg command: user will read
@@ -544,13 +567,7 @@ KdpScreenInit(PKD_DISPATCH_TABLE DispatchTable,
         KdbDmesgTotalWritten = 0;
 
         /* Take control of the display */
-        InbvAcquireDisplayOwnership();
-        InbvResetDisplay();
-        InbvSolidColorFill(0, 0, 639, 479, 0);
-        InbvSetTextColor(15);
-        InbvSetScrollRegion(0, 0, 639, 479);
-        InbvInstallDisplayStringFilter(NULL);
-        InbvEnableDisplayString(TRUE);
+        KdpScreenAcquire();
 
         /* Initialize spinlock */
         KeInitializeSpinLock(&KdpDmesgLogSpinLock);
index b6a8beb..43d2e8f 100644 (file)
@@ -26,8 +26,8 @@
  *
  * See also: kd\kdio.c
  */
-static SIZE_T
-INIT_FUNCTION
+static INIT_FUNCTION
+SIZE_T
 KdpGetMemorySizeInMBs(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
 {
     PLIST_ENTRY ListEntry;
@@ -67,8 +67,8 @@ KdpGetMemorySizeInMBs(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
 }
 
 /* See also: kd\kdio.c */
-static VOID
-INIT_FUNCTION
+static INIT_FUNCTION
+VOID
 KdpPrintBanner(IN SIZE_T MemSizeMBs)
 {
     DPRINT1("-----------------------------------------------------\n");
@@ -340,7 +340,7 @@ KdInitSystem(IN ULONG BootPhase,
     }
     else
     {
-        /* Called from a bugcheck or a re-enable. Save the Kernel Base */
+        /* Called from a bugcheck or a re-enable. Save the Kernel Base. */
         KdVersionBlock.KernBase = (ULONG64)(LONG_PTR)PsNtosImageBase;
 
         /* Unconditionally enable KD */
index d75ab13..5e7f5e2 100644 (file)
@@ -1218,21 +1218,9 @@ KdbpInternalEnter(VOID)
 
     KbdDisableMouse();
 
-    if (KdpDebugMode.Screen &&
-        InbvIsBootDriverInstalled() &&
-        !InbvCheckDisplayOwnership())
-    {
-        /* Acquire ownership and reset the display */
-        InbvAcquireDisplayOwnership();
-        InbvResetDisplay();
-
-        /* Display debugger prompt */
-        InbvSolidColorFill(0, 0, 639, 479, 0);
-        InbvSetTextColor(15);
-        InbvInstallDisplayStringFilter(NULL);
-        InbvEnableDisplayString(TRUE);
-        InbvSetScrollRegion(0, 0, 639, 479);
-    }
+    /* Take control of the display */
+    if (KdpDebugMode.Screen)
+        KdpScreenAcquire();
 
     /* Call the interface's main loop on a different stack */
     Thread = PsGetCurrentThread();
@@ -1244,7 +1232,7 @@ KdbpInternalEnter(VOID)
     Thread->Tcb.StackLimit = (ULONG_PTR)KdbStack;
     Thread->Tcb.KernelStack = (char*)KdbStack + KDB_STACK_SIZE;
 
-    /*KdbpPrint("Switching to KDB stack 0x%08x-0x%08x (Current Stack is 0x%08x)\n", Thread->Tcb.StackLimit, Thread->Tcb.StackBase, Esp);*/
+    // KdbpPrint("Switching to KDB stack 0x%08x-0x%08x (Current Stack is 0x%08x)\n", Thread->Tcb.StackLimit, Thread->Tcb.StackBase, Esp);
 
     KdbpStackSwitchAndCall(KdbStack + KDB_STACK_SIZE - sizeof(ULONG), KdbpCallMainLoop);
 
@@ -1252,6 +1240,11 @@ KdbpInternalEnter(VOID)
     Thread->Tcb.StackBase = SavedStackBase;
     Thread->Tcb.StackLimit = SavedStackLimit;
     Thread->Tcb.KernelStack = SavedKernelStack;
+
+    /* Release the display */
+    if (KdpDebugMode.Screen)
+        KdpScreenRelease();
+
     KbdEnableMouse();
 }
 
@@ -1363,7 +1356,7 @@ KdbEnterDebuggerException(
         EnterConditionMet = FALSE;
     }
 
-    /* If we stopped on one of our breakpoints then let the user know. */
+    /* If we stopped on one of our breakpoints then let the user know */
     KdbLastBreakPointNr = -1;
     KdbEnteredOnSingleStep = FALSE;
 
@@ -1374,7 +1367,7 @@ KdbEnterDebuggerException(
 
         if (ExceptionCode == STATUS_BREAKPOINT)
         {
-            /* ... and restore the original instruction. */
+            /* ... and restore the original instruction */
             if (!NT_SUCCESS(KdbpOverwriteInstruction(KdbCurrentProcess, BreakPoint->Address,
                                                      BreakPoint->Data.SavedInstruction, NULL)))
             {
@@ -1408,7 +1401,7 @@ KdbEnterDebuggerException(
         {
             ASSERT((TrapFrame->EFlags & EFLAGS_TF) == 0);
 
-            /* Delete the temporary breakpoint which was used to step over or into the instruction. */
+            /* Delete the temporary breakpoint which was used to step over or into the instruction */
             KdbpDeleteBreakPoint(-1, BreakPoint);
 
             if (--KdbNumSingleSteps > 0)
@@ -1626,7 +1619,7 @@ KdbEnterDebuggerException(
         return kdHandleException;
     }
 
-    /* Call the main loop. */
+    /* Call the main loop */
     KdbpInternalEnter();
 
     /* Check if we should single step */
@@ -1698,9 +1691,9 @@ continue_execution:
     return ContinueType;
 }
 
+INIT_FUNCTION
 VOID
 NTAPI
-INIT_FUNCTION
 KdbpGetCommandLineSettings(
     PCHAR p1)
 {