WheapWmiExecutePolicyManagementMethod
INT64 __stdcall WheapWmiExecutePolicyManagementMethod(
UINT64 MethodId,
UINT64 BufferSize,
UINT8 *Buffer,
UINT64 InputBufferSize,
UINT64 *BytesUsed){
int v6;
int v7;
int v8;
int v9;
unsigned int AllPolicyValues;
unsigned int v11;
UINT64 v12;
NTSTATUS PolicyValue;
int v14;
unsigned int AllPolicyBufferSize;
__int64 v16;
int v17;
unsigned int v18;
UINT64 Count[3];
UINT64 Value;
LODWORD(Value) = 0;
v6 = 0;
LODWORD(Count[0]) = 0;
v7 = MethodId - 1;
if( !v7 )
{
AllPolicyBufferSize = WheapGetAllPolicyBufferSize();
v6 = AllPolicyBufferSize + 12;
if( v18 < AllPolicyBufferSize + 12 )
goto LABEL_18;
*(_DWORD *)v16 = v17;
*(_DWORD *)(v16 + 8) = AllPolicyBufferSize;
AllPolicyValues = WheapGetAllPolicyValues(Count, AllPolicyBufferSize, (UINT8 *)(v16 + 12));
v14 = Count[0];
goto LABEL_20;
}
v8 = v7 - 1;
if( !v8 )
{
if( (unsigned int)InputBufferSize < 4 )
goto LABEL_13;
v6 = 8;
if( (unsigned int)BufferSize < 8 )
goto LABEL_18;
PolicyValue = WheapGetPolicyValue(*(unsigned int *)Buffer, &Value);
*(_DWORD *)Buffer = PolicyValue;
AllPolicyValues = PolicyValue;
if( PolicyValue )
goto LABEL_21;
v14 = Value;
LABEL_20:
*((_DWORD *)Buffer + 1) = v14;
goto LABEL_21;
}
v9 = v8 - 1;
if( !v9 )
{
if( (unsigned int)InputBufferSize >= 8 )
{
v6 = 4;
v12 = *(unsigned int *)Buffer;
LODWORD(Value) = *((_DWORD *)Buffer + 1);
if( (unsigned int)BufferSize >= 4 )
{
v11 = WheapSetPolicyValue(v12, &Value);
goto LABEL_11;
}
LABEL_18:
AllPolicyValues = -1073741789;
goto LABEL_21;
}
LABEL_13:
AllPolicyValues = -1073741811;
goto LABEL_21;
}
if( v9 == 1 )
{
v6 = 4;
if( (unsigned int)BufferSize >= 4 )
{
v11 = WheapCommitPolicy();
LABEL_11:
AllPolicyValues = v11;
*(_DWORD *)Buffer = v11;
goto LABEL_21;
}
goto LABEL_18;
}
AllPolicyValues = -1073741161;
LABEL_21:
*(_DWORD *)BytesUsed = v6;
return AllPolicyValues;
}Referenced by:
WheapWmiExecuteMethod