KdpSendWaitContinue

KCONTINUE_STATUS __fastcall KdpSendWaitContinue(
        UINT64 OutPacketType,
        _STRING *OutMessageHeader,
        _STRING *OutMessageData,
        _CONTEXT *ContextRecord){
  int v7; 
  _CONTEXT *v8; 
  __int128 *v9; 
  INT64 *v10; 
  UINT8 v11; 
  KCONTINUE_STATUS result; 
  ULONG_PTR BugCheckParameter4; 
  UINT64 *ActualSize; 
  INT64 a2[2]; 
  int v16; 
  UINT64 Data; 
  UINT64 v18; 
  _QWORD v19[2]; 
  UINT64 Actual; 
  UINT64 v21; 
  __int128 v22; 
  _QWORD v23[2]; 
  _QWORD v24[2]; 
  _QWORD v25[2]; 
  _QWORD v26[2]; 
  _QWORD v27[2]; 
  _QWORD v28[2]; 
  _QWORD v29[2]; 
  _QWORD v30[2]; 
  _QWORD v31[2]; 
  _QWORD v32[2]; 
  _QWORD v33[2]; 
  _QWORD v34[2]; 
  INT64 v35[2]; 
  PVOID BaseAddress[2]; 
  __int128 Buffer; 
  __int64 v38; 
  v38 = 0i64;
  v19[0] = 3670016i64;
  a2[0] = 0x10000000i64;
  v16 = 0;
  KdpContextSent = 0;
  v19[1] = v35;
  a2[1] = (INT64)KdpMessageBuffer;
  *(_OWORD *)v35 = 0i64;
  *(_OWORD *)BaseAddress = 0i64;
  Buffer = 0i64;
  KdSendPacket(7i64, OutMessageHeader, OutMessageData, &KdpContext);
  while( !(_BYTE)KdDebuggerNotPresent )
  {
    while( 1 )
    {
      if( (_DWORD)KeNumberProcessors_0 == 1 )
        KeQueryPerformanceCounter(0i64);
      v7 = KdReceivePacket(2i64, v19, a2, &v16, &KdpContext);
      if( v7 == 2 )
        break;
      if( v7 != 1 )
      {
        switch( LODWORD(v35[0]) )
        {
          case 0x3130:
            KdpReadVirtualMemory((INT64)v35, (INT64)a2, (UINT64)v8);
            continue;
          case 0x3131:
            LODWORD(BugCheckParameter4) = 5;
            v22 = 0i64;
            LODWORD(v35[1]) = KdpCopyMemoryChunks(
                                (UINT64)BaseAddress[0],
                                (PVOID)a2[1],
                                LOWORD(a2[0]),
                                0i64,
                                BugCheckParameter4,
                                (UINT64 *)((char *)&BaseAddress[1] + 4));
            v9 = &v22;
            v10 = 0i64;
            LOWORD(v22) = 56;
            *((_QWORD *)&v22 + 1) = v35;
            goto LABEL_45;
          case 0x3132:
            v24[0] = 56i64;
            v24[1] = v35;
            KdpGetContext((_DBGKD_MANIPULATE_STATE64 *)v35, (_STRING *)a2, ContextRecord);
            if( !LODWORD(v35[1]) )
              KdpContextSent = 1;
            v9 = (__int128 *)v24;
            goto LABEL_44;
          case 0x3133:
            KdpSetContext((INT64)v35, (UINT16 *)a2, ContextRecord);
            continue;
          case 0x3134:
            v25[0] = 56i64;
            v25[1] = v35;
            LODWORD(BaseAddress[1]) = KdpAddBreakpoint(BaseAddress[0], 0xCCui64, 1u, 0);
            v9 = (__int128 *)v25;
            LODWORD(v35[1]) = LODWORD(BaseAddress[1]) == 0 ? 0xC0000001 : 0;
            v10 = 0i64;
            goto LABEL_45;
          case 0x3135:
            v26[0] = 56i64;
            v26[1] = v35;
            v11 = KdpDeleteBreakpoint(LODWORD(BaseAddress[0]));
            v9 = (__int128 *)v26;
            LODWORD(v35[1]) = v11 == 0 ? 0xC0000001 : 0;
            v10 = 0i64;
            goto LABEL_45;
          case 0x3136:
            return SLODWORD(BaseAddress[0]) >= 0;
          case 0x3137:
            KdpReadControlSpace((INT64)v35, (INT64)a2, (UINT64)v8);
            continue;
          case 0x3138:
            KdpWriteControlSpace((INT64)v35, (UINT16 *)a2, (UINT64)v8);
            continue;
          case 0x3139:
            HIDWORD(BaseAddress[1]) = 0;
            v27[0] = 56i64;
            v27[1] = v35;
            LODWORD(ActualSize) = BaseAddress[1];
            LODWORD(v35[1]) = KdpSysReadIoSpace(
                                Isa,
                                0i64,
                                1ui64,
                                (UINT64)BaseAddress[0],
                                (char *)&BaseAddress[1] + 4,
                                (UINT64)ActualSize,
                                &Actual);
            v9 = (__int128 *)v27;
            v10 = 0i64;
            goto LABEL_45;
          case 0x313A:
            v28[0] = 56i64;
            v28[1] = v35;
            LODWORD(ActualSize) = BaseAddress[1];
            LODWORD(v35[1]) = KdpSysWriteIoSpace(
                                Isa,
                                0i64,
                                1ui64,
                                (UINT64)BaseAddress[0],
                                (char *)&BaseAddress[1] + 4,
                                (UINT64)ActualSize,
                                (UINT64 *)((char *)&Actual + 4));
            v9 = (__int128 *)v28;
            v10 = 0i64;
            goto LABEL_45;
          case 0x313B:
            KiResumeForReboot = 1;
            KdExitDebugger(0);
            ((void(__fastcall *)(_QWORD))off_140C008A8[0])(0i64);
            HalReturnToFirmware(3);
          case 0x313C:
            if( SLODWORD(BaseAddress[0]) < 0 )
              return 0;
            KdpGetStateChange((INT64)v35, (INT64)ContextRecord);
            return 1;
          case 0x313D:
            KdpReadPhysicalMemory((INT64)v35, (INT64)a2, (UINT64)v8, (INT64)&KdpContext);
            continue;
          case 0x313E:
            KdpWritePhysicalMemory((INT64)v35, (INT64)a2);
            continue;
          case 0x3140:
          case 0x3141:
          case 0x3142:
          case 0x315A:
            continue;
          case 0x3144:
            v29[0] = 56i64;
            v29[1] = v35;
            LODWORD(ActualSize) = BaseAddress[0];
            DWORD2(Buffer) = 0;
            LODWORD(v35[1]) = KdpSysReadIoSpace(
                                SHIDWORD(BaseAddress[0]),
                                LODWORD(BaseAddress[1]),
                                HIDWORD(BaseAddress[1]),
                                Buffer,
                                (char *)&Buffer + 8,
                                (UINT64)ActualSize,
                                &v21);
            v9 = (__int128 *)v29;
            v10 = 0i64;
            goto LABEL_45;
          case 0x3145:
            v30[0] = 56i64;
            v30[1] = v35;
            LODWORD(ActualSize) = BaseAddress[0];
            LODWORD(v35[1]) = KdpSysWriteIoSpace(
                                SHIDWORD(BaseAddress[0]),
                                LODWORD(BaseAddress[1]),
                                HIDWORD(BaseAddress[1]),
                                Buffer,
                                (char *)&Buffer + 8,
                                (UINT64)ActualSize,
                                (UINT64 *)((char *)&v21 + 4));
            v9 = (__int128 *)v30;
            v10 = 0i64;
            goto LABEL_45;
          case 0x3146:
            LODWORD(v35[1]) = 0;
            LODWORD(v35[0]) = 12614;
            v33[0] = 56i64;
            v33[1] = v35;
            v9 = (__int128 *)v33;
            Buffer = xmmword_140C0F398;
            v10 = 0i64;
            *(_OWORD *)BaseAddress = KdVersionBlock;
            v38 = qword_140C0F3A8;
            goto LABEL_45;
          case 0x3147:
            if( !(unsigned int)KdpWriteBreakPointEx(v35, (UINT16 *)a2) )
              continue;
            return 0;
          case 0x3148:
            KdpRestoreBreakPointEx((INT64)v35, (UINT16 *)a2);
            continue;
          case 0x3149:
            KdExitDebugger(0);
            KeBugCheckEx(0xE2u, 0i64, 0i64, 0i64, 0i64);
            return result;
          case 0x3150:
            return KeSwitchFrozenProcessor(HIWORD(v35[0]));
          case 0x3151:
            LODWORD(v35[1]) = -1073741823;
            v9 = (__int128 *)v34;
            v34[0] = 56i64;
            v10 = 0i64;
            v34[1] = v35;
            goto LABEL_45;
          case 0x3152:
            Data = 0i64;
            v31[0] = 56i64;
            v31[1] = v35;
            LODWORD(v35[1]) = KdpSysReadMsr(LODWORD(BaseAddress[0]), &Data);
            v9 = (__int128 *)v31;
            v10 = 0i64;
            *(PVOID *)((char *)BaseAddress + 4) = (PVOID)Data;
            goto LABEL_45;
          case 0x3153:
            v32[0] = 56i64;
            v32[1] = v35;
            v18 = *(UINT64 *)((char *)BaseAddress + 4);
            LODWORD(v35[1]) = KdpSysWriteMsr(LODWORD(BaseAddress[0]), &v18);
            v9 = (__int128 *)v32;
            v10 = 0i64;
            goto LABEL_45;
          case 0x3156:
            KdpSearchMemory((_DBGKD_MANIPULATE_STATE64 *)v35, (_STRING *)a2, v8);
            continue;
          case 0x3157:
            KdpGetBusData(v35, (INT64)a2, (UINT64)v8);
            continue;
          case 0x3158:
            KdpSetBusData((PSTR)v35, (PSTR)a2, (UINT64)v8);
            continue;
          case 0x3159:
            v23[0] = 56i64;
            v23[1] = v35;
            if( KdpSearchInProgress )
              KdpSearchPhysicalPageRange(4ui64);
            LODWORD(v35[1]) = 0;
            v9 = (__int128 *)v23;
            v10 = 0i64;
            goto LABEL_45;
          case 0x315B:
            KdpFillMemory((INT64)v35, (INT64)a2);
            continue;
          case 0x315C:
            KdpQueryMemory((INT64)v35);
            continue;
          case 0x315F:
            KdpGetContextEx((_DBGKD_MANIPULATE_STATE64 *)v35, (_STRING *)a2, ContextRecord);
            continue;
          case 0x3160:
            KdpSetContextEx((INT64)v35, (INT64)a2, ContextRecord);
            continue;
          case 0x3161:
            KdpWriteCustomBreakpoint((_DBGKD_MANIPULATE_STATE64 *)v35, (_STRING *)0x140000000i64, v8);
            continue;
          case 0x3162:
            KdpReadPhysicalMemoryLong((INT64)v35, a2, (UINT64)v8);
            continue;
          default:
            LOWORD(a2[0]) = 0;
            v9 = (__int128 *)v19;
            LODWORD(v35[1]) = -1073741823;
LABEL_44:
            v10 = a2;
LABEL_45:
            KdSendPacket(2i64, v9, v10, &KdpContext);
            continue;
        }
      }
    }
    KdSendPacket(7i64, OutMessageHeader, OutMessageData, &KdpContext);
  }
  return 1;
}

Referenced by:

KdpReportCommandStringStateChange
KdpReportExceptionStateChange
KdpReportLoadSymbolsStateChange