rpcrt4: Implement MesDecodeBufferHandleCreate and MesEncodeFixedBufferHandleCreate.
This commit is contained in:
parent
734094ed2c
commit
2b0ad6e6e7
|
@ -132,6 +132,58 @@ RPC_STATUS WINAPI MesHandleFree(handle_t Handle)
|
||||||
return RPC_S_OK;
|
return RPC_S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* MesEncodeFixedBufferHandleCreate [RPCRT4.@]
|
||||||
|
*/
|
||||||
|
RPC_STATUS RPC_ENTRY MesEncodeFixedBufferHandleCreate(
|
||||||
|
char *Buffer, ULONG BufferSize, ULONG *pEncodedSize, handle_t *pHandle)
|
||||||
|
{
|
||||||
|
MIDL_ES_MESSAGE *pEsMsg;
|
||||||
|
|
||||||
|
TRACE("(%p, %d, %p, %p)\n", Buffer, BufferSize, pEncodedSize, pHandle);
|
||||||
|
|
||||||
|
pEsMsg = HeapAlloc(GetProcessHeap(), 0, sizeof(*pEsMsg));
|
||||||
|
if (!pEsMsg)
|
||||||
|
return ERROR_OUTOFMEMORY;
|
||||||
|
|
||||||
|
init_MIDL_ES_MESSAGE(pEsMsg);
|
||||||
|
|
||||||
|
pEsMsg->Operation = MES_ENCODE;
|
||||||
|
pEsMsg->HandleStyle = MES_FIXED_BUFFER_HANDLE;
|
||||||
|
pEsMsg->Buffer = (unsigned char *)Buffer;
|
||||||
|
pEsMsg->BufferSize = BufferSize;
|
||||||
|
pEsMsg->pEncodedSize = pEncodedSize;
|
||||||
|
|
||||||
|
*pHandle = (handle_t)pEsMsg;
|
||||||
|
|
||||||
|
return RPC_S_OK;}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* MesDecodeBufferHandleCreate [RPCRT4.@]
|
||||||
|
*/
|
||||||
|
RPC_STATUS RPC_ENTRY MesDecodeBufferHandleCreate(
|
||||||
|
char *Buffer, ULONG BufferSize, handle_t *pHandle)
|
||||||
|
{
|
||||||
|
MIDL_ES_MESSAGE *pEsMsg;
|
||||||
|
|
||||||
|
TRACE("(%p, %d, %p)\n", Buffer, BufferSize, pHandle);
|
||||||
|
|
||||||
|
pEsMsg = HeapAlloc(GetProcessHeap(), 0, sizeof(*pEsMsg));
|
||||||
|
if (!pEsMsg)
|
||||||
|
return ERROR_OUTOFMEMORY;
|
||||||
|
|
||||||
|
init_MIDL_ES_MESSAGE(pEsMsg);
|
||||||
|
|
||||||
|
pEsMsg->Operation = MES_DECODE;
|
||||||
|
pEsMsg->HandleStyle = MES_FIXED_BUFFER_HANDLE;
|
||||||
|
pEsMsg->Buffer = (unsigned char *)Buffer;
|
||||||
|
pEsMsg->BufferSize = BufferSize;
|
||||||
|
|
||||||
|
*pHandle = (handle_t)pEsMsg;
|
||||||
|
|
||||||
|
return RPC_S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
static void es_data_alloc(MIDL_ES_MESSAGE *pEsMsg, ULONG size)
|
static void es_data_alloc(MIDL_ES_MESSAGE *pEsMsg, ULONG size)
|
||||||
{
|
{
|
||||||
if (pEsMsg->HandleStyle == MES_INCREMENTAL_HANDLE)
|
if (pEsMsg->HandleStyle == MES_INCREMENTAL_HANDLE)
|
||||||
|
@ -145,6 +197,11 @@ static void es_data_alloc(MIDL_ES_MESSAGE *pEsMsg, ULONG size)
|
||||||
RpcRaiseException(ERROR_OUTOFMEMORY);
|
RpcRaiseException(ERROR_OUTOFMEMORY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (pEsMsg->HandleStyle == MES_FIXED_BUFFER_HANDLE)
|
||||||
|
{
|
||||||
|
TRACE("%d with fixed buffer handle\n", size);
|
||||||
|
pEsMsg->StubMsg.Buffer = pEsMsg->Buffer;
|
||||||
|
}
|
||||||
pEsMsg->StubMsg.RpcMsg->Buffer = pEsMsg->StubMsg.BufferStart = pEsMsg->StubMsg.Buffer;
|
pEsMsg->StubMsg.RpcMsg->Buffer = pEsMsg->StubMsg.BufferStart = pEsMsg->StubMsg.Buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,6 +218,14 @@ static void es_data_read(MIDL_ES_MESSAGE *pEsMsg, ULONG size)
|
||||||
RpcRaiseException(ERROR_OUTOFMEMORY);
|
RpcRaiseException(ERROR_OUTOFMEMORY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TRACE("%d from fixed or dynamic buffer handle\n", size);
|
||||||
|
/* FIXME: validate BufferSize? */
|
||||||
|
pEsMsg->StubMsg.Buffer = pEsMsg->Buffer;
|
||||||
|
pEsMsg->Buffer += size;
|
||||||
|
pEsMsg->BufferSize -= size;
|
||||||
|
}
|
||||||
pEsMsg->StubMsg.BufferLength = size;
|
pEsMsg->StubMsg.BufferLength = size;
|
||||||
pEsMsg->StubMsg.RpcMsg->Buffer = pEsMsg->StubMsg.BufferStart = pEsMsg->StubMsg.Buffer;
|
pEsMsg->StubMsg.RpcMsg->Buffer = pEsMsg->StubMsg.BufferStart = pEsMsg->StubMsg.Buffer;
|
||||||
pEsMsg->StubMsg.BufferEnd = pEsMsg->StubMsg.Buffer + size;
|
pEsMsg->StubMsg.BufferEnd = pEsMsg->StubMsg.Buffer + size;
|
||||||
|
@ -173,6 +238,11 @@ static void es_data_write(MIDL_ES_MESSAGE *pEsMsg, ULONG size)
|
||||||
TRACE("%d to incremental handle\n", size);
|
TRACE("%d to incremental handle\n", size);
|
||||||
pEsMsg->Write(pEsMsg->UserState, (char *)pEsMsg->StubMsg.BufferStart, size);
|
pEsMsg->Write(pEsMsg->UserState, (char *)pEsMsg->StubMsg.BufferStart, size);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TRACE("%d to dynamic or fixed buffer handle\n", size);
|
||||||
|
*pEsMsg->pEncodedSize += size;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline ULONG mes_proc_header_buffer_size(void)
|
static inline ULONG mes_proc_header_buffer_size(void)
|
||||||
|
|
|
@ -97,10 +97,10 @@
|
||||||
@ stub MIDL_wchar_strcpy
|
@ stub MIDL_wchar_strcpy
|
||||||
@ stub MIDL_wchar_strlen
|
@ stub MIDL_wchar_strlen
|
||||||
@ stub MesBufferHandleReset
|
@ stub MesBufferHandleReset
|
||||||
@ stub MesDecodeBufferHandleCreate
|
@ stdcall MesDecodeBufferHandleCreate(ptr long ptr)
|
||||||
@ stdcall MesDecodeIncrementalHandleCreate(ptr ptr ptr)
|
@ stdcall MesDecodeIncrementalHandleCreate(ptr ptr ptr)
|
||||||
@ stub MesEncodeDynBufferHandleCreate
|
@ stub MesEncodeDynBufferHandleCreate
|
||||||
@ stub MesEncodeFixedBufferHandleCreate
|
@ stdcall MesEncodeFixedBufferHandleCreate(ptr long ptr ptr)
|
||||||
@ stdcall MesEncodeIncrementalHandleCreate(ptr ptr ptr ptr)
|
@ stdcall MesEncodeIncrementalHandleCreate(ptr ptr ptr ptr)
|
||||||
@ stdcall MesHandleFree(ptr)
|
@ stdcall MesHandleFree(ptr)
|
||||||
@ stdcall MesIncrementalHandleReset(ptr ptr ptr ptr ptr long)
|
@ stdcall MesIncrementalHandleReset(ptr ptr ptr ptr ptr long)
|
||||||
|
|
Loading…
Reference in New Issue