wil_details_StagingConfig_Load

NTSTATUS __stdcall wil_details_StagingConfig_Load(INT64 a1, INT64 a2, INT64 a3, CHAR *a4){
  int v4; 
  int v7; 
  __int64 v8; 
  VOID **PoolWithTag; 
  _WNF_STATE_NAME v10; 
  UINT64 v11; 
  unsigned __int64 v12; 
  NTSTATUS v13; 
  NTSTATUS v14; 
  unsigned __int64 v15; 
  UINT64 v16; 
  NTSTATUS result; 
  unsigned __int64 v18; 
  __int64 v19; 
  __int64 v20; 
  int v21; 
  _WNF_STATE_NAME v22; 
  int v23; 
  int v24; 
  int v25; 
  UINT64 ChangeStamp; 
  UINT64 BufferSize; 
  _WNF_STATE_NAME v28; 
  _WNF_STATE_NAME StateName; 

  v4 = a2;
  v28.Data[0] = a2;
  BufferSize = (UINT64)a4;
  memset((VOID *)(a1 + 8), 0i64, 0x50u);
  v7 = 0;
  *(_DWORD *)a1 = v4;
  *(_DWORD *)(a1 + 4) = 0;
  v8 = 200i64;
  PoolWithTag = 0i64;
  v10 = (_WNF_STATE_NAME)_WIL_WNF_WIL_USER_FEATURE_STORE;
  v11 = 0i64;
  v12 = -(__int64)(a4 != 0i64) & 0xC8;
  if( !v28.Data[0] )
    v10 = (_WNF_STATE_NAME)_WIL_WNF_WIL_MACHINE_FEATURE_STORE;
  StateName = v10;
  LODWORD(ChangeStamp) = a4 != 0i64 ? 0xC8 : 0;
  v13 = ZwQueryWnfStateData(&StateName, 0i64, 0i64, (UINT64 *)(a1 + 8), a4, &ChangeStamp);
  v14 = v13;
  if( !v13 )
  {
    v11 = BufferSize;
    if( !BufferSize )
      goto LABEL_15;
  }
  while( v13 == -1073741789 )
  {
LABEL_15:
    if( v12 < 0xC8 )
      v12 = 200i64;
    v18 = v12;
    v12 = (unsigned int)ChangeStamp;
    if( v18 >= (unsigned int)ChangeStamp )
      v12 = v18;
    if( v12 < 0x10 )
      v12 = 16i64;
    if( PoolWithTag )
      ExFreePoolWithTag(PoolWithTag, 0x4C4957u);
    PoolWithTag = ExAllocatePoolWithTag(0x200ui64, v12, 4999511i64);
    if( !PoolWithTag )
      return -1073741670;
    LODWORD(ChangeStamp) = v12;
    v13 = ZwQueryWnfStateData(&StateName, 0i64, 0i64, (UINT64 *)(a1 + 8), PoolWithTag, &ChangeStamp);
    v14 = v13;
    v11 = (UINT64)PoolWithTag;
  }
  if( v14 || !v11 )
  {
    if( PoolWithTag )
      ExFreePoolWithTag(PoolWithTag, 0x4C4957u);
    return v14;
  }
  else
  {
    v15 = (unsigned int)ChangeStamp;
    if( (unsigned int)ChangeStamp > 4 )
      *(_BYTE *)(a1 + 12) = *(_BYTE *)v11;
    if( (unsigned int)v15 >= 0x10
      && *(_BYTE *)(a1 + 12) == 2
      && (v19 = *(unsigned __int16 *)(v11 + 2), (unsigned __int16)v19 >= 0x10u)
      && (v20 = *(unsigned __int16 *)(v11 + 4),
          v15 >= v19 + 16 * (unsigned __int64)*(unsigned __int16 *)(v11 + 6) + 12 * v20) )
    {
      HIDWORD(ChangeStamp) = 0;
      v21 = 0;
      if( (_WORD)v20 )
      {
        v22 = (_WNF_STATE_NAME)_WIL_WNF_WIL_USER_FEATURE_STORE_MODIFIED;
        if( !v28.Data[0] )
          v22 = (_WNF_STATE_NAME)_WIL_WNF_WIL_MACHINE_FEATURE_STORE_MODIFIED;
        v28 = v22;
        LODWORD(BufferSize) = 0;
        ZwQueryWnfStateData(&v28, 0i64, 0i64, (UINT64 *)((char *)&ChangeStamp + 4), 0i64, &BufferSize);
        LODWORD(v15) = ChangeStamp;
        v21 = HIDWORD(ChangeStamp);
      }
      *(_QWORD *)(a1 + 24) = v11;
      *(_QWORD *)(a1 + 32) = v11 + 16;
      *(_QWORD *)(a1 + 40) = v11 + 16 + 12i64 * *(unsigned __int16 *)(v11 + 4);
      *(_DWORD *)(a1 + 48) = v21 != 0;
      if( *(_BYTE *)v11 == 2 && *(_BYTE *)(v11 + 1) < 2u )
      {
        v23 = 16 * *(unsigned __int16 *)(v11 + 6);
        v24 = 3 * *(unsigned __int16 *)(v11 + 4);
        v25 = *(unsigned __int16 *)(v11 + 2);
        *(_DWORD *)(a1 + 16) = 1;
        LODWORD(v15) = v25 + v23 + 4 * v24;
      }
    }
    else
    {
      LODWORD(ChangeStamp) = 16;
      *(_OWORD *)v11 = 0i64;
      *(_DWORD *)v11 = 1049090;
      LODWORD(v15) = ChangeStamp;
      *(_QWORD *)(a1 + 24) = v11;
      v16 = v11 + *(unsigned __int16 *)(v11 + 2);
      *(_QWORD *)(a1 + 32) = v16;
      *(_QWORD *)(a1 + 40) = v16 + 12i64 * *(unsigned __int16 *)(v11 + 4);
    }
    *(_QWORD *)(a1 + 64) = (unsigned int)v15;
    if( PoolWithTag )
      v8 = v12;
    *(_QWORD *)(a1 + 56) = v11;
    *(_QWORD *)(a1 + 72) = v8;
    LOBYTE(v7) = v11 == (_QWORD)PoolWithTag;
    result = 0;
    *(_DWORD *)(a1 + 80) = v7;
  }
  return result;
}

Referenced by:

wil_StagingConfig_QueryFeatureState