reactos/dll/win32/rpcrt4/ndr_misc.h

68 lines
2.7 KiB
C
Raw Normal View History

/*
* NDR definitions
*
* Copyright 2001 Ove Kåven, TransGaming Technologies
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef __WINE_NDR_MISC_H
#define __WINE_NDR_MISC_H
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "rpc.h"
#include "rpcndr.h"
struct IPSFactoryBuffer;
Sync to Wine-0_9_3: Robert Shearman <rob@codeweavers.com> - Return the correct error code from NdrProxyErrorHandler. - Add a function to retrieve the MIDL_SERVER_INFO struct from an object. - Make sure to fill out the MIDL_STUB_MESSAGE structure in NdrSendReceive like we do in NdrProxySendReceive. - Fix the overflow check to not depend on pStubMsg->BufferStart and pStubMsg->BufferEnd being valid, because they aren't filled in when using MIDL-generated server stubs. - Don't set the pointer to NULL on unmarshaling because we may want to unmarshal the value to an existing pointer instead of allocating a new one. - Raise exceptions on failures. Replace references of pStubMsg->BufferEnd with RpcMsg->Buffer + pStubMsg->BufferLength. - Fix buffer calculation when no interface data is marshaled to the stream. - Implement conformant varying array functions. - Implement conformant struct functions. - Implement FC_STRUCTPAD2 for complex types. - Add functions for marshaling base types (ints, floats, etc.). - Extend conformance computation function to also compute variances. MSDN suggests that conformance and variance are pretty much the same, but there may be some subtleties to it. - Fix NdrConformantArrayBufferSize to include the size of the conformance value. Make NdrConformantArrayMemorySize do something more useful, like actually return the required memory. Conformance offset can be negative and should only be two bytes. - We should always allocate in NdrConformantStringUnmarshal if the memory pointer is NULL. - The CLSID can be substituted by an IID present in one of the proxy file infos in NdrDllGetClassObject. Ge van Geldorp <gvg@reactos.org> - Match PSDK STATUS_* definitions. svn path=/trunk/; revision=20167
2005-12-14 19:02:42 +00:00
PFORMAT_STRING ComputeConformanceOrVariance(
MIDL_STUB_MESSAGE *pStubMsg, unsigned char *pMemory,
PFORMAT_STRING pFormat, ULONG_PTR def, ULONG_PTR *pCount) DECLSPEC_HIDDEN;
static inline PFORMAT_STRING ComputeConformance(PMIDL_STUB_MESSAGE pStubMsg, unsigned char *pMemory, PFORMAT_STRING pFormat, ULONG def)
{
return ComputeConformanceOrVariance(pStubMsg, pMemory, pFormat, def, &pStubMsg->MaxCount);
}
static inline PFORMAT_STRING ComputeVariance(PMIDL_STUB_MESSAGE pStubMsg, unsigned char *pMemory, PFORMAT_STRING pFormat, ULONG def)
{
PFORMAT_STRING ret;
ULONG_PTR ActualCount = pStubMsg->ActualCount;
pStubMsg->Offset = 0;
ret = ComputeConformanceOrVariance(pStubMsg, pMemory, pFormat, def, &ActualCount);
pStubMsg->ActualCount = (ULONG)ActualCount;
return ret;
}
typedef unsigned char* (WINAPI *NDR_MARSHALL) (PMIDL_STUB_MESSAGE, unsigned char*, PFORMAT_STRING);
typedef unsigned char* (WINAPI *NDR_UNMARSHALL)(PMIDL_STUB_MESSAGE, unsigned char**,PFORMAT_STRING, unsigned char);
typedef void (WINAPI *NDR_BUFFERSIZE)(PMIDL_STUB_MESSAGE, unsigned char*, PFORMAT_STRING);
typedef ULONG (WINAPI *NDR_MEMORYSIZE)(PMIDL_STUB_MESSAGE, PFORMAT_STRING);
typedef void (WINAPI *NDR_FREE) (PMIDL_STUB_MESSAGE, unsigned char*, PFORMAT_STRING);
extern const NDR_MARSHALL NdrMarshaller[] DECLSPEC_HIDDEN;
extern const NDR_UNMARSHALL NdrUnmarshaller[] DECLSPEC_HIDDEN;
extern const NDR_BUFFERSIZE NdrBufferSizer[] DECLSPEC_HIDDEN;
extern const NDR_MEMORYSIZE NdrMemorySizer[] DECLSPEC_HIDDEN;
extern const NDR_FREE NdrFreer[] DECLSPEC_HIDDEN;
ULONG ComplexStructSize(PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat) DECLSPEC_HIDDEN;
#endif /* __WINE_NDR_MISC_H */