Misc wine debugging questions

Mike Hearn mike at theoretic.com
Thu Oct 30 16:16:15 CST 2003


On Thu, 30 Oct 2003 15:28:49 -0600, Sir Gregory M. Turner scribed thus:
> Unfortunately, there isn't a ton of documentation -- or, more accurately, the 
> documentation that you may find is scattered throughout MSDN and the 
> internet, instead of being in an "obvious" place.  The MSDN documentation for 
> NdrClientCall2, for example, is almost worthless from the wine implementer's 
> perspective, just stating something like "This is the entry-point for 
> stubless proxies."  From the perspective of most users, stubless proxies are 
> a behind-the-scenes implementation detail that isn't worth learning too much 
> about.
> 
> The end-programmer's perspective is as follows: pass /Oicf to MIDL, and MIDL 
> will magically generate stubless proxies.  I forget if /Oic is considered 
> "stubless" as well, I think it may be.   The resulting client proxy code 
> generated by MIDL will contain "NdrClientCall2" or "NdrClientCall" instead of 
> the usual multi-step proxy code (there is no in-proxy marshalling, 
> exception-handling, etc -- just the single call).
> 
> In wine, NdrClientCall2 (the more common entry-point) is totally unimplemented 
> -- it simply emits a FIXME and returns indicating success.  
> 
> The server side is analogous.  You will see some code by Ove floating around 
> to generate the manager entry-point thunks in asm, but I don't think they are 
> used yet (?).
> 
> Unfortunately, stubless proxies have been the recommended (by Microsoft) mode 
> of generating code from MIDL for many years.  Increasingly, I see calls to 
> NdrClientCall2.  The only solution (aside from coding wine) is to use native 
> rpcrt4/ole32 -- but this, in turn, means you must use Windows 98 dll's or 
> else you will bump up against the missing "Ports" API if ncalrpc is used (it 
> usually is -- this is why I keep musing that I want to take a crack at 
> implementing this).

ncalrpc?

> I think, the way to code those is to use the structures provided by MIDL (and 
> eventually widl) to determine the necessary steps.  In particular, I think 
> this is where the format strings come in handy -- presumably, NdrClientCall2 
> should parse the format strings and determine what to marshall/unmarshall 
> using those.  My theory is that the steps taken in NdrClientCall2 would look 
> very much like those MIDL would spit out in /Oi mode.

Your theory is correct. Somehow I stumbled upon this article:

http://www.microsoft.com/msj/0199/com/com0199.aspx

which explains the whole thing. It also talks about how the MS typelib
marshaller is implemeneted - basically it generates format strings from the
typelib data then feeds that to the Ndr format string interpreters.

> Stated succinctly, stubless proxies are the RPC/DCOM holy grail for wine.

Indeed. That seems to be the way it goes....
 
thanks -mike




More information about the wine-devel mailing list