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