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