windows-nt/Source/XPSP1/NT/com/ole32/dcomss/olescm/remsysif.cxx
2020-09-26 16:20:57 +08:00

202 lines
5.9 KiB
C++

//+-------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1995.
//
// File:
// objexif.cxx
//
// Contents:
// Entry point for remote activation call to SCM/OR.
//
// Functions:
// RemoteGetClassObject
// RemoteCreateInstance
//
// History:
//
//--------------------------------------------------------------------------
#include "act.hxx"
//-------------------------------------------------------------------------
//
// Function: _RemoteGetClassObject
//
// Synopsis: Entry point for 5.6 get class object activations. Forwards to
// PerformScmStage.
//
//-------------------------------------------------------------------------
HRESULT _RemoteGetClassObject(
handle_t hRpc,
ORPCTHIS *ORPCthis,
ORPCTHAT *ORPCthat,
IN MInterfacePointer * pInActProperties,
OUT MInterfacePointer ** ppOutActProperties
)
{
RPC_STATUS sc;
LOCALTHIS Localthis;
HRESULT hr;
if (ORPCthis == NULL || ORPCthat == NULL)
return E_INVALIDARG;
Localthis.dwClientThread = 0;
Localthis.dwFlags = LOCALF_NONE;
ORPCthis->flags |= ORPCF_DYNAMIC_CLOAKING;
ORPCthat->flags = 0;
ORPCthat->extensions = NULL;
if ( ! s_fEnableDCOM )
{
return E_ACCESSDENIED;
}
// Determine what version to use for the returned interface. Fail
// if the client wants a version we don't support.
hr = NegotiateDCOMVersion( &ORPCthis->version );
if (hr != OR_OK)
{
return hr;
}
RegisterAuthInfoIfNecessary();
ACTIVATION_PARAMS ActParams;
memset(&ActParams, 0, sizeof(ActParams));
ActParams.MsgType = GETCLASSOBJECT;
ActParams.hRpc = hRpc;
ActParams.ORPCthis = ORPCthis;
ActParams.Localthis = &Localthis;
ActParams.ORPCthat = ORPCthat;
ActParams.oldActivationCall = FALSE;
ActParams.RemoteActivation = TRUE;
return PerformScmStage(SERVER_MACHINE_STAGE,
&ActParams,
pInActProperties,
ppOutActProperties);
}
//-------------------------------------------------------------------------
//
// Function: _RemoteGetCreateInstance
//
// Synopsis: Entry point for 5.6 create instance activations. Forwards to
// PerformScmStage.
//
//-------------------------------------------------------------------------
HRESULT _RemoteCreateInstance(
handle_t hRpc,
ORPCTHIS *ORPCthis,
ORPCTHAT *ORPCthat,
IN MInterfacePointer * pUnk,
IN MInterfacePointer * pInActProperties,
OUT MInterfacePointer ** ppOutActProperties
)
{
RPC_STATUS sc;
LOCALTHIS Localthis;
HRESULT hr;
if (ORPCthis == NULL || ORPCthat == NULL)
return E_INVALIDARG;
Localthis.dwClientThread = 0;
Localthis.dwFlags = LOCALF_NONE;
ORPCthis->flags |= ORPCF_DYNAMIC_CLOAKING;
ORPCthat->flags = 0;
ORPCthat->extensions = NULL;
if ( ! s_fEnableDCOM )
{
return E_ACCESSDENIED;
}
// Determine what version to use for the returned interface. Fail
// if the client wants a version we don't support.
hr = NegotiateDCOMVersion( &ORPCthis->version );
if (hr != OR_OK)
{
return hr;
}
RegisterAuthInfoIfNecessary();
ACTIVATION_PARAMS ActParams;
memset(&ActParams, 0, sizeof(ActParams));
ActParams.MsgType = CREATEINSTANCE;
ActParams.hRpc = hRpc;
ActParams.ORPCthis = ORPCthis;
ActParams.Localthis = &Localthis;
ActParams.ORPCthat = ORPCthat;
ActParams.oldActivationCall = FALSE;
ActParams.RemoteActivation = TRUE;
return PerformScmStage(SERVER_MACHINE_STAGE,
&ActParams,
pInActProperties,
ppOutActProperties);
}
//-------------------------------------------------------------------------
//
// Function: _DummyQueryInterfaceIRemoteSCMActivator
//
// Synopsis: Unused function required by linker. This function exists
// to make the activation interface wire compatible with a
// COM interface.
//
//-------------------------------------------------------------------------
HRESULT _DummyQueryInterfaceIRemoteSCMActivator(handle_t rpc,
ORPCTHIS *orpcthis,
ORPCTHAT *orpcthat,
DWORD dummy )
{
return E_NOTIMPL;
}
//-------------------------------------------------------------------------
//
// Function: _DummyAddRefIRemoteSCMActivator
//
// Synopsis: Unused function required by linker. This function exists
// to make the activation interface wire compatible with a
// COM interface.
//
//-------------------------------------------------------------------------
HRESULT _DummyAddRefIRemoteSCMActivator(handle_t rpc,
ORPCTHIS *orpcthis,
ORPCTHAT *orpcthat,
DWORD dummy )
{
return E_NOTIMPL;
}
//-------------------------------------------------------------------------
//
// Function: _DummyReleaseIRemoteSCMActivator
//
// Synopsis: Unused function required by linker. This function exists
// to make the activation interface wire compatible with a
// COM interface.
//
//-------------------------------------------------------------------------
HRESULT _DummyReleaseIRemoteSCMActivator(handle_t rpc,
ORPCTHIS *orpcthis,
ORPCTHAT *orpcthat,
DWORD dummy )
{
return E_NOTIMPL;
}