No need for a repeat of the server stuff; rpc_F_PL0_r1 still applies without incident. Clearly, we are close to some kind of meaningful result, here. This patchlevel is capable (using the MSDN DCE Interop example w/ ncalrpc) of actual inter-process communication (of a sort) without a crash. The server responds to a packet by calling stubs; the round-trip does not complete, and the client hangs as a result. LICENSE: X11 CHANGELOG: * dlls/rpcrt4: ndr_marshall.c, ndr_midl.c, rpc_binding.c, rpcrt4.spec; include: rpcndr.h: Greg Turner <gmturner007@ameritech.net> - clean up and enhance some traces - stubs for NdrConvert, NdrConvert2, and NdrServerInitializeNew. -- gmt "The purpose of government is to rein in the rights of the people" --President Bill Clinton, MTV interview, 1993
diff -ur -x CVS -x 'bigdif*' ../wine.test/dlls/rpcrt4/ndr_marshall.c ./dlls/rpcrt4/ndr_marshall.c --- ../wine.test/dlls/rpcrt4/ndr_marshall.c 2002-10-25 21:17:10.000000000 -0500 +++ ./dlls/rpcrt4/ndr_marshall.c 2002-10-26 03:37:45.000000000 -0500 @@ -106,8 +106,26 @@ unsigned char *WINAPI NdrConformantStringUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char** ppMemory, PFORMAT_STRING pFormat, unsigned char fMustAlloc ) { - FIXME("stub\n"); + FIXME("(pStubMsg == ^%p, *pMemory == ^%p, pFormat == ^%p, fMustAlloc == %u): stub.\n", + pStubMsg, *ppMemory, pFormat, fMustAlloc); return NULL; } +/*********************************************************************** + * NdrConvert [RPCRT4.@] + */ +void WINAPI NdrConvert( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat ) +{ + FIXME("(pStubMsg == ^%p, pFormat == ^%p): stub.\n", pStubMsg, pFormat); +} + +/*********************************************************************** + * NdrConvert2 [RPCRT4.@] + */ +void WINAPI NdrConvert2( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat, long NumberParams ) +{ + FIXME("(pStubMsg == ^%p, pFormat == ^%p, NumberParams == %ld): stub.\n", pStubMsg, pFormat, NumberParams); +} + + #undef BUFFER_PARANOIA diff -ur -x CVS -x 'bigdif*' ../wine.test/dlls/rpcrt4/ndr_midl.c ./dlls/rpcrt4/ndr_midl.c --- ../wine.test/dlls/rpcrt4/ndr_midl.c 2002-10-25 21:17:10.000000000 -0500 +++ ./dlls/rpcrt4/ndr_midl.c 2002-10-26 03:18:54.000000000 -0500 @@ -193,6 +193,16 @@ } /*********************************************************************** + * NdrServerInitializeNew [RPCRT4.@] + */ +unsigned char* WINAPI NdrServerInitializeNew( PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg, + PMIDL_STUB_DESC pStubDesc ) +{ + FIXME("(pRpcMsg == ^%p, pStubMsg == ^%p, pStubDesc == ^%p): stub.\n", pRpcMsg, pStubMsg, pStubDesc); + return NULL; +} + +/*********************************************************************** * NdrGetBuffer [RPCRT4.@] */ unsigned char *WINAPI NdrGetBuffer(MIDL_STUB_MESSAGE *stubmsg, unsigned long buflen, RPC_BINDING_HANDLE handle) diff -ur -x CVS -x 'bigdif*' ../wine.test/dlls/rpcrt4/rpc_binding.c ./dlls/rpcrt4/rpc_binding.c --- ../wine.test/dlls/rpcrt4/rpc_binding.c 2002-10-23 23:17:52.000000000 -0500 +++ ./dlls/rpcrt4/rpc_binding.c 2002-10-26 03:08:22.000000000 -0500 @@ -231,7 +231,7 @@ RPC_STATUS RPCRT4_OpenBinding(RpcBinding* Binding) { - TRACE(" (Binding == ^%p)\n", Binding); + TRACE("(Binding == ^%p)\n", Binding); if (!Binding->conn) { if (Binding->server) { /* server */ /* protseq=ncalrpc: supposed to use NT LPC ports, diff -ur -x CVS -x 'bigdif*' ../wine.test/dlls/rpcrt4/rpc_server.c ./dlls/rpcrt4/rpc_server.c --- ../wine.test/dlls/rpcrt4/rpc_server.c 2002-10-23 23:17:52.000000000 -0500 +++ ./dlls/rpcrt4/rpc_server.c 2002-10-26 02:07:13.000000000 -0500 @@ -402,7 +402,7 @@ { RpcServerProtseq* ps; - TRACE("(%s,%u,%s,%p,{%u,%lu,%lu}): stub\n", debugstr_a( Protseq ), MaxCalls, + TRACE("(%s,%u,%s,%p,{%u,%lu,%lu})\n", debugstr_a( Protseq ), MaxCalls, debugstr_a( Endpoint ), SecurityDescriptor, lpPolicy->Length, lpPolicy->EndpointFlags, lpPolicy->NICFlags ); @@ -422,7 +422,7 @@ { RpcServerProtseq* ps; - TRACE("(%s,%u,%s,%p,{%u,%lu,%lu}): stub\n", debugstr_w( Protseq ), MaxCalls, + TRACE("(%s,%u,%s,%p,{%u,%lu,%lu})\n", debugstr_w( Protseq ), MaxCalls, debugstr_w( Endpoint ), SecurityDescriptor, lpPolicy->Length, lpPolicy->EndpointFlags, lpPolicy->NICFlags ); diff -ur -x CVS -x 'bigdif*' ../wine.test/dlls/rpcrt4/rpcrt4.spec ./dlls/rpcrt4/rpcrt4.spec --- ../wine.test/dlls/rpcrt4/rpcrt4.spec 2002-10-26 03:46:58.000000000 -0500 +++ ./dlls/rpcrt4/rpcrt4.spec 2002-10-26 03:45:08.000000000 -0500 @@ -209,8 +209,8 @@ @ stdcall NdrClientInitializeNew(ptr ptr ptr long) NdrClientInitializeNew @ stub NdrContextHandleInitialize @ stub NdrContextHandleSize -@ stub NdrConvert -@ stub NdrConvert2 +@ stdcall NdrConvert(ptr ptr) NdrConvert +@ stdcall NdrConvert2(ptr ptr long) NdrConvert2 @ stub NdrCorrelationFree @ stub NdrCorrelationInitialize @ stub NdrCorrelationPass @@ -349,7 +349,7 @@ @ stub NdrServerContextUnmarshall @ stub NdrServerInitialize @ stub NdrServerInitializeMarshall -@ stub NdrServerInitializeNew +@ stdcall NdrServerInitializeNew(ptr ptr ptr) NdrServerInitializeNew @ stub NdrServerInitializeUnmarshall @ stub NdrServerMarshall @ stub NdrServerUnmarshall diff -ur -x CVS -x 'bigdif*' ../wine.test/include/rpcndr.h ./include/rpcndr.h --- ../wine.test/include/rpcndr.h 2002-10-25 21:17:10.000000000 -0500 +++ ./include/rpcndr.h 2002-10-26 03:14:50.000000000 -0500 @@ -309,6 +309,8 @@ NdrClientInitializeNew( PRPC_MESSAGE pRpcMessage, PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDesc, unsigned int ProcNum ); RPCRTAPI unsigned char* RPC_ENTRY + NdrServerInitializeNew( PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDesc ); +RPCRTAPI unsigned char* RPC_ENTRY NdrGetBuffer( MIDL_STUB_MESSAGE *stubmsg, unsigned long buflen, RPC_BINDING_HANDLE handle ); RPCRTAPI void RPC_ENTRY NdrFreeBuffer( MIDL_STUB_MESSAGE *pStubMsg );