please don't apply RPC Merge D_PL1

Ove Kaaven ovek at arcticnet.no
Sun Oct 13 18:41:11 CDT 2002


On Sun, 13 Oct 2002, Greg Turner wrote:

> LONG_PTR RPCRT4_NdrClientCall2(PMIDL_STUB_DESC pStubDesc, PFORMAT_STRING pFormat, va_list args)
> {
> 
>   FIXME("(pStubDec == ^%p,pFormat = \"%s\",...): stub\n", pStubDesc, pFormat);
> 
>   PRPC_CLIENT_INTERFACE rpc_cli_if = (PRPC_CLIENT_INTERFACE)(pStubDesc->RpcInterfaceInformation);

(hmm, does this even compile? I didn't think C allowed variable
declarations after statements)

>   TRACE("rpc_cli_if == ^%p\n", rpc_cli_if);
>  
>   TRACE("rpc_cli_if: Length == %d; InterfaceID == <%s,<%d.%d>>; TransferSyntax == <%s,<%d.%d>>; DispatchTable == ^%p; RpcProtseqEndpointCount == %d; RpcProtseqEndpoint == ^%p; Flags == %d\n",
>    rpc_cli_if->Length,
>    debugstr_guid(&rpc_cli_if->InterfaceId.SyntaxGUID), rpc_cli_if->InterfaceId.SyntaxVersion.MajorVersion, rpc_cli_if->InterfaceId.SyntaxVersion.MinorVersion,
>    debugstr_guid(&rpc_cli_if->TransferSyntax.SyntaxGUID), rpc_cli_if->TransferSyntax.SyntaxVersion.MajorVersion, rpc_cli_if->TransferSyntax.SyntaxVersion.MinorVersion,
>    rpc_cli_if->DispatchTable, 
>    rpc_cli_if->RpcProtseqEndpointCount, 
>    rpc_cli_if->RpcProtseqEndpoint, 
>    rpc_cli_if->Flags);
> 
>   return 0;
> }
> 
> but that doesn't work out.  It blows up:
> 
> greg at yodull midled $ wine --dll rpcrt4,msvcrt=b --debugmsg +ole helloc
> trace:ole:RpcStringBindingComposeA ((null),"ncacn_np",(null),"\\pipe\\hello",(null),0x406d2ddc)
> RpcStringBindingCompose returned 0x0
> pszStringBinding = ncacn_np:[\pipe\hello]
> trace:ole:RpcBindingFromStringBindingA ("ncacn_np:[\\pipe\\hello]",0x403224)
> trace:ole:RpcStringBindingParseA ("ncacn_np:[\\pipe\\hello]",0x406d2d68,0x406d2d6c,0x406d2d70,0x406d2d74,0x406d2d78)
> trace:ole:RPCRT4_CreateBindingA binding: 0x403b4970
> trace:ole:RPCRT4_SetBindingObject   (*RpcBinding == ^0x403b4970, UUID == {00000000-0000-0000-0000-000000000000})
> trace:ole:RPCRT4_CompleteBindingA   (RpcBinding == ^0x403b4970, NetworkAddr == "", EndPoint == "\pipe\hello", NetworkOptions == "(null)")
> RpcBindingFromStringBinding returned 0x0
> Calling the remote procedure 'HelloProc'
> Print the string 'hello, world' on the server
> trace:ole:NdrClientCall2 (0x4020c2,0x406d2da4,...)
> fixme:ole:RPCRT4_NdrClientCall2 (pStubDec == ^0x4020c2,pFormat = "0@",...): stub
> trace:ole:RPCRT4_NdrClientCall2 rpc_cli_if = ^0x4832
> Runtime reported exception 0xc0000005 = -1073741819
> 
> Obviously, it never succesfully displays the big trace stmt, probably crashing
> deferincing the suspicious-looking "0x4832" pointer...

The pStubDesc structure should have been initialized (including setting
that pointer, I think) by the NdrClientInitialize or
NdrClientInitializeNew (or for DCOM, NdrProxyInitialize, but perhaps
NdrProxyInitialize should call down to NdrClientInitialize/New anyway)
functions. My patches didn't implement those functions, since I was mostly
concerned with DCOM. Is this a real RPC app that works on Windows you're
working on?




More information about the wine-devel mailing list