Figure 2 COM+ Catalog Object Hierarchy

Figure 4 Event Spy (Partial Listing)

  /*
Import the DLL containing COM+ Catalog Type Library
*/

#import "d:\\winnt\\system32\\com\\comadmin.dll"

/*
Global variables for catalog object and root collection.
*/

COMAdmin::ICOMAdminCatalogPtr g_Catalog ;
COMAdmin::ICatalogCollectionPtr g_CatalogRoot ;

BOOL CRTEventSpyApp::InitInstance()
{

    <initialization omitted> 
/*
Create the COM+ catalog and open the root collection.
*/

    g_Catalog.CreateInstance (
L"ComAdmin.ComAdminCatalog.1") ; 
    g_CatalogRoot = g_Catalog->GetCollection (
        _bstr_t("Root")) ;

    return TRUE;
}

BOOL CChooseEventClassDlg::OnInitDialog() 
{
    CDialog::OnInitDialog();

/*
Get collection of applications from root. 
Populate collection. 
Iterate through applications.
*/
    COMAdmin::ICatalogCollectionPtr Apps ;
    Apps = g_CatalogRoot->GetCollection (
         _bstr_t("Applications"), _variant_t((long)0) ) ;
    Apps->Populate ( ) ;

    int i ;
    for (i = 0 ; i < Apps->Count  ; i++)
    {

/*
From each application, get collection of components 
Populate collection. 
Iterate through components.
*/
        COMAdmin::ICatalogObjectPtr app ;
        app = Apps->GetItem (i) ;

        COMAdmin::ICatalogCollectionPtr Components ;
        Components = Apps->GetCollection (
             _bstr_t("Components"), app->GetKey( )) ;
        Components->Populate ( ) ;

        int j ;
        for (j = 0 ; j < Components->Count ; j++)
        {
            COMAdmin::ICatalogObjectPtr comp ;
            comp = Components->GetItem (j) ;

/*
If component represents an event class, look at its interfaces.
*/
            if (comp->GetValue (
                _bstr_t("IsEventClass")))
            {

                <code omitted for simplicity>
            }
        }
    }
}

Figure 10 Object State Location

Location of State
Lifetime of State
Access Speed
Ease of Programming
Client
Varies with client
Varies with client
Harder for client, easier for object
Object's member variables
Same as object, which usually means duration of a transaction
Fastest
Easiest
Resource dispenser (shared property manager or pooled object)
Varies from transaction lifetime to application lifetime
Medium
OK
Resource manager
Persistent
Slowest
Hardest

Figure 12 Authentication Levels in COM+

Level
Authentication
When
Protects Against
Performance Cost
None
Nothing
Never
Nothing
None
Connect
Check user ID
First connection of client and server
Unauthorized user
Low
Call
Check user ID and encrypt sequence number
Every method call
Unauthorized user, recording/playback of network traffic
Low
Packet
Check user ID and encrypt sequence number
Every packet of every method call
Unauthorized user, recording/playback of network traffic
Low
Packet Integrity
Packet and encrypted checksum of data
Every packet of every method call
Unauthorized user, recording/playback of network traffic, and tampering
Medium
Packet Privacy
Packet integrity and all data encrypted
Every packet of every method call
Unauthorized user, recording/playback of network traffic, tampering, and eavesdropping
Highest