77 lines
2.3 KiB
C++
77 lines
2.3 KiB
C++
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
// Copyright (C) Microsoft Corporation, 1994.
|
||
|
//
|
||
|
// File: transmit.h
|
||
|
//
|
||
|
// Contents: Function prototypes for STGMEDIUM marshalling.
|
||
|
//
|
||
|
// Functions: STGMEDIUM_to_xmit
|
||
|
// STGMEDIUM_from_xmit
|
||
|
// STGMEDIUM_free_inst
|
||
|
//
|
||
|
// History: May-10-94 ShannonC Created
|
||
|
// May-10-95 Ryszardk wire_marshal changes
|
||
|
// Dec-14-00 JohnDoty Created as a place to put all the
|
||
|
// C++ specific stuff for marshalling.
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
#pragma once
|
||
|
|
||
|
#include "transmit.h"
|
||
|
|
||
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// class: CUserMarshalInfo
|
||
|
//
|
||
|
// purpose: Simple wrapper for NdrGetUserMarshalInfo.
|
||
|
//
|
||
|
// history: 11-Aug-99 JohnStra Created
|
||
|
//
|
||
|
//+-------------------------------------------------------------------------
|
||
|
class CUserMarshalInfo
|
||
|
{
|
||
|
public:
|
||
|
CUserMarshalInfo( ULONG* pFlags, UCHAR* pBuffer, ULONG Level = 1 )
|
||
|
{
|
||
|
// NdrGetUserMarshalInfo may fail. It shouldn't, but if it does we
|
||
|
// must gracefully handle it.
|
||
|
_RpcStatus = NdrGetUserMarshalInfo( pFlags, Level, &_MarshalInfo );
|
||
|
_pSuppliedBuffer = pBuffer;
|
||
|
|
||
|
if (RPC_S_OK == _RpcStatus)
|
||
|
{
|
||
|
if ( _pSuppliedBuffer < (UCHAR*)_MarshalInfo.Level1.Buffer ||
|
||
|
_pSuppliedBuffer > ((UCHAR*)_MarshalInfo.Level1.Buffer + _MarshalInfo.Level1.BufferSize) )
|
||
|
RpcRaiseException( ERROR_INVALID_USER_BUFFER );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
inline UCHAR* GetBuffer()
|
||
|
{
|
||
|
return( _pSuppliedBuffer );
|
||
|
}
|
||
|
|
||
|
inline ULONG_PTR GetBufferSize()
|
||
|
{
|
||
|
return( (RPC_S_OK == _RpcStatus) ?
|
||
|
(ULONG_PTR) (_MarshalInfo.Level1.BufferSize - (_pSuppliedBuffer - (UCHAR*)_MarshalInfo.Level1.Buffer)) :
|
||
|
(ULONG_PTR) 0x7FFFFFFF );
|
||
|
}
|
||
|
|
||
|
inline IRpcChannelBuffer* GetRpcChannelBuffer()
|
||
|
{
|
||
|
return( (RPC_S_OK == _RpcStatus) ?
|
||
|
_MarshalInfo.Level1.pRpcChannelBuffer : NULL );
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
RPC_STATUS _RpcStatus;
|
||
|
UCHAR* _pSuppliedBuffer;
|
||
|
NDR_USER_MARSHAL_INFO _MarshalInfo;
|
||
|
};
|
||
|
|
||
|
|
||
|
|