KdpReadPhysicalMemoryLong

UINT64 __fastcall KdpReadPhysicalMemoryLong(INT64 a1, _WORD *a2, UINT64 a3){
  UINT64 result; 
  unsigned int v4; 
  __int64 v6; 
  int v8; 
  unsigned int v9; 
  INT64 v10[7]; 
  void *retaddr; 
  result = (UINT64)&retaddr;
  v4 = *(_DWORD *)(a1 + 24);
  v6 = *(_QWORD *)(a1 + 16);
  v8 = *(_DWORD *)(a1 + 28);
  v10[2] = qword_140C42DF0;
  for( *(_OWORD *)v10 = *(_OWORD *)&KdpContext; v4; v4 -= result )
  {
    *(_QWORD *)(a1 + 16) = v6;
    *(_DWORD *)(a1 + 24) = v4;
    *(_DWORD *)(a1 + 28) = v8;
    *a2 = 0;
    *(_DWORD *)(a1 + 8) = 0;
    HIWORD(v10[0]) = 13;
    KdpReadPhysicalMemory(a1, (INT64)a2, a3, (INT64)v10);
    result = *(_DWORD *)(a1 + 28) & 0xC0000000;
    v9 = 4 * *(_DWORD *)(a1 + 28);
    if( (_DWORD)result != 0x40000000 )
      v9 = *(_DWORD *)(a1 + 28);
    if( *(int *)(a1 + 8) < 0 || !v9 )
      break;
    result = v4;
    if( v9 <= v4 )
      result = v9;
    v6 += result;
  }
  return result;
}

Referenced by:

KdpSendWaitContinue