[NTOS:KD64] Implement KdSystemDebugControl: SysDbgReadBusData/SysDbgWriteBusData

This commit is contained in:
Hervé Poussineau 2024-09-22 21:40:14 +02:00 committed by Hermès Bélusca-Maïto
parent 19046a253b
commit 2fe3de6c69
No known key found for this signature in database
GPG key ID: 3B2539C65E7B93D0

View file

@ -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;