Many people have asked me how i repeatedly succeeded in getting the exact definition of an undocumented COM interface.
It is actually quite easy.
I always do this in the Visual C++ debugger, with full Windows debug symbols installed.
First you have to get hold of an implementation of the interface. This is usually the hard part.
Once you have the interface pointer, see which address the pointer points to.
Copy this address to the memory window.
Your memory window is now displaying the vtable for the interface.
Every 4 bytes in the memory window are for a function of the interface.
Be careful: The addresses are in intel byte order, so you have to reverse order of the bytes to get an actual address.
Now you can just copy the addresses one by one in your EIP register (the instruction pointer).
Your call stack will display the exact definition of the function, complete with parameters etc.
You will have to invent the names for the parameters yourself, but they do not really matter.
The first three functions will be the IUnknown functions QueryInterface, AddRef and Release.
After that come all the other functions of the interface.