https://git.reactos.org/?p=reactos.git;a=commitdiff;h=b187662f3930ea3244d26…
commit b187662f3930ea3244d26fd7c47e052c76ffa998
Author: Hervé Poussineau <hpoussin(a)reactos.org>
AuthorDate: Sun Sep 22 21:39:47 2024 +0200
Commit: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
CommitDate: Tue Jan 28 22:00:46 2025 +0100
[NTOS:KD64] Implement KdSystemDebugControl: SysDbgReadIoSpace/SysDbgWriteIoSpace
---
ntoskrnl/kd64/kdapi.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 60 insertions(+)
diff --git a/ntoskrnl/kd64/kdapi.c b/ntoskrnl/kd64/kdapi.c
index 899e225f013..ed1a74e9ee1 100644
--- a/ntoskrnl/kd64/kdapi.c
+++ b/ntoskrnl/kd64/kdapi.c
@@ -2423,7 +2423,67 @@ KdSystemDebugControl(
break;
case SysDbgReadIoSpace:
+ if (InputBufferLength != sizeof(SYSDBG_IO_SPACE))
+ {
+ Status = STATUS_INFO_LENGTH_MISMATCH;
+ }
+ else
+ {
+ SYSDBG_IO_SPACE Request = *(PSYSDBG_IO_SPACE)InputBuffer;
+ PVOID LockedBuffer;
+ PMDL LockVariable;
+
+ Status = ExLockUserBuffer(Request.Buffer,
+ Request.Request,
+ PreviousMode,
+ IoWriteAccess,
+ &LockedBuffer,
+ &LockVariable);
+ if (NT_SUCCESS(Status))
+ {
+ Status = KdpSysReadIoSpace(Request.InterfaceType,
+ Request.BusNumber,
+ Request.AddressSpace,
+ Request.Address,
+ LockedBuffer,
+ Request.Request,
+ &Length);
+ ExUnlockUserBuffer(LockVariable);
+ }
+ }
+ break;
+
case SysDbgWriteIoSpace:
+ if (InputBufferLength != sizeof(SYSDBG_IO_SPACE))
+ {
+ Status = STATUS_INFO_LENGTH_MISMATCH;
+ }
+ else
+ {
+ SYSDBG_IO_SPACE Request = *(PSYSDBG_IO_SPACE)InputBuffer;
+ PVOID LockedBuffer;
+ PMDL LockVariable;
+
+ Status = ExLockUserBuffer(Request.Buffer,
+ Request.Request,
+ PreviousMode,
+ IoReadAccess,
+ &LockedBuffer,
+ &LockVariable);
+ if (NT_SUCCESS(Status))
+ {
+ Status = KdpSysWriteIoSpace(Request.InterfaceType,
+ Request.BusNumber,
+ Request.AddressSpace,
+ Request.Address,
+ LockedBuffer,
+ Request.Request,
+ &Length);
+ ExUnlockUserBuffer(LockVariable);
+ }
+ }
+ break;
+
case SysDbgReadMsr:
case SysDbgWriteMsr:
case SysDbgReadBusData: