windows-nt/Source/XPSP1/NT/com/rpc/ndr64/proxy.cxx

104 lines
2.2 KiB
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
Microsoft Windows
Copyright (c) 1994 Microsoft Corporation. All rights reserved.
Module Name:
proxy.c
Abstract:
Implements the IRpcProxyBuffer interface.
Author:
ShannonC 12-Oct-1994
Environment:
Windows NT and Windows 95 and PowerMac.
We do not support DOS, Win16 and Mac.
Revision History:
--*/
#include "precomp.hxx"
#define USE_STUBLESS_PROXY
#define CINTERFACE
#include <ndrole.h>
#include <rpcproxy.h>
#include <stddef.h>
CStdProxyBuffer * RPC_ENTRY
NdrGetProxyBuffer(
void *pThis);
#pragma code_seg(".ndr64")
void RPC_ENTRY
Ndr64ProxyInitialize(
IN void * pThis,
IN PRPC_MESSAGE pRpcMsg,
IN PMIDL_STUB_MESSAGE pStubMsg,
IN PMIDL_STUBLESS_PROXY_INFO pProxyInfo,
IN unsigned int ProcNum )
/*++
Routine Description:
Initialize the MIDL_STUB_MESSAGE.
Arguments:
pThis - Supplies a pointer to the interface proxy.
pRpcMsg
pStubMsg
pStubDescriptor
ProcNum
Return Value:
--*/
{
CStdProxyBuffer * pProxyBuffer;
HRESULT hr;
pProxyBuffer = NdrGetProxyBuffer(pThis);
//
// Initialize the stub message fields.
//
pStubMsg->dwStubPhase = PROXY_CALCSIZE;
Ndr64ClientInitialize(
pRpcMsg,
pStubMsg,
pProxyInfo,
ProcNum );
//Note that NdrClientInitializeNew sets RPC_FLAGS_VALID_BIT in the ProcNum.
//We don't want to do this for object interfaces, so we clear the flag here.
pRpcMsg->ProcNum &= ~RPC_FLAGS_VALID_BIT;
pStubMsg->pRpcChannelBuffer = pProxyBuffer->pChannel;
//Check if we are connected to a channel.
if(pStubMsg->pRpcChannelBuffer != 0)
{
//AddRef the channel.
//We will release it later in NdrProxyFreeBuffer.
pStubMsg->pRpcChannelBuffer->lpVtbl->AddRef(pStubMsg->pRpcChannelBuffer);
//Get the destination context from the channel
hr = pStubMsg->pRpcChannelBuffer->lpVtbl->GetDestCtx(
pStubMsg->pRpcChannelBuffer, &pStubMsg->dwDestContext, &pStubMsg->pvDestContext);
}
else
{
//We are not connected to a channel.
RpcRaiseException(CO_E_OBJNOTCONNECTED);
}
}