https://git.reactos.org/?p=reactos.git;a=commitdiff;h=42e038f227bf0deeb9134…
commit 42e038f227bf0deeb9134e19851bf25d74f6472f
Author: Hervé Poussineau <hpoussin(a)reactos.org>
AuthorDate: Sun Sep 22 21:39:09 2024 +0200
Commit: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
CommitDate: Tue Jan 28 22:00:43 2025 +0100
[NTOS:KD64] Implement KdSystemDebugControl: SysDbgReadPhysical/SysDbgWritePhysical
---
ntoskrnl/kd64/kdapi.c | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/ntoskrnl/kd64/kdapi.c b/ntoskrnl/kd64/kdapi.c
index f6e375dbc7d..d6506701841 100644
--- a/ntoskrnl/kd64/kdapi.c
+++ b/ntoskrnl/kd64/kdapi.c
@@ -2335,6 +2335,35 @@ KdSystemDebugControl(
case SysDbgReadPhysical:
case SysDbgWritePhysical:
+ if (InputBufferLength != sizeof(SYSDBG_PHYSICAL))
+ {
+ Status = STATUS_INFO_LENGTH_MISMATCH;
+ }
+ else
+ {
+ SYSDBG_PHYSICAL Request = *(PSYSDBG_PHYSICAL)InputBuffer;
+ PVOID LockedBuffer;
+ PMDL LockVariable;
+
+ Status = ExLockUserBuffer(Request.Buffer,
+ Request.Request,
+ PreviousMode,
+ Command == SysDbgReadVirtual ? IoWriteAccess :
IoReadAccess,
+ &LockedBuffer,
+ &LockVariable);
+ if (NT_SUCCESS(Status))
+ {
+ Status = KdpCopyMemoryChunks(Request.Address.QuadPart,
+ Request.Buffer,
+ Request.Request,
+ 0,
+ MMDBG_COPY_PHYSICAL | (Command ==
SysDbgReadVirtual ? 0 : MMDBG_COPY_WRITE),
+ &Length);
+ ExUnlockUserBuffer(LockVariable);
+ }
+ }
+ break;
+
case SysDbgReadControlSpace:
case SysDbgWriteControlSpace:
case SysDbgReadIoSpace: