https://git.reactos.org/?p=reactos.git;a=commitdiff;h=2fe3de6c69b98fa4267963...
commit 2fe3de6c69b98fa4267963bafca7afea0d74cd0f Author: Hervé Poussineau hpoussin@reactos.org AuthorDate: Sun Sep 22 21:40:14 2024 +0200 Commit: Hermès Bélusca-Maïto hermes.belusca-maito@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;