/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Copyright (c) 2000 Microsoft Corporation Module Name : pointer.h Abstract : This file contains the routines for handling pointers and pointer layouts. Author : Mike Zoran mzoran January 2000. Revision History : ---------------------------------------------------------------------*/ #include "ndrp.h" #if !defined(__POINTER_H__) #define __POINTER_H__ void Ndr64pPointerLayoutMarshall( PMIDL_STUB_MESSAGE pStubMsg, PNDR64_FORMAT pFormat, NDR64_UINT32 ArrayIterations, uchar * pMemory, uchar * pBuffer ); void Ndr64pPointerLayoutMarshallInternal( PMIDL_STUB_MESSAGE pStubMsg, PNDR64_FORMAT pFormat, NDR64_UINT32 ArrayIterations, uchar * pMemory, uchar * pBuffer ); void Ndr64pPointerLayoutUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, PNDR64_FORMAT pFormat, NDR64_UINT32 ArrayIterations, uchar * pMemory, uchar * pBuffer ); void Ndr64pPointerLayoutMemorySize ( PMIDL_STUB_MESSAGE pStubMsg, PNDR64_FORMAT pFormat, NDR64_UINT32 ArrayIterations, uchar * pBuffer ); void Ndr64pPointerLayoutBufferSize ( PMIDL_STUB_MESSAGE pStubMsg, PNDR64_FORMAT pFormat, NDR64_UINT32 ArrayIterations, uchar * pMemory ); void Ndr64pPointerLayoutFree( PMIDL_STUB_MESSAGE pStubMsg, PNDR64_FORMAT pFormat, NDR64_UINT32 ArrayIterations, uchar * pMemory ); void Ndr64pPointerMarshall( PMIDL_STUB_MESSAGE pStubMsg, NDR64_PTR_WIRE_TYPE *pBufferMark, uchar * pMemory, PNDR64_FORMAT pFormat ); void Ndr64pPointerMemorySize( PMIDL_STUB_MESSAGE pStubMsg, NDR64_PTR_WIRE_TYPE *pBufferMark, PNDR64_FORMAT pFormat ); void Ndr64pPointerUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, NDR64_PTR_WIRE_TYPE WirePtr, uchar ** ppMemory, uchar * pMemory, PNDR64_FORMAT pFormat ); void Ndr64pPointerBufferSize ( PMIDL_STUB_MESSAGE pStubMsg, uchar * pMemory, PNDR64_FORMAT pFormat ); __forceinline ulong Ndr64pWirePtrToRefId( NDR64_PTR_WIRE_TYPE WireRef ) { if ( WireRef > 0x7FFFFFFF ) { RpcRaiseException( RPC_X_BAD_STUB_DATA ); return 0; } return (ulong)WireRef; } __forceinline NDR64_PTR_WIRE_TYPE Ndr64pRefIdToWirePtr( ulong RefId ) { // Check if wire ref will fit in a 2GB number. if ( RefId > 0x7FFFFFFF ) { RpcRaiseException( RPC_X_BAD_STUB_DATA ); return 0; } return (NDR64_PTR_WIRE_TYPE)RefId; } __forceinline BOOL Ndr64pFullPointerQueryPointer( PMIDL_STUB_MESSAGE pStubMsg, void * pPointer, uchar QueryType, ulong * pRefId ) { return (BOOL) NdrFullPointerQueryPointer( pStubMsg->FullPtrXlatTables, pPointer, QueryType, pRefId ); } __forceinline BOOL Ndr64pFullPointerQueryRefId( PMIDL_STUB_MESSAGE pStubMsg, ulong RefId, uchar QueryType, void ** ppPointer ) { return (BOOL) NdrFullPointerQueryRefId( pStubMsg->FullPtrXlatTables, RefId, QueryType, ppPointer ); } __forceinline void Ndr64pFullPointerInsertRefId( PMIDL_STUB_MESSAGE pStubMsg, ulong RefId, void * pPointer ) { NdrFullPointerInsertRefId( pStubMsg->FullPtrXlatTables, RefId, pPointer ); } #define FULL_POINTER_INSERT( pStubMsg, Pointer ) \ { \ Ndr64pFullPointerInsertRefId( pStubMsg, \ pStubMsg->FullPtrRefId, \ Pointer ); \ \ pStubMsg->FullPtrRefId = 0; \ } #endif // __POINTER_H__