wil_details_EvaluateFeatureDependencies_ReevaluateCachedFeatureEnabledState

NTSTATUS __stdcall wil_details_EvaluateFeatureDependencies_ReevaluateCachedFeatureEnabledState(
        INT32 *a1,
        UINT64 a2,
        INT64 a3){
  unsigned int v3; 
  unsigned int v5; 
  INT64 *v6; 
  INT64 v7; 
  char CachedFeatureEnabledState; 
  bool v9; 
  unsigned int v10; 

  v3 = a2;
  v5 = ((unsigned int)a2 >> 4) & 1;
  if( v5 )
  {
    v6 = *(INT64 **)(a3 + 24);
    if( v6 )
    {
      do
      {
        v7 = *v6;
        if( !*v6 )
          break;
        if( *(_BYTE *)(v7 + 22) || *(_BYTE *)(v7 + 21) )
        {
          if( !v5 )
            goto LABEL_12;
          v9 = *(_BYTE *)(v7 + 23) == 0;
        }
        else
        {
          CachedFeatureEnabledState = wil_details_EvaluateFeatureDependencies_GetCachedFeatureEnabledState(
                                        *(INT32 **)v7,
                                        *v6);
          if( !v5 )
            goto LABEL_12;
          v9 = (CachedFeatureEnabledState & 8) == 0;
        }
        if( v9 )
        {
LABEL_12:
          v5 = 0;
          goto LABEL_13;
        }
        v5 = 1;
LABEL_13:
        ++v6;
      }
      while( v5 );
    }
  }
  v10 = 128;
  if( ((v3 >> 3) & 1) != v5 )
    v10 = 136;
  _InterlockedXor(a1, v10);
  return v3 ^ v10;
}

Referenced by:

wil_details_EvaluateFeatureDependencies_GetCachedFeatureEnabledState