Found something:
WinXP calls CClassFactory_CreateInstance riid=000214E8 IID_IShellExtInit
Win7 calls CClassFactory_CreateInstance riid=000214E4 IID_IContextMenu
So that problem is in CClassFactory_CreateInstance() in ClassFactory.c.
EDIT:
Is this a proper quick fix ?...
if (pUnkOuter)
return ResultFromScode (CLASS_E_NOAGGREGATION);
// {0x000214e8,0,0,{0xc0,0,0,0,0,0,0,0x46}} {0x000214e4,0,0,{0xc0,0,0,0,0,0,0,0x46}}
if (IsEqualIID (riid, &IID_IShellExtInit) || (IsEqualIID (riid, &IID_IContextMenu) && pCF->m_ulRef == 1))
{
...