Attach to correct process before messing around with its memory
Modified: trunk/reactos/ntoskrnl/kd/wrappers/gdbstub.c
_____
Modified: trunk/reactos/ntoskrnl/kd/wrappers/gdbstub.c
--- trunk/reactos/ntoskrnl/kd/wrappers/gdbstub.c 2005-10-14
20:03:18 UTC (rev 18457)
+++ trunk/reactos/ntoskrnl/kd/wrappers/gdbstub.c 2005-10-14
20:19:23 UTC (rev 18458)
@@ -829,7 +829,7 @@
char Buffer[64];
PEPROCESS Proc;
- Proc = (PEPROCESS) ThreadInfo->Tcb.ApcState.Process;
+ Proc = (PEPROCESS) ThreadInfo->ThreadsProcess;
Buffer[0] = '\0';
if (NULL != Proc )
@@ -1104,7 +1104,7 @@
/* reply to host that an exception has occurred */
SigVal = GspComputeSignal(ExceptionRecord->ExceptionCode);
- ptr = &GspOutBuffer[0];
+ ptr = GspOutBuffer;
*ptr++ = 'T'; /* notify gdb with signo, PC, FP and SP */
*ptr++ = HexChars[(SigVal >> 4) & 0xf];
@@ -1213,9 +1213,21 @@
*(ptr++) == ',' &&
GspHex2Long(&ptr, &Length))
{
- ptr = 0;
+ PEPROCESS DbgProcess = NULL;
+
+ ptr = NULL;
+ if (NULL != GspDbgThread &&
+ PsGetCurrentProcess() !=
GspDbgThread->ThreadsProcess)
+ {
+ DbgProcess = GspDbgThread->ThreadsProcess;
+ KeAttachProcess(&DbgProcess->Pcb);
+ }
GspMemoryError = FALSE;
GspMem2Hex((PCHAR) Address, GspOutBuffer, Length, 1);
+ if (NULL != DbgProcess)
+ {
+ KeDetachProcess();
+ }
if (GspMemoryError)
{
strcpy(GspOutBuffer, "E03");
@@ -1223,7 +1235,7 @@
}
}
- if (ptr)
+ if (NULL != ptr)
{
strcpy(GspOutBuffer, "E01");
}
@@ -1238,9 +1250,21 @@
GspHex2Long(&ptr, &Length) &&
*(ptr++) == ':')
{
+ PEPROCESS DbgProcess = NULL;
+
+ ptr = NULL;
+ if (NULL != GspDbgThread &&
+ PsGetCurrentProcess() !=
GspDbgThread->ThreadsProcess)
+ {
+ DbgProcess = GspDbgThread->ThreadsProcess;
+ KeAttachProcess(&DbgProcess->Pcb);
+ }
GspMemoryError = FALSE;
GspHex2Mem(ptr, (PCHAR) Address, Length, TRUE);
-
+ if (NULL != DbgProcess)
+ {
+ KeDetachProcess();
+ }
if (GspMemoryError)
{
strcpy(GspOutBuffer, "E03");
@@ -1250,8 +1274,6 @@
{
strcpy(GspOutBuffer, "OK");
}
-
- ptr = NULL;
}
}
Show replies by date