SepSecureBootUpdateBcdDataForRule

__int64 __fastcall SepSecureBootUpdateBcdDataForRule(__int64 a1, VOID *a2, VOID *a3){
  _WORD *v3; 
  VOID **PoolWithTag; 
  int PolicyDefaultValue; 
  UINT64 v8; 
  __int64 *p_DataSize; 
  NTSTATUS ElementDataWithFlags; 
  __int64 v11; 
  VOID *v12; 
  VOID *v13; 
  UINT64 *DataSizea; 
  VOID *v16; 
  UINT64 NumberOfBytes; 
  UINT64 v18; 
  __int64 DataSize; 

  v3 = (_WORD *)(qword_140CF9DA0 + *(unsigned int *)(a1 + 8));
  DataSize = 0i64;
  PoolWithTag = 0i64;
  v16 = 0i64;
  LODWORD(v18) = 0;
  PolicyDefaultValue = 0;
  if( (*(_BYTE *)v3 & 0x1F) == 8 )
  {
    if( !v3[1] )
    {
      PolicyDefaultValue = BiDeleteElement(a2, *(unsigned int *)(a1 + 4));
      if( PolicyDefaultValue == -1073741275 )
        return 0;
    }
  }
  else
  {
    v8 = *(unsigned int *)(a1 + 4);
    LODWORD(NumberOfBytes) = 8;
    p_DataSize = &DataSize;
    ElementDataWithFlags = BcdGetElementDataWithFlags(a2, v8, a3, &DataSize, &NumberOfBytes);
    PolicyDefaultValue = ElementDataWithFlags;
    if( ElementDataWithFlags != -1073741789 && ElementDataWithFlags != -2147483643 )
      goto LABEL_19;
    PoolWithTag = ExAllocatePoolWithTag(1ui64, (unsigned int)NumberOfBytes, 1649632595i64);
    if( !PoolWithTag )
      return(unsigned int)-1073741670;
    p_DataSize = (__int64 *)PoolWithTag;
    PolicyDefaultValue = BcdGetElementDataWithFlags(a2, *(unsigned int *)(a1 + 4), v12, PoolWithTag, &NumberOfBytes);
    if( PolicyDefaultValue >= 0 )
    {
LABEL_19:
      if( PolicyDefaultValue < 0
        || (PolicyDefaultValue = SepSecureBootValidateBcdDataAgainstBcdRule(a1, p_DataSize, NumberOfBytes),
            PolicyDefaultValue < 0) )
      {
        PolicyDefaultValue = SepSecureBootGetPolicyDefaultValue(v3, v11, &v16, (int *)&v18);
        if( PolicyDefaultValue >= 0 )
        {
          LODWORD(DataSizea) = v18;
          PolicyDefaultValue = BcdSetElementDataWithFlags(a2, *(unsigned int *)(a1 + 4), v13, v16, (UINT64)DataSizea);
        }
      }
    }
    if( PoolWithTag )
      ExFreePoolWithTag(PoolWithTag, 0x62536553u);
  }
  return(unsigned int)PolicyDefaultValue;
}

Referenced by:

SepSecureBootCorrectBcd