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.