HalpChannelPowerRequest

VOID __fastcall HalpChannelPowerRequest(VOID *Buffer, UINT64 BufferSize, UINT64 *ReturnedLength){
  unsigned int v3; 
  int v6; 
  __int16 v7; 
  __int16 v8; 
  unsigned int v9; 
  unsigned int v10; 
  int v11; 
  _WORD *v12; 
  int v13; 
  __int64 v14; 
  int v15; 
  __int64 v16; 

  v3 = 0;
  if( (_DWORD)BufferSize == 24 )
  {
    v6 = *((_DWORD *)Buffer + 1);
    v7 = *(_WORD *)Buffer;
    v8 = *((_WORD *)Buffer + 1);
    v9 = *((_DWORD *)Buffer + 4);
    if( v6 == 2 )
    {
      if( v9 >= 2 )
        return;
    }
    else if( ((v6 - 1) & 0xFFFFFFFC) != 0 )
    {
      return;
    }
    v10 = 0;
    v11 = -1073741275;
    if( *(&CmpDummyThreadEvent + 1022) )
    {
      v12 = (_WORD *)(*(&CmpDummyThreadEvent + 510) + 12i64);
      while( *(v12 - 1) != v7 || *v12 != v8 )
      {
        ++v10;
        v12 += 8;
        if( v10 >= *(&CmpDummyThreadEvent + 1022) )
          goto LABEL_13;
      }
      v3 = v10;
      v11 = 0;
    }
LABEL_13:
    if( v11 >= 0 )
    {
      if( v6 == 2 )
      {
        if( v9 == 1 )
          v9 = *(unsigned __int8 *)(*(&CmpDummyThreadEvent + 510) + 16i64 * v3 + 15);
        *((_QWORD *)Buffer + 2) = v9;
      }
      HalpSendPccCommand(*(unsigned __int16 *)(*(&CmpDummyThreadEvent + 510) + 16i64 * v3 + 8), (INT64)Buffer);
      if( v13 >= 0 )
      {
        v14 = *(&CmpDummyThreadEvent + 508);
        v15 = *((_DWORD *)Buffer + 1);
        *((_DWORD *)Buffer + 2) = *(_DWORD *)(*(&CmpDummyThreadEvent + 508) + 4i64);
        switch( v15 )
        {
          case 2:
            goto LABEL_27;
          case 1:
            *((_QWORD *)Buffer + 2) = *(_DWORD *)(v14 + 8) != 0;
            goto LABEL_27;
          case 3:
            v16 = *(_QWORD *)(v14 + 24);
            break;
          case 4:
            v16 = *(_QWORD *)(v14 + 16);
            break;
          default:
            goto LABEL_27;
        }
        *((_QWORD *)Buffer + 2) = v16;
LABEL_27:
        if( ReturnedLength )
          *(_DWORD *)ReturnedLength = 24;
      }
    }
  }
}

Referenced by:

HaliQuerySystemInformation
HaliSetSystemInformation