SepSecureBootValidateBcdDataAgainstBcdRule

INT64 __fastcall SepSecureBootValidateBcdDataAgainstBcdRule(INT64 a1, BYTE *rdx0, UINT64 a3){
  _WORD *v4; 
  unsigned int QWordPolicyValue; 
  __int16 v6; 
  int v7; 
  int v8; 
  bool v9; 
  __int64 v10; 
  __int64 a2; 
  v4 = (_WORD *)(qword_140CF9DA0 + *(unsigned int *)(a1 + 8));
  QWordPolicyValue = 0;
  v6 = *v4 & 0x1F;
  if( v6 != 8 )
  {
    v7 = (*(_BYTE *)(a1 + 7) & 0xF) - 2;
    if( v7 )
    {
      v8 = v7 - 3;
      if( v8 )
      {
        if( v8 != 1 )
          return QWordPolicyValue;
        if( v6 != 1 || (unsigned int)(a3 - 1) > 1 )
          return(unsigned int)-1069350910;
        v9 = (v4[1] != 0) == (*rdx0 != 0);
      }
      else
      {
        if( (_DWORD)a3 != 8 )
          return(unsigned int)-1069350910;
        v10 = *(_QWORD *)rdx0;
        a2 = *(_QWORD *)rdx0;
        QWordPolicyValue = SepSecureBootGetQWordPolicyValue((INT64)v4, &a2);
        if( (QWordPolicyValue & 0x80000000) != 0 )
          return QWordPolicyValue;
        v9 = v10 == a2;
      }
    }
    else
    {
      if( v6 || (a3 & 1) != 0 )
        return(unsigned int)-1069350910;
      for( ; (_DWORD)a3; LODWORD(a3) = a3 - 2 )
      {
        if( *(_WORD *)&rdx0[2 * ((unsigned __int64)(unsigned int)a3 >> 1) - 2] )
          break;
      }
      if( (_DWORD)a3 != (unsigned __int16)v4[1] )
        return(unsigned int)-1069350910;
      v9 = memcmp(rdx0, v4 + 2, (unsigned int)a3) == 0;
    }
    if( v9 )
      return QWordPolicyValue;
    return(unsigned int)-1069350910;
  }
  return v4[1] == 0 ? 0xC0430002 : 0;
}

Referenced by:

NtFilterBootOption
SepSecureBootUpdateBcdDataForRule