KdpReadPhysicalMemory
VOID __stdcall KdpReadPhysicalMemory(
_DBGKD_MANIPULATE_STATE64 *m,
_STRING *AdditionalData,
_KD_CONTEXT *KdContext,
_KD_CONTEXT *a4){
unsigned __int64 TransferCount;
unsigned int MaximumLength;
int v9;
unsigned int ActualBytesRead;
unsigned int v11;
unsigned int v12;
int v13;
int v14;
char v15;
UINT64 Flags;
__int64 v17[3];
UINT64 ActualSize;
ActualSize = (UINT64)KdContext;
TransferCount = m->u.ReadMemory.TransferCount;
v17[0] = 56i64;
v17[1] = (__int64)m;
if( TransferCount > (unsigned __int64)(unsigned int)KdTransportMaxPacketSize - 56 )
LODWORD(TransferCount) = KdTransportMaxPacketSize - 56;
MaximumLength = AdditionalData->MaximumLength;
v9 = 6;
ActualBytesRead = m->u.ReadMemory.ActualBytesRead;
if( (unsigned int)TransferCount > MaximumLength )
LODWORD(TransferCount) = MaximumLength;
LODWORD(ActualSize) = TransferCount;
v11 = ActualBytesRead - 1;
if( v11 )
{
v12 = v11 - 1;
if( v12 )
{
if( v12 == 1 )
v9 = 38;
}
else
{
v9 = 22;
}
}
else
{
v9 = 14;
}
if( m->ApiNumber == 12642 )
{
LODWORD(Flags) = v9;
if( (unsigned int)TransferCount > 4096 - (m->u.GetContext.Unused & 0xFFF) )
LODWORD(TransferCount) = 4096 - (m->u.GetContext.Unused & 0xFFF);
v13 = MmDbgCopyMemory(
m->u.ReadMemory.TargetBaseAddress,
AdditionalData->Buffer,
(unsigned int)TransferCount,
0i64,
Flags);
m->ReturnStatus = v13;
if( v13 < 0 )
LODWORD(TransferCount) = 0;
}
else
{
LODWORD(Flags) = v9;
v14 = KdpCopyMemoryChunks(
m->u.ReadMemory.TargetBaseAddress,
AdditionalData->Buffer,
(unsigned int)TransferCount,
0i64,
Flags,
&ActualSize);
LODWORD(TransferCount) = ActualSize;
m->ReturnStatus = v14;
}
m->u.ReadMemory.ActualBytesRead = TransferCount;
if( m->ApiNumber == 12642 && (unsigned int)TransferCount >= 4 )
{
RunLengthEncode((UINT64 *)AdditionalData->Buffer, (unsigned int)TransferCount);
if( v15 )
{
m->u.ReadMemory.ActualBytesRead = ((unsigned int)TransferCount >> 2) | 0x40000000;
LOWORD(TransferCount) = 4;
}
}
AdditionalData->Length = TransferCount;
KdSendPacket(2i64, v17, AdditionalData, a4);
}Referenced by:
KdpReadPhysicalMemoryLong
KdpSendWaitContinue