[NTOS:KD64] Implement KdSystemDebugControl: SysDbgReadVirtual/SysDbgWriteVirtual

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

View file

@ -2304,6 +2304,35 @@ KdSystemDebugControl(
case SysDbgReadVirtual: case SysDbgReadVirtual:
case SysDbgWriteVirtual: case SysDbgWriteVirtual:
if (InputBufferLength != sizeof(SYSDBG_VIRTUAL))
{
Status = STATUS_INFO_LENGTH_MISMATCH;
}
else
{
SYSDBG_VIRTUAL Request = *(PSYSDBG_VIRTUAL)InputBuffer;
PVOID LockedBuffer;
PMDL LockVariable;
Status = ExLockUserBuffer(Request.Buffer,
Request.Request,
PreviousMode,
Command == SysDbgReadVirtual ? IoWriteAccess : IoReadAccess,
&LockedBuffer,
&LockVariable);
if (NT_SUCCESS(Status))
{
Status = KdpCopyMemoryChunks((ULONG64)(ULONG_PTR)Request.Address,
Request.Buffer,
Request.Request,
0,
Command == SysDbgReadVirtual ? 0 : MMDBG_COPY_WRITE,
&Length);
ExUnlockUserBuffer(LockVariable);
}
}
break;
case SysDbgReadPhysical: case SysDbgReadPhysical:
case SysDbgWritePhysical: case SysDbgWritePhysical:
case SysDbgReadControlSpace: case SysDbgReadControlSpace: