PpmWmiDispatch
NTSTATUS __stdcall PpmWmiDispatch(
tagWMIACTIONCODE ActionCode,
VOID *DataPath,
UINT64 BufferSize,
VOID *Buffer,
VOID *Context,
UINT64 *Size){
char v6;
UINT8 GetAllData;
__int32 v8;
__int32 v9;
__int32 v10;
NTSTATUS result;
__int64 v12;
__int64 v13;
volatile signed __int32 *v14;
__int64 v15;
__int64 v16;
__int64 v17;
__int64 v18;
__int64 v19;
v6 = 0;
GetAllData = 0;
if( ActionCode == WmiGetAllData )
{
GetAllData = 1;
goto LABEL_45;
}
v8 = ActionCode - 1;
if( !v8 )
{
LABEL_45:
result = PpmWmiGetAllData(
(PROCESSOR_POWER_STATE *)((char *)Context - 224),
(_GUID *)DataPath,
BufferSize,
Buffer,
Size,
GetAllData);
goto LABEL_9;
}
v9 = v8 - 3;
if( !v9 )
{
v6 = 1;
goto LABEL_12;
}
v10 = v9 - 1;
if( !v10 )
{
LABEL_12:
*(_DWORD *)Size = 0;
v12 = *(_QWORD *)DataPath;
v13 = *(_QWORD *)&PPM_PERFSTATE_CHANGE_GUID.Data1 - *(_QWORD *)DataPath;
if( *(_QWORD *)&PPM_PERFSTATE_CHANGE_GUID.Data1 == *(_QWORD *)DataPath )
v13 = *(_QWORD *)PPM_PERFSTATE_CHANGE_GUID.Data4 - *((_QWORD *)DataPath + 1);
if( v13 )
{
v15 = *(_QWORD *)&PPM_PERFSTATE_DOMAIN_CHANGE_GUID.Data1 - v12;
if( *(_QWORD *)&PPM_PERFSTATE_DOMAIN_CHANGE_GUID.Data1 == v12 )
v15 = *(_QWORD *)PPM_PERFSTATE_DOMAIN_CHANGE_GUID.Data4 - *((_QWORD *)DataPath + 1);
if( v15 )
{
v16 = PPM_IDLESTATE_CHANGE_GUID - v12;
if( PPM_IDLESTATE_CHANGE_GUID == v12 )
v16 = 0x6C4CACA73084CC9Ei64 - *((_QWORD *)DataPath + 1);
if( v16 )
{
v17 = *(_QWORD *)&PPM_IDLE_ACCOUNTING_EX_GUID.Data1 - v12;
if( *(_QWORD *)&PPM_IDLE_ACCOUNTING_EX_GUID.Data1 == v12 )
v17 = *(_QWORD *)PPM_IDLE_ACCOUNTING_EX_GUID.Data4 - *((_QWORD *)DataPath + 1);
if( v17 )
{
v18 = *(_QWORD *)&PPM_THERMALCONSTRAINT_GUID.Data1 - v12;
if( *(_QWORD *)&PPM_THERMALCONSTRAINT_GUID.Data1 == v12 )
v18 = *(_QWORD *)PPM_THERMALCONSTRAINT_GUID.Data4 - *((_QWORD *)DataPath + 1);
if( v18 )
{
v19 = *(_QWORD *)&PPM_THERMAL_POLICY_CHANGE_GUID.Data1 - v12;
if( *(_QWORD *)&PPM_THERMAL_POLICY_CHANGE_GUID.Data1 == v12 )
v19 = *(_QWORD *)PPM_THERMAL_POLICY_CHANGE_GUID.Data4 - *((_QWORD *)DataPath + 1);
if( v19 )
return -1073741163;
v14 = (volatile signed __int32 *)((char *)&stru_140CF2E80 + 7800);
}
else
{
v14 = &WmiThermalEventEnabled;
}
}
else
{
v14 = (volatile signed __int32 *)&WmiIdleAccntEventEnabled;
}
}
else
{
v14 = (volatile signed __int32 *)&WmiIdleStateEventEnabled;
}
}
else
{
v14 = &dword_140CED0CC;
}
}
else
{
v14 = (volatile signed __int32 *)&dword_140CED0D0;
}
if( v6 )
{
if( _InterlockedIncrement(v14) == 1 && v14 == (volatile signed __int32 *)&WmiIdleAccntEventEnabled )
KiSetTimerEx(&PpmWmiIdleAccountingTimer, 0i64, 10000i64, 0, &PpmWmiIdleAccountingDpc);
}
else if( _InterlockedExchangeAdd(v14, 0xFFFFFFFF) == 1
&& v14 == (volatile signed __int32 *)&WmiIdleAccntEventEnabled )
{
KeCancelTimer((INT64)&PpmWmiIdleAccountingTimer);
}
return 0;
}
if( v10 != 3 )
{
*(_DWORD *)Size = 0;
return -1073741808;
}
result = PpmWmiRegisterInfo(*((unsigned int *)Context - 8239), (UINT64)DataPath, (VOID *)BufferSize, (UINT64 *)Buffer);
LABEL_9:
if( result >= 0 )
return 0;
return result;
}Referenced by:
No references.