/* Definitions from the NTDSA that are exposed to the rest of NT, but not
 * to the public at large.
 */

#define MAX_RDN_SIZE          255   /* The max size of an relative name value,
                                     * in Unicode characters */
#define MAX_RDN_KEY_SIZE      256    /* The max size of a RDN Key eg: "CN=" */
                                     /* or "OID.1.2...=" */
//
// This named event is set when the delayed start up thread is finished 
// successfully or otherwise.  In-proc clients can use 
// DsWaitUntilDelayedStartupIsDone() wait and recieve the ntstatus of the
// delayed thread.  Out of proc clients can wait on this event; there is 
// no mechanism to retrieve the return code.
//
#define NTDS_DELAYED_STARTUP_COMPLETED_EVENT TEXT("NtdsDelayedStartupCompletedEvent")


/*
 * Bit flags for the (read-only) system-Flags attribute.  Note that low order
 * bits are object class specific, and hence can have different meanings on
 * objects of different classes, the high order bits have constant meaning
 * across all object classes.
 */

/* Object Class independent bits */
// NOTE: These flags MAY have different behaviour in different NCs.
// For example, the FLAG_CONFIG_foo flags only have meaning inside the
// configuration NC.  the FLAG_DOMAIN_foo flags have meaning only outside the
// configuration NC.  
#define FLAG_DISALLOW_DELETE           0x80000000
#define FLAG_CONFIG_ALLOW_RENAME       0x40000000 
#define FLAG_CONFIG_ALLOW_MOVE         0x20000000 
#define FLAG_CONFIG_ALLOW_LIMITED_MOVE 0x10000000 
#define FLAG_DOMAIN_DISALLOW_RENAME    0x08000000
#define FLAG_DOMAIN_DISALLOW_MOVE      0x04000000
#define FLAG_DISALLOW_MOVE_ON_DELETE   0x02000000

/* Object Class specific bits, by object class */

/* CrossReference objects */
#define FLAG_CR_NTDS_NC       0x00000001 // NC is in NTDS (not VC or foreign)
#define FLAG_CR_NTDS_DOMAIN   0x00000002 // NC is a domain (not non-domain NC)
#define FLAG_CR_NTDS_NOT_GC_REPLICATED 0x00000004 // NC is not to be replicated to GCs as a read only replica.

/* Attribute-Schema objects */
#define FLAG_ATTR_NOT_REPLICATED         (0x00000001) // Attribute is not replicated
#define FLAG_ATTR_REQ_PARTIAL_SET_MEMBER (0x00000002) // Attribute is required to be
                                                      //   member of the partial set
#define FLAG_ATTR_IS_CONSTRUCTED         (0x00000004) // Attribute is a constructed att
#define FLAG_ATTR_IS_OPERATIONAL         (0x00000008) // Attribute is an operational att

/* Attribute-Schema or Class-Schema objects */
#define FLAG_SCHEMA_BASE_OBJECT          (0x00000010) // Base schema object

/* Attribute-Schema objects */
// A user may set, but not reset, FLAG_ATTR_IS_RDN in attributeSchema
// objects in the SchemaNC. The user sets FLAG_ATTR_IS_RDN to identify
// which of several attributes with the same attributeId should be
// used as the rdnattid of a new class. Once set, the attribute is
// treated as if it were used as the rdnattid of some class; meaning it
// cannot be reused.
#define FLAG_ATTR_IS_RDN                 (0x00000020) // can be used as key in rdn (key=rdn)