CmpSetAccessStateForBackupRestore

INT64 __fastcall CmpSetAccessStateForBackupRestore(_DWORD *a1, INT8 a2, VOID *a3, CHAR a4){
  UINT8 v8; 
  int v9; 
  a1[5] = 0;
  if( SeSinglePrivilegeCheckEx(*(_QWORD *)&SeBackupPrivilege, (SECURITY_SUBJECT_CONTEXT *)a1 + 1, a2) )
  {
    a1[3] |= 2u;
    a1[5] |= 0x1020019u;
  }
  v8 = SeSinglePrivilegeCheckEx(*(_QWORD *)&SeRestorePrivilege, (SECURITY_SUBJECT_CONTEXT *)a1 + 1, a2);
  v9 = a1[5];
  if( v8 )
  {
    a1[3] |= 4u;
    v9 |= 0x10F0006u;
    a1[5] = v9;
  }
  if( a4 )
    a1[6] = v9;
  if( !v9 )
    return 3221225506i64;
  SepAdjustAccessStateForConstraints((INT64)CmKeyObjectType, a3, 1, (INT64)a1);
  a1[4] = ~a1[5] & a1[6];
  return 0i64;
}

Referenced by:

CmpCheckCreateAccessOnKcbStack
CmpCheckKeySecurityDescriptorAccess
CmpCheckOpenAccessOnKeyBody