I'm looking for a way to determine programmatically what the arguments to a Win32 API implemented in Wine are.  I'm trying to implement an API redirection stub that I can use to trace calls into all of the Wine-implemented DLLs.  My stub needs to know what each argument passed into the Win32 API, their types and sizes, and whether they reside on the stack or register when calling the routine and finally their return value. 

In researching Wine, I have come to find out two tools, winedump and winebuild that may be helpful in doing this but I have yet to find out how to use them correctly to get the information  I seek.  Maybe they just don't have that capability or maybe I just haven't played with them enough to find all of its uses.

For example, I found that each DLL has a *.spec file which looks to have some of the info I need:

@ stdcall GetSystemTimeAsFileTime(ptr)

Looking at the man pages, this tells me that GetSystemTimeAsFileTime takes in an argument as a pointer but I don't see any return value information here.  Also, does this file ever represent arguments passed by value on the stack, like a structure?  If so, does it capture how big the structure is?  What about function prototypes with variable arguments (similar to printf(...)).. are those capture in the file?  Can I also assume (based on the calling convention listed as stdcall) which arguments will be on registers and which will be on the stack?

I know that the DWARF debug info can give me some of what I need but I would have to write a big parser for which I lack the time now.  Are there other tools that may make this easier if winedump and winebuild can't help me?

I know this is a lot to ask here but I'm just getting started with Wine and need to come up to speed very fast.  Thanks in advance for any help you can provide me.

Roger R. Cruz