https://git.reactos.org/?p=reactos.git;a=commitdiff;h=0589c178ba91e9151d9425162dd4b6947f51e0a1
commit 0589c178ba91e9151d9425162dd4b6947f51e0a1 Author: Hervé Poussineau <hpous...@reactos.org> AuthorDate: Sun Sep 22 21:39:33 2024 +0200 Commit: Hermès Bélusca-Maïto <hermes.belusca-ma...@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: