Author: ion Date: Tue Feb 20 05:12:39 2007 New Revision: 25851
URL: http://svn.reactos.org/svn/reactos?rev=25851&view=rev Log: - Implement DbgKdClearAllInternalBreakpointsApi - Implement KdpGetContext for DbgKdGetContextApi. - WinDBG now goes to Phase 2 connection and prints out: Windows Server 2003 Kernel Version 3790 UP Checked x86 compatible Built by: 20070215-r25797 Kernel base = 0x80100000 PsLoadedModuleList = 0x80112230
Modified: branches/alex-kd-branch/reactos/ntoskrnl/include/internal/kd.h branches/alex-kd-branch/reactos/ntoskrnl/kd64/kdapi.c branches/alex-kd-branch/reactos/ntoskrnl/kd64/kddata.c
Modified: branches/alex-kd-branch/reactos/ntoskrnl/include/internal/kd.h URL: http://svn.reactos.org/svn/reactos/branches/alex-kd-branch/reactos/ntoskrnl/... ============================================================================== --- branches/alex-kd-branch/reactos/ntoskrnl/include/internal/kd.h (original) +++ branches/alex-kd-branch/reactos/ntoskrnl/include/internal/kd.h Tue Feb 20 05:12:39 2007 @@ -209,3 +209,4 @@ extern ULONG KdpBreakpointInstruction; extern BOOLEAN KdpOweBreakpoint; extern BOOLEAN BreakpointsSuspended; +extern ULONG KdpNumInternalBreakpoints;
Modified: branches/alex-kd-branch/reactos/ntoskrnl/kd64/kdapi.c URL: http://svn.reactos.org/svn/reactos/branches/alex-kd-branch/reactos/ntoskrnl/... ============================================================================== --- branches/alex-kd-branch/reactos/ntoskrnl/kd64/kdapi.c (original) +++ branches/alex-kd-branch/reactos/ntoskrnl/kd64/kdapi.c Tue Feb 20 05:12:39 2007 @@ -276,6 +276,57 @@ &KdpContext); }
+VOID +NTAPI +KdpGetContext(IN PDBGKD_MANIPULATE_STATE64 State, + IN PSTRING Data, + IN PCONTEXT Context) +{ + STRING Header; + PVOID ControlStart; + + /* Setup the header */ + Header.Length = sizeof(DBGKD_MANIPULATE_STATE64); + Header.Buffer = (PCHAR)State; + ASSERT(Data->Length == 0); + + /* Make sure that this is a valid request */ + if (State->Processor < KeNumberProcessors) + { + /* Check if the request is for this CPU */ + if (State->Processor == KeGetCurrentPrcb()->Number) + { + /* We're just copying our own context */ + ControlStart = Context; + } + else + { + /* SMP not yet handled */ + ControlStart = NULL; + while (TRUE); + } + + /* Copy the memory */ + RtlCopyMemory(Data->Buffer, ControlStart, sizeof(CONTEXT)); + Data->Length = sizeof(CONTEXT); + + /* Finish up */ + State->ReturnStatus = STATUS_SUCCESS; + } + else + { + /* Invalid request */ + State->ReturnStatus = STATUS_UNSUCCESSFUL; + } + + /* Send the reply */ + KdSendPacket(PACKET_TYPE_KD_STATE_MANIPULATE, + &Header, + Data, + &KdpContext); +} + + KCONTINUE_STATUS NTAPI KdpSendWaitContinue(IN ULONG PacketType, @@ -339,8 +390,7 @@ case DbgKdGetContextApi:
/* FIXME: TODO */ - Ke386SetCr2(DbgKdGetContextApi); - while (TRUE); + KdpGetContext(&ManipulateState, &Data, Context); break;
case DbgKdSetContextApi: @@ -573,9 +623,8 @@
case DbgKdClearAllInternalBreakpointsApi:
- /* FIXME: TODO */ - Ke386SetCr2(DbgKdClearAllInternalBreakpointsApi); - while (TRUE); + /* Just clear the counter */ + KdpNumInternalBreakpoints = 0; break;
case DbgKdFillMemoryApi:
Modified: branches/alex-kd-branch/reactos/ntoskrnl/kd64/kddata.c URL: http://svn.reactos.org/svn/reactos/branches/alex-kd-branch/reactos/ntoskrnl/... ============================================================================== --- branches/alex-kd-branch/reactos/ntoskrnl/kd64/kddata.c (original) +++ branches/alex-kd-branch/reactos/ntoskrnl/kd64/kddata.c Tue Feb 20 05:12:39 2007 @@ -52,6 +52,7 @@ ULONG KdpBreakpointInstruction = 0xCC; BOOLEAN KdpOweBreakpoint; BOOLEAN BreakpointsSuspended; +ULONG KdpNumInternalBreakpoints;
// // Time Slip Support