https://git.reactos.org/?p=reactos.git;a=commitdiff;h=2efaa5ea1e0c3786bfeb6183e8d5162bab044dbd

commit 2efaa5ea1e0c3786bfeb6183e8d5162bab044dbd
Author:     Hervé Poussineau <hpous...@reactos.org>
AuthorDate: Sun Sep 22 21:38:56 2024 +0200
Commit:     Hermès Bélusca-Maïto <hermes.belusca-ma...@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:

Reply via email to