KdpSysReadControlSpace

NTSTATUS __stdcall KdpSysReadControlSpace(
        UINT64 Processor,
        UINT64 Address,
        PVOID Buffer,
        UINT64 Request,
        UINT64 *Actual){
  UINT64 *ActualSize; 
  unsigned int v6; 
  __int64 v8; 
  __int64 v10; 
  int v11; 
  int v12; 
  UINT64 **p_Buffera; 
  UINT64 v14; 
  UINT64 Flags; 
  __int64 Buffera; 
  ActualSize = Actual;
  v6 = Request;
  Buffera = 0i64;
  v8 = (unsigned int)Processor;
  *(_DWORD *)Actual = 0;
  if( (unsigned int)Processor >= (unsigned int)KeQueryActiveProcessorCountEx(0xFFFFu) )
    return -1073741823;
  v10 = (__int64)*(&KiProcessorBlock + v8);
  if( !v10 )
    return -1073741823;
  Actual = (UINT64 *)*(&KiProcessorBlock + v8);
  if( Address > 3 )
    return -1073741823;
  if( !(_DWORD)Address )
  {
    p_Buffera = (UINT64 **)&Buffera;
    Buffera = v10 - 384;
    goto LABEL_12;
  }
  v11 = Address - 1;
  if( !v11 )
  {
    p_Buffera = &Actual;
    goto LABEL_12;
  }
  v12 = v11 - 1;
  if( v12 )
  {
    if( v12 == 1 )
    {
      p_Buffera = (UINT64 **)(v10 + 8);
LABEL_12:
      v14 = 8i64;
      goto LABEL_13;
    }
    return -1073741823;
  }
  p_Buffera = (UINT64 **)(v10 + 256);
  v14 = 240i64;
LABEL_13:
  LODWORD(Flags) = 5;
  if( (unsigned int)v14 > v6 )
    v14 = v6;
  return KdpCopyMemoryChunks((UINT64)Buffer, p_Buffera, v14, 0i64, Flags, ActualSize);
}

Referenced by:

KdSystemDebugControl
KdpReadControlSpace