An scf_propertygroup_t is an opaque handle that can be set to a
single property group at any given time. When an scf_propertygroup_t is set,
it references a frozen-in-time version of the property group to which it
is set. Updates to the property group will not be visible until either
scf_pg_update() is called or the property group is set again.

This static view is propagated to the scf_property_ts set to children of
the property group. They will not see updates, even if the scf_propertygroup_t
is updated.

The scf_pg_create() function allocates and initializes a new scf_propertygroup_t bound to handle.
The scf_pg_destroy() function destroys and frees pg.

The scf_pg_handle() function retrieves the handle to which pg is bound.

The scf_pg_get_parent_service(), scf_pg_get_parent_instance(), and scf_pg_get_parent_snaplevel() functions retrieve the property group's parent, if
it is of the requested type.

The scf_pg_get_name() and scf_pg_get_type() functions retrieve the name and type, respectively, of
the property group to which pg is set.

The scf_pg_get_flags() function retrieves the flags for the property group to which
pg is set. If SCF_PG_FLAG_NONPERSISTENT is set, the property group is not
included in snapshots and will lose its contents upon system shutdown or reboot.
Non-persistent property groups are mainly used for smf-internal state. See smf(5).

The scf_pg_update() function ensures that pg is attached to the most recent
version of the pg to which it is set.

The scf_service_get_pg(), scf_instance_get_pg(), and scf_snaplevel_get_pg() functions set pg to the property group
specified by name in the service specified by svc, the instance specified by
inst, or the snaplevel specified by level, respectively.

The scf_instance_get_pg_composed() function sets pg to the property group specified by name
in the composed view of inst at the time snapshot was taken.
If snapshot is NULL, the current properties are used. The composed view
of an instance's properties is the union of the properties of the
instance and its ancestors. Properties of the instance take precedence over properties
of the service with the same name (including the property group name). After
a successful call to scf_instance_get_pg_composed(), the parent of pg might not be
inst, and the parents of properties obtained from pg might not be
pg. If inst and its parent have property groups with the same name
but different types, the properties in the property group of the parent
are excluded.

The scf_service_add_pg() and scf_instance_add_pg() functions create a new property group specified by
name whose type is group_type, and attach the pg handle (if non-null)
to the new object. The flags argument must be either 0 or SCF_PG_FLAG_NONPERSISTENT.

The scf_pg_delete() function deletes the property group. Versions of the property group
in snapshots are not affected.

The scf_pg_get_underlying_pg() function gets the first existing underlying property group. If the
property group specified by pg is an instance property group, out is
set to the property group of the same name in the instance's parent.