KdpFillMemory
VOID __stdcall KdpFillMemory(_DBGKD_MANIPULATE_STATE64 *m, _STRING *AdditionalData){
char *Buffer;
unsigned int TransferCount;
_DBGKD_MANIPULATE_STATE64 *v4;
__int64 v5;
NTSTATUS v7;
unsigned __int16 v8;
int v9;
char *v10;
char *v11;
unsigned int v12;
UINT64 TargetBaseAddress;
char *v14;
bool v15;
UINT64 Flags;
__int128 v17;
UINT64 ActualSize;
Buffer = AdditionalData->Buffer;
TransferCount = m->u.ReadMemory.TransferCount;
v4 = m;
v5 = m->u.GetVersion64.Unused[0];
v7 = 0;
v17 = 0i64;
v8 = v4->u.FillMemory.Flags;
v9 = 5;
v10 = &Buffer[v5];
v11 = Buffer;
v12 = 0;
if( (v8 & 2) != 0 )
{
v9 = 7;
}
else if( (v8 & 1) == 0 )
{
v7 = -1073741811;
}
if( !(_WORD)v5 || AdditionalData->Length < (unsigned __int16)v5 )
v7 = -1073741811;
if( v7 >= 0 )
{
TargetBaseAddress = v4->u.ReadMemory.TargetBaseAddress;
if( TransferCount )
{
do
{
LODWORD(Flags) = v9;
--TransferCount;
v7 = KdpCopyMemoryChunks(TargetBaseAddress, v11, 1ui64, 0i64, Flags, &ActualSize);
if( v7 < 0 )
break;
v14 = v11 + 1;
++TargetBaseAddress;
++v12;
v15 = v11 + 1 == v10;
v11 = Buffer;
if( !v15 )
v11 = v14;
}
while( TransferCount );
if( v12 )
v7 = 0;
v4 = m;
}
}
v4->ReturnStatus = v7;
v4->u.ReadMemory.TransferCount = v12;
LOWORD(v17) = 56;
*((_QWORD *)&v17 + 1) = v4;
KdSendPacket(2i64, &v17, 0i64, &KdpContext);
}Referenced by:
KdpSendWaitContinue