I am currently troubleshooting an issue and wrote some code in an effort to reproduce it. However, when my program called into IMAPISession::OpenAddressBook and gave the IID IID_IAddrBook for the lpInterface parameter it would return E_NOINTERFACE. This puzzled me because the method returns a pointer to the IAddrBook interface so it should “support” this interface. After reviewing the source code I realized that if an interface is supplied, no matter what it is, the method will return E_NOINTERFACE. Odd. If you want the method to work you need to pass NULL.
Note: I was using 6.5.8131 of Exchange’s MAPI. I didn’t test it with anything besides that. Therefore, I don’t know if Outlook’s MAPI behaves differently. I just wanted to get it out there.