HalpChannelPowerRequest

NTSTATUS __stdcall HalpChannelPowerRequest(PVOID Buffer){
  int v1; 
  _DWORD *v2; 
  unsigned int v3; 
  _DWORD *v4; 
  NTSTATUS v6; 
  int v7; 
  __int16 v8; 
  __int16 v9; 
  unsigned int v10; 
  unsigned int v12; 
  WCHAR *v13; 
  int v14; 
  __int64 v15; 
  int v16; 
  __int64 v17; 
  v3 = 0;
  v4 = v2;
  if( v1 != 24 )
    return -1073741820;
  v7 = *((_DWORD *)Buffer + 1);
  v8 = *(_WORD *)Buffer;
  v9 = *((_WORD *)Buffer + 1);
  v10 = *((_DWORD *)Buffer + 4);
  if( v7 == 2 )
  {
    if( v10 >= 2 )
      return -1073741808;
  }
  else if( ((v7 - 1) & 0xFFFFFFFC) != 0 )
  {
    return -1073741808;
  }
  v12 = 0;
  v6 = -1073741275;
  if( HalpChannelMemoryRangeCount )
  {
    v13 = HalpChannelMemoryRanges + 6;
    while( *(v13 - 1) != v8 || *v13 != v9 )
    {
      ++v12;
      v13 += 8;
      if( v12 >= HalpChannelMemoryRangeCount )
        goto LABEL_15;
    }
    v3 = v12;
    v6 = 0;
  }
LABEL_15:
  if( v6 >= 0 )
  {
    if( v7 == 2 )
    {
      if( v10 == 1 )
        v10 = HIBYTE(HalpChannelMemoryRanges[8 * v3 + 7]);
      *((_QWORD *)Buffer + 2) = v10;
    }
    HalpSendPccCommand(HalpChannelMemoryRanges[8 * v3 + 4], (__int64)Buffer);
    v6 = v14;
    if( v14 >= 0 )
    {
      v15 = qword_140C48A20;
      v16 = *((_DWORD *)Buffer + 1);
      *((_DWORD *)Buffer + 2) = *(_DWORD *)(qword_140C48A20 + 4);
      switch( v16 )
      {
        case 2:
          goto LABEL_29;
        case 1:
          *((_QWORD *)Buffer + 2) = *(_DWORD *)(v15 + 8) != 0;
          goto LABEL_29;
        case 3:
          v17 = *(_QWORD *)(v15 + 24);
          break;
        case 4:
          v17 = *(_QWORD *)(v15 + 16);
          break;
        default:
          goto LABEL_29;
      }
      *((_QWORD *)Buffer + 2) = v17;
LABEL_29:
      if( v4 )
        *v4 = 24;
    }
  }
  return v6;
}

Referenced by:

HaliQuerySystemInformation
HaliSetSystemInformation