Providers can support extended transaction functionality by exposing ITransactionObject on session objects. The consumer can call ITransactionObject::GetTransactionObject to get an ITransaction interface pointer on the transaction object associated with a particular transaction nesting level. This transaction object can be used to commit or abort a nested transaction at a particular level or to enlist in transaction outcome events for any level.