//+-------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright (C) Microsoft Corporation, 1992 - 1993.
//
//  File:       machact.idl
//
//  Contents:   Definition of private interfaces for registration protocol between
//              the initial process activator in a COM+ surrogate and the machine 
//              activator in RPCSS.  
//
//              The initial process activator is never in an STA and RPCSS is a raw RPC 
//              server therefore it is convenient to make these raw RPC interfaces
//
//  History:    02-Apr-98 SatishT    Created
//
//--------------------------------------------------------------------------

import "wtypes.idl";
import "obase.idl";

typedef struct _ProcessActivatorToken
{
	GUID                ProcessGUID;
    IPID                ActivatorIPID;
    DWORD               dwFlags;
} ProcessActivatorToken;


//+-------------------------------------------------------------------------
//
//  Interface:  IMachineActivatorControl
//
//  Synopsis:   Registration interface for procvess activators to notify SCM
//              about process startup and shutdown.  There can be only one COM+
//              surrogate process for a given ProcessGUID per Session+WindowStation
//              since COM+ surrogates are required to have RunAs specifications
//
//  History:    02-Apr-98 SatishT    Created
//
//--------------------------------------------------------------------------

[ uuid(c6f3ee72-ce7e-11d1-b71e-00c04fc3111a),
  version(1.0),
  pointer_default(unique)
]

interface IMachineActivatorControl
{
    typedef [context_handle] void *PHPROCESS;

    //
    // Server to SCM methods.
    //
    HRESULT ProcessActivatorStarted(
        [in]  handle_t                hRpc,
        [in]  PHPROCESS               phProcess,
        [in]  ProcessActivatorToken * pActToken,
        [out] error_status_t        * prpcstat);

    HRESULT ProcessActivatorInitializing(
        [in]  handle_t                hRpc,
        [in]  PHPROCESS               phProcess,
        [out] error_status_t        * prpcstat);

    HRESULT ProcessActivatorReady(
        [in]  handle_t                hRpc,
        [in]  PHPROCESS               phProcess,
        [out] error_status_t        * prpcstat);

    HRESULT ProcessActivatorStopped(
        [in]  handle_t                hRpc,
        [in]  PHPROCESS               phProcess,
        [out] error_status_t        * prpcstat);

    HRESULT ProcessActivatorPaused(
        [in]  handle_t                hRpc,
        [in]  PHPROCESS               phProcess,
        [out] error_status_t        * prpcstat);

    HRESULT ProcessActivatorResumed(
        [in]  handle_t                hRpc,
        [in]  PHPROCESS               phProcess,
        [out] error_status_t        * prpcstat);

    HRESULT ProcessActivatorUserInitializing(
        [in]  handle_t                hRpc,
        [in]  PHPROCESS               phProcess,
        [out] error_status_t        * prpcstat);

}