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