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: