3.3.3 Concrete and Abstract Types
A concrete type is a type whose representation must be standardized for interoperability. In this protocol specification, three cases apply:
Types that are hand marshaled onto the network, such as types that are sent in drsuapi and dsaop requests and responses as octet strings whose actual structure is hidden from the IDL compiler. The hand marshaling and corresponding hand unmarshaling are performed by the implementation of Active Directory and by clients of the drsuapi and dsaop RPC interfaces.
Types that are hand marshaled into directory attributes, such as types that are stored in the directory as octet strings. The hand marshaling and corresponding hand unmarshaling are performed by the implementation of Active Directory and by clients of the Active Directory LDAP interface [MS-ADTS] section 184.108.40.206.
Concrete types in the first category are specified by the C / IDL type declaration. Concrete types in the second and third categories are specified pictorially. Some types are in multiple categories and are specified both ways.
All other types in the specification are abstract, meaning that their use is internal to the specification. Abstract types are based on the standard mathematical concepts set, sequence, directed graph, and tuple.
This specification introduces the notion of an abstract attribute. An abstract attribute is an Active Directory attribute that has an abstract type for use in pseudocode. An abstract attribute can have a specified concrete representation, required for interoperability; in that case, the abstract attribute's type definition specifies the correspondence between information in the abstract type and in the concrete type. This relieves the specification pseudocode from concerns with storage allocation, packing variable-length information into structures, and so on.
Pseudocode deals with a mixture of concrete and abstract types. The notations and conventions for each are specified in section 3.4.