[ros-diffs] [ion] 25839: - KdDebuggerNotPresent should be FALSE by default. - KdpTimeSlipPending should be 1 by defalt. - Enable KdInitSystem; don't touch SharedUserData yet because our loader doesn't map it properly until we hit MmInit1, so disable this code for now. - Implement KdpPollBreakInWithPortLock. - Add calls to KdpPrint, KdpSymbol since KdpTrap now gets activated. Implement KdpPrint and KdpPrintString, but not KdLogDbgPrint (so debug messages before WinDBG connects are currently lost). - Implement KdpSymbol but not essential call to KdpReportLoadSymbolsStateChange. - Only save/restore CR4 if KeFeatureBits indicates CR4 support exists. - Export KdDebuggerNotPresent since KDCOM needs it.
ion at svn.reactos.org
ion at svn.reactos.org
Sun Feb 18 23:32:32 CET 2007
- Previous message: [ros-diffs] [ion] 25838: - Add kd64 folder for KD64 6.0 implementation. - Implement KdEnterDebugger, KdExitDebugger, KdEnableDebuggerWithLock, KdEnableDebugger. - Add KD Version Block, KD Component Masks, and KD Configuration Options. - Implement KdInitSystem and KdRegisterDebuggerDataBlock. - Implement KdPollBreakIn, KdpLockPort, KdpUnlockPort. - Implement KdpStub and KdpReport. Implement logic of KdpTrap but not helper calls (KdpTrap is only enabled after KD connects). - Implement KD Time Slip support, KdpSwitchProcessor, KdpQueryPerformanceCounter.
- Next message: [ros-diffs] [ion] 25840: - Dummy commit for documentation purposes: "The KD64 6.0 implementation is based on information from the VSJ article located at: http://www.vsj.co.uk/articles/display.asp?id=265 by Albert Alameida. Although Windows 2000 shipped with KD64 5.0, much of the implementation details have not changed. Additionally, the Windows 2000 DDK (accidentally?) shipped with a file called windbgkd.h which contains internal KD64 information and documentation. WinDBG's SDK ships with wdbgexts.h which contains more internal information on some portable structures. Other information was gathered through people such as Skywing."
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: ion
Date: Mon Feb 19 01:32:32 2007
New Revision: 25839
URL: http://svn.reactos.org/svn/reactos?rev=25839&view=rev
Log:
- KdDebuggerNotPresent should be FALSE by default.
- KdpTimeSlipPending should be 1 by defalt.
- Enable KdInitSystem; don't touch SharedUserData yet because our loader doesn't map it properly until we hit MmInit1, so disable this code for now.
- Implement KdpPollBreakInWithPortLock.
- Add calls to KdpPrint, KdpSymbol since KdpTrap now gets activated. Implement KdpPrint and KdpPrintString, but not KdLogDbgPrint (so debug messages before WinDBG connects are currently lost).
- Implement KdpSymbol but not essential call to KdpReportLoadSymbolsStateChange.
- Only save/restore CR4 if KeFeatureBits indicates CR4 support exists.
- Export KdDebuggerNotPresent since KDCOM needs it.
Added:
branches/alex-kd-branch/reactos/ntoskrnl/kd64/kdprint.c
Modified:
branches/alex-kd-branch/reactos/ntoskrnl/include/internal/kd.h
branches/alex-kd-branch/reactos/ntoskrnl/kd64/kddata.c
branches/alex-kd-branch/reactos/ntoskrnl/kd64/kdinit.c
branches/alex-kd-branch/reactos/ntoskrnl/kd64/kdlock.c
branches/alex-kd-branch/reactos/ntoskrnl/kd64/kdtrap.c
branches/alex-kd-branch/reactos/ntoskrnl/ke/i386/cpu.c
branches/alex-kd-branch/reactos/ntoskrnl/ke/i386/kiinit.c
branches/alex-kd-branch/reactos/ntoskrnl/ntoskrnl.def
branches/alex-kd-branch/reactos/ntoskrnl/ntoskrnl.rbuild
Modified: branches/alex-kd-branch/reactos/ntoskrnl/include/internal/kd.h
URL: http://svn.reactos.org/svn/reactos/branches/alex-kd-branch/reactos/ntoskrnl/include/internal/kd.h?rev=25839&r1=25838&r2=25839&view=diff
==============================================================================
--- branches/alex-kd-branch/reactos/ntoskrnl/include/internal/kd.h (original)
+++ branches/alex-kd-branch/reactos/ntoskrnl/include/internal/kd.h Mon Feb 19 01:32:32 2007
@@ -104,6 +104,37 @@
IN BOOLEAN NeedLock
);
+ULONG
+NTAPI
+KdpPrint(
+ IN ULONG ComponentId,
+ IN ULONG ComponentMask,
+ IN LPSTR String,
+ IN ULONG Length,
+ IN KPROCESSOR_MODE PreviousMode,
+ IN PKTRAP_FRAME TrapFrame,
+ IN PKEXCEPTION_FRAME ExceptionFrame,
+ OUT PBOOLEAN Status
+);
+
+ULONG
+NTAPI
+KdpSymbol(
+ IN LPSTR DllPath,
+ IN ULONG DllBase,
+ IN BOOLEAN Unload,
+ IN KPROCESSOR_MODE PreviousMode,
+ IN PCONTEXT ContextRecord,
+ IN PKTRAP_FRAME TrapFrame,
+ IN PKEXCEPTION_FRAME ExceptionFrame
+);
+
+BOOLEAN
+NTAPI
+KdpPollBreakInWithPortLock(
+ VOID
+);
+
extern DBGKD_GET_VERSION64 KdVersionBlock;
extern KDDEBUGGER_DATA64 KdDebuggerDataBlock;
extern LIST_ENTRY KdpDebuggerDataListHead;
@@ -133,4 +164,6 @@
extern BOOLEAN KdpPortLocked;
extern KSPIN_LOCK KdpDebuggerLock;
extern LARGE_INTEGER KdTimerStop, KdTimerStart, KdTimerDifference;
-
+extern ULONG KdComponentTableSize;
+extern ULONG Kd_WIN2000_Mask;
+extern PULONG KdComponentTable[104];
Modified: branches/alex-kd-branch/reactos/ntoskrnl/kd64/kddata.c
URL: http://svn.reactos.org/svn/reactos/branches/alex-kd-branch/reactos/ntoskrnl/kd64/kddata.c?rev=25839&r1=25838&r2=25839&view=diff
==============================================================================
--- branches/alex-kd-branch/reactos/ntoskrnl/kd64/kddata.c (original)
+++ branches/alex-kd-branch/reactos/ntoskrnl/kd64/kddata.c Mon Feb 19 01:32:32 2007
@@ -62,7 +62,7 @@
//
BOOLEAN KdBreakAfterSymbolLoad;
BOOLEAN KdPitchDebugger;
-BOOLEAN _KdDebuggerNotPresent = TRUE;
+BOOLEAN _KdDebuggerNotPresent;
BOOLEAN _KdDebuggerEnabled;
BOOLEAN KdAutoEnableOnEvent;
BOOLEAN KdPreviouslyEnabled;
@@ -77,7 +77,7 @@
KDPC KdpTimeSlipDpc;
KTIMER KdpTimeSlipTimer;
WORK_QUEUE_ITEM KdpTimeSlipWorkItem;
-LONG KdpTimeSlipPending;
+LONG KdpTimeSlipPending = 1;
PKEVENT KdpTimeSlipEvent;
KSPIN_LOCK KdpTimeSlipEventLock;
LARGE_INTEGER KdTimerStop, KdTimerStart, KdTimerDifference;
Modified: branches/alex-kd-branch/reactos/ntoskrnl/kd64/kdinit.c
URL: http://svn.reactos.org/svn/reactos/branches/alex-kd-branch/reactos/ntoskrnl/kd64/kdinit.c?rev=25839&r1=25838&r2=25839&view=diff
==============================================================================
--- branches/alex-kd-branch/reactos/ntoskrnl/kd64/kdinit.c (original)
+++ branches/alex-kd-branch/reactos/ntoskrnl/kd64/kdinit.c Mon Feb 19 01:32:32 2007
@@ -70,7 +70,6 @@
PLIST_ENTRY NextEntry;
ULONG i;
CHAR NameBuffer[256];
- return TRUE;
/* Check if this is Phase 1 */
if (BootPhase)
@@ -207,9 +206,9 @@
KdDebuggerEnabled = TRUE;
/* Let user-mode know that it's enabled as well */
-#undef KdDebuggerEnabled
- SharedUserData->KdDebuggerEnabled = TRUE;
-#define KdDebuggerEnabled _KdDebuggerEnabled
+//#undef KdDebuggerEnabled
+ //SharedUserData->KdDebuggerEnabled = TRUE;
+//#define KdDebuggerEnabled _KdDebuggerEnabled
/* Check if we have a loader block */
if (LoaderBlock)
Modified: branches/alex-kd-branch/reactos/ntoskrnl/kd64/kdlock.c
URL: http://svn.reactos.org/svn/reactos/branches/alex-kd-branch/reactos/ntoskrnl/kd64/kdlock.c?rev=25839&r1=25838&r2=25839&view=diff
==============================================================================
--- branches/alex-kd-branch/reactos/ntoskrnl/kd64/kdlock.c (original)
+++ branches/alex-kd-branch/reactos/ntoskrnl/kd64/kdlock.c Mon Feb 19 01:32:32 2007
@@ -28,6 +28,41 @@
{
/* Release the lock */
KiReleaseSpinLock(&KdpDebuggerLock);
+}
+
+BOOLEAN
+NTAPI
+KdpPollBreakInWithPortLock(VOID)
+{
+ BOOLEAN DoBreak = FALSE;
+
+ /* First make sure that KD is enabled */
+ if (KdDebuggerEnabled)
+ {
+ /* Check if a CTRL-C is in the queue */
+ if (KdpContext.KdpControlCPending)
+ {
+ /* Set it and prepare for break */
+ DoBreak = TRUE;
+ KdpContext.KdpControlCPending = FALSE;
+ }
+ else
+ {
+ /* Now get a packet */
+ if (!KdReceivePacket(PACKET_TYPE_KD_POLL_BREAKIN,
+ NULL,
+ NULL,
+ NULL,
+ NULL))
+ {
+ /* Successful breakin */
+ DoBreak = TRUE;
+ }
+ }
+ }
+
+ /* Tell the caller to do a break */
+ return DoBreak;
}
/* PUBLIC FUNCTIONS **********************************************************/
Added: branches/alex-kd-branch/reactos/ntoskrnl/kd64/kdprint.c
URL: http://svn.reactos.org/svn/reactos/branches/alex-kd-branch/reactos/ntoskrnl/kd64/kdprint.c?rev=25839&view=auto
==============================================================================
--- branches/alex-kd-branch/reactos/ntoskrnl/kd64/kdprint.c (added)
+++ branches/alex-kd-branch/reactos/ntoskrnl/kd64/kdprint.c Mon Feb 19 01:32:32 2007
@@ -1,0 +1,204 @@
+/*
+ * PROJECT: ReactOS Kernel
+ * LICENSE: GPL - See COPYING in the top level directory
+ * FILE: ntoskrnl/kd64/kdprint.c
+ * PURPOSE: KD64 Trap Handler Routines
+ * PROGRAMMERS: Alex Ionescu (alex.ionescu at reactos.org)
+ */
+
+/* INCLUDES ******************************************************************/
+
+#include <ntoskrnl.h>
+#define NDEBUG
+#include <debug.h>
+
+CHAR KdpMessageBuffer[4096];
+
+/* FUNCTIONS *****************************************************************/
+
+BOOLEAN
+NTAPI
+KdpPrintString(IN PSTRING Output)
+{
+ STRING Data, Header;
+ DBGKD_DEBUG_IO DebugIo;
+ ULONG Length = Output->Length;
+
+ /* Copy the string */
+ RtlMoveMemory(KdpMessageBuffer, Output->Buffer, Length);
+
+ /* Make sure we don't exceed the KD Packet size */
+ if ((sizeof(DBGKD_DEBUG_IO) + Length) > PACKET_MAX_SIZE)
+ {
+ /* Normalize length */
+ Length = PACKET_MAX_SIZE - sizeof(DBGKD_DEBUG_IO);
+ }
+
+ /* Build the packet header */
+ DebugIo.ApiNumber = DbgKdPrintStringApi;
+ DebugIo.ProcessorLevel = KeProcessorLevel;
+ DebugIo.Processor = KeGetCurrentPrcb()->Number;
+ DebugIo.u.PrintString.LengthOfString = Length;
+ Header.Length = sizeof(DBGKD_DEBUG_IO);
+ Header.Buffer = (PCHAR)&DebugIo;
+
+ /* Build the data */
+ Data.Length = Length;
+ Data.Buffer = KdpMessageBuffer;
+
+ /* Send the packet */
+ KdSendPacket(PACKET_TYPE_KD_DEBUG_IO, &Header, &Data, &KdpContext);
+
+ /* Check if the user pressed CTRL+C */
+ return KdpPollBreakInWithPortLock();
+}
+
+ULONG
+NTAPI
+KdpCommandString(IN ULONG Length,
+ IN LPSTR String,
+ IN KPROCESSOR_MODE PreviousMode,
+ IN PCONTEXT ContextRecord,
+ IN PKTRAP_FRAME TrapFrame,
+ IN PKEXCEPTION_FRAME ExceptionFrame)
+{
+ /* FIXME */
+ return FALSE;
+}
+
+ULONG
+NTAPI
+KdpSymbol(IN LPSTR DllPath,
+ IN ULONG DllBase,
+ IN BOOLEAN Unload,
+ IN KPROCESSOR_MODE PreviousMode,
+ IN PCONTEXT ContextRecord,
+ IN PKTRAP_FRAME TrapFrame,
+ IN PKEXCEPTION_FRAME ExceptionFrame)
+{
+ BOOLEAN Entered;
+ PKPRCB Prcb = KeGetCurrentPrcb();
+ ULONG Status;
+
+ /* Check if we need to do anything */
+ if ((PreviousMode != KernelMode) || (KdDebuggerNotPresent)) return 0;
+
+ /* Enter the debugger */
+ Entered = KdEnterDebugger(TrapFrame, ExceptionFrame);
+
+ /* Save the CPU Control State and save the context */
+ KiSaveProcessorControlState(&Prcb->ProcessorState);
+ RtlCopyMemory(&Prcb->ProcessorState.ContextFrame,
+ ContextRecord,
+ sizeof(CONTEXT));
+
+ /* Report the new state */
+#if 0
+ Status = KdpReportLoadSymbolsStateChange(DllPath,
+ DllBase,
+ Unload,
+ &Prcb->
+ ProcessorState.ContextFrame);
+#else
+ Status = FALSE;
+#endif
+
+ /* Now restore the processor state, manually again. */
+ RtlCopyMemory(ContextRecord,
+ &Prcb->ProcessorState.ContextFrame,
+ sizeof(CONTEXT));
+ KiRestoreProcessorControlState(&Prcb->ProcessorState);
+
+ /* Exit the debugger and clear the CTRL-C state */
+ KdExitDebugger(Entered);
+ return 0;
+}
+
+ULONG
+NTAPI
+KdpPrompt(IN LPSTR InString,
+ IN ULONG InStringLength,
+ OUT LPSTR OutString,
+ IN ULONG OutStringLength,
+ IN KPROCESSOR_MODE PreviousMode,
+ IN PKTRAP_FRAME TrapFrame,
+ IN PKEXCEPTION_FRAME ExceptionFrame)
+{
+ /* FIXME */
+ return FALSE;
+}
+
+ULONG
+NTAPI
+KdpPrint(IN ULONG ComponentId,
+ IN ULONG ComponentMask,
+ IN LPSTR String,
+ IN ULONG Length,
+ IN KPROCESSOR_MODE PreviousMode,
+ IN PKTRAP_FRAME TrapFrame,
+ IN PKEXCEPTION_FRAME ExceptionFrame,
+ OUT PBOOLEAN Status)
+{
+ NTSTATUS ReturnValue;
+ BOOLEAN Entered;
+ ANSI_STRING AnsiString;
+
+ /* Assume failure */
+ *Status = FALSE;
+
+ /* Validate the mask */
+ if (ComponentMask <= 0x1F) ComponentMask = 1 << ComponentMask;
+ if (!(Kd_WIN2000_Mask & ComponentMask) ||
+ ((ComponentId < KdComponentTableSize) &&
+ !(*KdComponentTable[ComponentId] & ComponentMask)))
+ {
+ /* Mask validation failed */
+ *Status = TRUE;
+ return FALSE;
+ }
+
+ /* Normalize the length */
+ Length = min(Length, 512);
+
+ /* Check if we need to verify the buffer */
+ if (PreviousMode != KernelMode)
+ {
+ /* FIXME: Support user-mode */
+ }
+
+ /* Setup the ANSI string */
+ AnsiString.Buffer = String;
+ AnsiString.Length = (USHORT)Length;
+
+ /* Log the print */
+ //KdLogDbgPrint(&AnsiString);
+
+ /* Check for a debugger */
+ if (KdDebuggerNotPresent)
+ {
+ /* Fail */
+ *Status = TRUE;
+ return (ULONG)STATUS_DEVICE_NOT_CONNECTED;
+ }
+
+ /* Enter the debugger */
+ Entered = KdEnterDebugger(TrapFrame, ExceptionFrame);
+
+ /* Print the string */
+ if (KdpPrintString(&AnsiString))
+ {
+ /* User pressed CTRL-C, breakpoint on return */
+ ReturnValue = STATUS_BREAKPOINT;
+ }
+ else
+ {
+ /* String was printed */
+ ReturnValue = STATUS_SUCCESS;
+ }
+
+ /* Exit the debugger and return */
+ KdExitDebugger(Entered);
+ *Status = TRUE;
+ return ReturnValue;
+}
+
Modified: branches/alex-kd-branch/reactos/ntoskrnl/kd64/kdtrap.c
URL: http://svn.reactos.org/svn/reactos/branches/alex-kd-branch/reactos/ntoskrnl/kd64/kdtrap.c?rev=25839&r1=25838&r2=25839&view=diff
==============================================================================
--- branches/alex-kd-branch/reactos/ntoskrnl/kd64/kdtrap.c (original)
+++ branches/alex-kd-branch/reactos/ntoskrnl/kd64/kdtrap.c Mon Feb 19 01:32:32 2007
@@ -101,7 +101,6 @@
BOOLEAN Unload = FALSE;
ULONG Eip, Eax;
BOOLEAN Status = FALSE;
- while (TRUE);
/*
* Check if we got a STATUS_BREAKPOINT with a SubID for Print, Prompt or
@@ -120,7 +119,14 @@
case BREAKPOINT_PRINT:
/* Call the worker routine */
- Eax = 0;
+ Eax = KdpPrint(ContextRecord->Ebx,
+ ContextRecord->Edi,
+ (LPSTR)ExceptionRecord->ExceptionInformation[1],
+ (ULONG)ExceptionRecord->ExceptionInformation[2],
+ PreviousMode,
+ TrapFrame,
+ ExceptionFrame,
+ &Status);
/* Update the return value for the caller */
ContextRecord->Eax = Eax;
@@ -130,6 +136,7 @@
case BREAKPOINT_PROMPT:
/* Call the worker routine */
+ while (TRUE);
Eax = 0;
Status = TRUE;
@@ -147,6 +154,13 @@
case BREAKPOINT_LOAD_SYMBOLS:
/* Call the worker routine */
+ KdpSymbol(UlongToPtr(ExceptionRecord->ExceptionInformation[1]),
+ (ULONG)ExceptionRecord->ExceptionInformation[2],
+ Unload,
+ PreviousMode,
+ ContextRecord,
+ TrapFrame,
+ ExceptionFrame);
Status = TRUE;
break;
@@ -154,6 +168,7 @@
case BREAKPOINT_COMMAND_STRING:
/* Call the worker routine */
+ while (TRUE);
Status = TRUE;
/* Anything else, do nothing */
Modified: branches/alex-kd-branch/reactos/ntoskrnl/ke/i386/cpu.c
URL: http://svn.reactos.org/svn/reactos/branches/alex-kd-branch/reactos/ntoskrnl/ke/i386/cpu.c?rev=25839&r1=25838&r2=25839&view=diff
==============================================================================
--- branches/alex-kd-branch/reactos/ntoskrnl/ke/i386/cpu.c (original)
+++ branches/alex-kd-branch/reactos/ntoskrnl/ke/i386/cpu.c Mon Feb 19 01:32:32 2007
@@ -678,11 +678,12 @@
NTAPI
KiRestoreProcessorControlState(PKPROCESSOR_STATE ProcessorState)
{
+ return;
/* Restore the CR registers */
__writecr0(ProcessorState->SpecialRegisters.Cr0);
Ke386SetCr2(ProcessorState->SpecialRegisters.Cr2);
__writecr3(ProcessorState->SpecialRegisters.Cr3);
- __writecr4(ProcessorState->SpecialRegisters.Cr4);
+ if (KeFeatureBits & KF_CR4) __writecr4(ProcessorState->SpecialRegisters.Cr4);
//
// Restore the DR registers
@@ -711,7 +712,8 @@
ProcessorState->SpecialRegisters.Cr0 = __readcr0();
ProcessorState->SpecialRegisters.Cr2 = __readcr2();
ProcessorState->SpecialRegisters.Cr3 = __readcr3();
- ProcessorState->SpecialRegisters.Cr4 = __readcr4();
+ ProcessorState->SpecialRegisters.Cr4 = (KeFeatureBits & KF_CR4) ?
+ __readcr4() : 0;
/* Save the DR registers */
ProcessorState->SpecialRegisters.KernelDr0 = Ke386GetDr0();
Modified: branches/alex-kd-branch/reactos/ntoskrnl/ke/i386/kiinit.c
URL: http://svn.reactos.org/svn/reactos/branches/alex-kd-branch/reactos/ntoskrnl/ke/i386/kiinit.c?rev=25839&r1=25838&r2=25839&view=diff
==============================================================================
--- branches/alex-kd-branch/reactos/ntoskrnl/ke/i386/kiinit.c (original)
+++ branches/alex-kd-branch/reactos/ntoskrnl/ke/i386/kiinit.c Mon Feb 19 01:32:32 2007
@@ -786,5 +786,3 @@
/* Jump into the idle loop */
KiIdleLoop();
}
-
-
Modified: branches/alex-kd-branch/reactos/ntoskrnl/ntoskrnl.def
URL: http://svn.reactos.org/svn/reactos/branches/alex-kd-branch/reactos/ntoskrnl/ntoskrnl.def?rev=25839&r1=25838&r2=25839&view=diff
==============================================================================
--- branches/alex-kd-branch/reactos/ntoskrnl/ntoskrnl.def (original)
+++ branches/alex-kd-branch/reactos/ntoskrnl/ntoskrnl.def Mon Feb 19 01:32:32 2007
@@ -518,7 +518,8 @@
@IofCallDriver at 8
@IofCompleteRequest at 8
IoIsWdmVersionAvailable at 8
-KdComPortInUse DATA
+KdComPortInUse
+KdDebuggerNotPresent=_KdDebuggerNotPresent
Ke386CallBios at 8
@KeAcquireGuardedMutex at 4
@KeAcquireGuardedMutexUnsafe at 4
Modified: branches/alex-kd-branch/reactos/ntoskrnl/ntoskrnl.rbuild
URL: http://svn.reactos.org/svn/reactos/branches/alex-kd-branch/reactos/ntoskrnl/ntoskrnl.rbuild?rev=25839&r1=25838&r2=25839&view=diff
==============================================================================
--- branches/alex-kd-branch/reactos/ntoskrnl/ntoskrnl.rbuild (original)
+++ branches/alex-kd-branch/reactos/ntoskrnl/ntoskrnl.rbuild Mon Feb 19 01:32:32 2007
@@ -198,6 +198,7 @@
<file>kddata.c</file>
<file>kdinit.c</file>
<file>kdlock.c</file>
+ <file>kdprint.c</file>
<file>kdtrap.c</file>
</directory>
<directory name="ldr">
- Previous message: [ros-diffs] [ion] 25838: - Add kd64 folder for KD64 6.0 implementation. - Implement KdEnterDebugger, KdExitDebugger, KdEnableDebuggerWithLock, KdEnableDebugger. - Add KD Version Block, KD Component Masks, and KD Configuration Options. - Implement KdInitSystem and KdRegisterDebuggerDataBlock. - Implement KdPollBreakIn, KdpLockPort, KdpUnlockPort. - Implement KdpStub and KdpReport. Implement logic of KdpTrap but not helper calls (KdpTrap is only enabled after KD connects). - Implement KD Time Slip support, KdpSwitchProcessor, KdpQueryPerformanceCounter.
- Next message: [ros-diffs] [ion] 25840: - Dummy commit for documentation purposes: "The KD64 6.0 implementation is based on information from the VSJ article located at: http://www.vsj.co.uk/articles/display.asp?id=265 by Albert Alameida. Although Windows 2000 shipped with KD64 5.0, much of the implementation details have not changed. Additionally, the Windows 2000 DDK (accidentally?) shipped with a file called windbgkd.h which contains internal KD64 information and documentation. WinDBG's SDK ships with wdbgexts.h which contains more internal information on some portable structures. Other information was gathered through people such as Skywing."
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Ros-diffs
mailing list