https://git.reactos.org/?p=reactos.git;a=commitdiff;h=0589c178ba91e9151d942…
commit 0589c178ba91e9151d9425162dd4b6947f51e0a1
Author: Hervé Poussineau <hpoussin(a)reactos.org>
AuthorDate: Sun Sep 22 21:39:33 2024 +0200
Commit: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
CommitDate: Tue Jan 28 22:00:45 2025 +0100
[NTOS:KD64] Implement KdSystemDebugControl:
SysDbgReadControlSpace/SysDbgWriteControlSpace
---
ntoskrnl/kd64/kdapi.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 56 insertions(+)
diff --git a/ntoskrnl/kd64/kdapi.c b/ntoskrnl/kd64/kdapi.c
index d6506701841..899e225f013 100644
--- a/ntoskrnl/kd64/kdapi.c
+++ b/ntoskrnl/kd64/kdapi.c
@@ -2365,7 +2365,63 @@ KdSystemDebugControl(
break;
case SysDbgReadControlSpace:
+ if (InputBufferLength != sizeof(SYSDBG_CONTROL_SPACE))
+ {
+ Status = STATUS_INFO_LENGTH_MISMATCH;
+ }
+ else
+ {
+ SYSDBG_CONTROL_SPACE Request = *(PSYSDBG_CONTROL_SPACE)InputBuffer;
+ PVOID LockedBuffer;
+ PMDL LockVariable;
+
+ Status = ExLockUserBuffer(Request.Buffer,
+ Request.Request,
+ PreviousMode,
+ IoWriteAccess,
+ &LockedBuffer,
+ &LockVariable);
+ if (NT_SUCCESS(Status))
+ {
+ Status = KdpSysReadControlSpace(Request.Processor,
+ Request.Address,
+ LockedBuffer,
+ Request.Request,
+ &Length);
+ ExUnlockUserBuffer(LockVariable);
+ }
+ }
+ break;
+
case SysDbgWriteControlSpace:
+ if (InputBufferLength != sizeof(SYSDBG_CONTROL_SPACE))
+ {
+ Status = STATUS_INFO_LENGTH_MISMATCH;
+ }
+ else
+ {
+ SYSDBG_CONTROL_SPACE Request = *(PSYSDBG_CONTROL_SPACE)InputBuffer;
+ PVOID LockedBuffer;
+ PMDL LockVariable;
+
+ Status = ExLockUserBuffer(Request.Buffer,
+ Request.Request,
+ PreviousMode,
+ IoReadAccess,
+ &LockedBuffer,
+ &LockVariable);
+ if (NT_SUCCESS(Status))
+ {
+ Status = KdpSysWriteControlSpace(Request.Processor,
+ Request.Address,
+ LockedBuffer,
+ Request.Request,
+ &Length);
+ ExUnlockUserBuffer(LockVariable);
+ }
+ }
+ break;
+
case SysDbgReadIoSpace:
case SysDbgWriteIoSpace:
case SysDbgReadMsr: