[NTOS:KD64] Implement KdSystemDebugControl: SysDbgReadIoSpace/SysDbgWriteIoSpace

This commit is contained in:
Hervé Poussineau 2024-09-22 21:39:47 +02:00 committed by Hermès Bélusca-Maïto
parent 0589c178ba
commit b187662f39
No known key found for this signature in database
GPG key ID: 3B2539C65E7B93D0

View file

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