Module: wine Branch: master Commit: 3e01da183864acd14c4cfaa659fd8b7fa7cf61fe URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=3e01da183864acd14c4cfaa6...
Author: Robert Shearman rob@codeweavers.com Date: Tue Aug 29 21:14:42 2006 +0100
rpcrt4: Fix NdrStubGetBuffer to use the IRpcChannelBuffer object since IRpcChannelBuffer_GetBuffer may put extra data onto the wire for ORPC calls.
---
dlls/rpcrt4/cstub.c | 18 ++++++++++++++---- 1 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/dlls/rpcrt4/cstub.c b/dlls/rpcrt4/cstub.c index 5b61da4..259956a 100644 --- a/dlls/rpcrt4/cstub.c +++ b/dlls/rpcrt4/cstub.c @@ -280,14 +280,24 @@ void WINAPI NdrStubInitialize(PRPC_MESSA /*********************************************************************** * NdrStubGetBuffer [RPCRT4.@] */ -void WINAPI NdrStubGetBuffer(LPRPCSTUBBUFFER This, +void WINAPI NdrStubGetBuffer(LPRPCSTUBBUFFER iface, LPRPCCHANNELBUFFER pRpcChannelBuffer, PMIDL_STUB_MESSAGE pStubMsg) { - TRACE("(%p,%p)\n", This, pStubMsg); - pStubMsg->pRpcChannelBuffer = pRpcChannelBuffer; + CStdStubBuffer *This = (CStdStubBuffer *)iface; + HRESULT hr; + + TRACE("(%p, %p, %p)\n", This, pRpcChannelBuffer, pStubMsg); + pStubMsg->RpcMsg->BufferLength = pStubMsg->BufferLength; - I_RpcGetBuffer(pStubMsg->RpcMsg); /* ? */ + hr = IRpcChannelBuffer_GetBuffer(pRpcChannelBuffer, + (RPCOLEMESSAGE *)pStubMsg->RpcMsg, STUB_HEADER(This).piid); + if (FAILED(hr)) + { + RpcRaiseException(hr); + return; + } + pStubMsg->BufferStart = pStubMsg->RpcMsg->Buffer; pStubMsg->BufferEnd = pStubMsg->BufferStart + pStubMsg->BufferLength; pStubMsg->Buffer = pStubMsg->BufferStart;