なんでIUnknownでは、
HRESULT QueryInterface(REFIID,LPVOID*);
って、型になってるのに、
IShellFolderでは、
HRESULT QueryInterface(REFIID,PVOID*);
って、型になってるんだろう?
正直これが原因のような気もする。

そもそもIUnknownで、
HRESULT QueryInterface(REFIID riid, LPVOID* ppvObject);
ULONG AddRef();
ULONG Release();
がリストされてるんだから、IShellFolderで改めてリストする必要は無いよねえ・・・