2.1.5 Object Space Object

An object space object (object) is a collection of data. Every object’s identity is specified by an ExtendedGUID structure (section 2.2.1).

When an object with the same identity is declared multiple times, the later declarations are said to revise the object. The following FileNode structures can declare or revise an object:

  • 0x041 (ObjectRevisionWithRefCountFNDX structure, section 2.5.13)

  • 0x042 (ObjectRevisionWithRefCount2FNDX structure, section 2.5.14)

  • 0x02D (ObjectDeclarationWithRefCountFNDX structure, section 2.5.23)

  • 0x02E (ObjectDeclarationWithRefCount2FNDX structure, section 2.5.24)

  • 0x0A4 (ObjectDeclaration2RefCountFND structure, section 2.5.25)

  • 0x0A5 (ObjectDeclaration2LargeRefCountFND structure, section 2.5.26)

  • 0x0C4 (ReadOnlyObjectDeclaration2RefCountFND structure, section 2.5.29)

  • 0x0C5 (ReadOnlyObjectDeclaration2LargeRefCountFND structure, section 2.5.30)

  • 0x072 (ObjectDeclarationFileData3RefCountFND structure, section 2.5.27)

  • 0x073 (ObjectDeclarationFileData3LargeRefCountFND structure, section 2.5.28)

The identity and data for an object is specified by a FileNode structure (section 2.4.3). The data specified by the FileNode.fnd field MUST contain a JCID (section 2.6.14) or an unsigned integer that specifies the value of JCID.index. When only index is specified, the other fields of JCID MUST be implied as set to: JCID.IsBinary = "false", JCID.IsPropertySet = "true", JCID.IsGraphNode = "false", JCID.IsFileData = "false", and JCID.IsReadOnly = "false".

The meaning of the JCID structure is specified by the property set (as defined in [MS-ONE] section 2.1.13) for objects whose data is a property set (section 2.1.1), or file data object (as defined in [MS-ONE] section 2.1.5) for objects whose data is a file data object. The JCID structure of an object MUST NOT be changed when the object is revised.

If the value of the JCID.IsPropertySet field is "true" or if only JCID.index is specified, then the data for the Object Space Object structure MUST be an ObjectSpaceObjectPropSet structure (section 2.6.1), and the value of the FileNode.FileNodeID field MUST be one of the following values:

  • 0x02D (ObjectDeclarationWithRefCountFNDX structure, section 2.5.23)

  • 0x02E (ObjectDeclarationWithRefCount2FNDX structure, section 2.5.24)

  • 0x0A4 (ObjectDeclaration2RefCountFND structure, section 2.5.25)

  • 0x0A5 (ObjectDeclaration2LargeRefCountFND structure, section 2.5.26)

  • 0x0C4 (ReadOnlyObjectDeclaration2RefCountFND structure, section 2.5.29)

  • 0x0C5 (ReadOnlyObjectDeclaration2LargeRefCountFND structure, section 2.5.30)

Objects whose data is an ObjectSpaceObjectPropSet structure can contain references to the following:

  • Objects in the same object space (section 2.1.4), specified by the ObjectSpaceObjectPropSet.OIDs field. Object references MUST NOT form a cycle.

  • Object spaces specified by the ObjectSpaceObjectPropSet.OSIDs field. Objects MUST NOT reference the object space that contains them. Object space references specifically reference the revision (section 2.1.8) of the object space that is associated with the default context and revision role 0x00000001. Object space references MUST NOT form a cycle.

  • Contexts (section 2.1.11) of the same object space, specified by the ObjectSpaceObjectPropSet.ContextIDs field. Context references specifically reference the revision that is associated with the identified context and revision role 0x00000001. Context references can form a cycle.

If the value of the JCID.IsReadOnly field is "true" then the value of the FileNode.FileNodeID field MUST be 0x0C4 (ReadOnlyObjectDeclaration2RefCountFND structure, section 2.5.29) or 0x0C5 (ReadOnlyObjectDeclaration2LargeRefCountFND structure, section 2.5.30). If an object with JCID.IsReadOnly set to "true" is revised, all declarations of this object MUST specify identical data.

If the value of the JCID.IsFileData field is "true" then the value of the FileNode.FileNodeID field MUST be 0x072 (ObjectDeclarationFileData3RefCountFND structure, section 2.5.27) or 0x073 (ObjectDeclarationFileData3LargeRefCountFND structure, section 2.5.28). If an object with JCID.IsFileData set to "true" is revised, all declarations of this object MUST specify identical data.

All objects in a revision contain a reference count. The reference count for any object that is not a root object (section 2.1.7) is the number of objects that directly reference this object, where the referencing object is reachable from a root object within the revision or is itself a root object. The reference count for a root object is the count calculated by the previous algorithm for non-root objects, plus 1.

The current reference count of an object in a revision is specified by the last FileNode structure that revised the object or by a FileNode structure with FileNodeID equal to 0x84, (ObjectInfoDependencyOverridesFND, section 2.5.20) that updates the reference count without revising the object.