https://git.reactos.org/?p=reactos.git;a=commitdiff;h=2fe3de6c69b98fa426796…
commit 2fe3de6c69b98fa4267963bafca7afea0d74cd0f
Author: Hervé Poussineau <hpoussin(a)reactos.org>
AuthorDate: Sun Sep 22 21:40:14 2024 +0200
Commit: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
CommitDate: Tue Jan 28 22:00:47 2025 +0100
[NTOS:KD64] Implement KdSystemDebugControl: SysDbgReadBusData/SysDbgWriteBusData
---
ntoskrnl/kd64/kdapi.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 60 insertions(+)
diff --git a/ntoskrnl/kd64/kdapi.c b/ntoskrnl/kd64/kdapi.c
index 2d900336c24..482c817a9bc 100644
--- a/ntoskrnl/kd64/kdapi.c
+++ b/ntoskrnl/kd64/kdapi.c
@@ -2509,7 +2509,67 @@ KdSystemDebugControl(
break;
case SysDbgReadBusData:
+ if (InputBufferLength != sizeof(SYSDBG_BUS_DATA))
+ {
+ Status = STATUS_INFO_LENGTH_MISMATCH;
+ }
+ else
+ {
+ SYSDBG_BUS_DATA Request = *(PSYSDBG_BUS_DATA)InputBuffer;
+ PVOID LockedBuffer;
+ PMDL LockVariable;
+
+ Status = ExLockUserBuffer(Request.Buffer,
+ Request.Request,
+ PreviousMode,
+ IoWriteAccess,
+ &LockedBuffer,
+ &LockVariable);
+ if (NT_SUCCESS(Status))
+ {
+ Status = KdpSysReadBusData(Request.BusDataType,
+ Request.BusNumber,
+ Request.SlotNumber,
+ Request.Address,
+ LockedBuffer,
+ Request.Request,
+ &Length);
+ ExUnlockUserBuffer(LockVariable);
+ }
+ }
+ break;
+
case SysDbgWriteBusData:
+ if (InputBufferLength != sizeof(SYSDBG_BUS_DATA))
+ {
+ Status = STATUS_INFO_LENGTH_MISMATCH;
+ }
+ else
+ {
+ SYSDBG_BUS_DATA Request = *(PSYSDBG_BUS_DATA)InputBuffer;
+ PVOID LockedBuffer;
+ PMDL LockVariable;
+
+ Status = ExLockUserBuffer(Request.Buffer,
+ Request.Request,
+ PreviousMode,
+ IoReadAccess,
+ &LockedBuffer,
+ &LockVariable);
+ if (NT_SUCCESS(Status))
+ {
+ Status = KdpSysWriteBusData(Request.BusDataType,
+ Request.BusNumber,
+ Request.SlotNumber,
+ Request.Address,
+ LockedBuffer,
+ Request.Request,
+ &Length);
+ ExUnlockUserBuffer(LockVariable);
+ }
+ }
+ break;
+
case SysDbgCheckLowMemory:
UNIMPLEMENTED;
Status = STATUS_NOT_IMPLEMENTED;