WheapWmiExecutePolicyManagementMethod
NTSTATUS __stdcall WheapWmiExecutePolicyManagementMethod(
UINT64 MethodId,
UINT64 BufferSize,
UINT8 *Buffer,
UINT64 InputBufferSize,
UINT64 *BytesUsed,
INT64 a6,
INT64 a7,
INT64 a8){
int v9;
int v10;
int v11;
int v12;
NTSTATUS AllPolicyValues;
NTSTATUS v14;
UINT64 v15;
NTSTATUS PolicyValue;
int v17;
unsigned int AllPolicyBufferSize;
__int64 v19;
int v20;
unsigned int v21;
__int64 Count[3];
UINT64 Value;
LODWORD(Value) = 0;
v9 = 0;
LODWORD(Count[0]) = 0;
v10 = MethodId - 1;
if( !v10 )
{
AllPolicyBufferSize = WheapGetAllPolicyBufferSize();
v9 = AllPolicyBufferSize + 12;
if( v21 < AllPolicyBufferSize + 12 )
goto LABEL_18;
*(_DWORD *)v19 = v20;
*(_DWORD *)(v19 + 8) = AllPolicyBufferSize;
AllPolicyValues = WheapGetAllPolicyValues((UINT64 *)Count, AllPolicyBufferSize, (UINT8 *)(v19 + 12));
v17 = Count[0];
goto LABEL_20;
}
v11 = v10 - 1;
if( !v11 )
{
if( (unsigned int)InputBufferSize < 4 )
goto LABEL_13;
v9 = 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;
v17 = Value;
LABEL_20:
*((_DWORD *)Buffer + 1) = v17;
goto LABEL_21;
}
v12 = v11 - 1;
if( !v12 )
{
if( (unsigned int)InputBufferSize >= 8 )
{
v9 = 4;
v15 = *(unsigned int *)Buffer;
LODWORD(Value) = *((_DWORD *)Buffer + 1);
if( (unsigned int)BufferSize >= 4 )
{
v14 = WheapSetPolicyValue(v15, &Value);
goto LABEL_11;
}
LABEL_18:
AllPolicyValues = -1073741789;
goto LABEL_21;
}
LABEL_13:
AllPolicyValues = -1073741811;
goto LABEL_21;
}
if( v12 == 1 )
{
v9 = 4;
if( (unsigned int)BufferSize >= 4 )
{
v14 = WheapCommitPolicy();
LABEL_11:
AllPolicyValues = v14;
*(_DWORD *)Buffer = v14;
goto LABEL_21;
}
goto LABEL_18;
}
AllPolicyValues = -1073741161;
LABEL_21:
*(_DWORD *)BytesUsed = v9;
return AllPolicyValues;
}Referenced by:
No references.