3 class CNetshellClassFactory final
:
7 CNetshellClassFactory(REFCLSID rclsid
);
10 virtual HRESULT WINAPI
QueryInterface(REFIID riid
, LPVOID
*ppvOut
);
11 virtual ULONG WINAPI
AddRef();
12 virtual ULONG WINAPI
Release();
15 virtual HRESULT WINAPI
CreateInstance(LPUNKNOWN pUnkOuter
, REFIID riid
, LPVOID
*ppvObject
);
16 virtual HRESULT WINAPI
LockServer(BOOL fLock
);
23 CNetshellClassFactory::CNetshellClassFactory(REFCLSID rclsid
) :
31 CNetshellClassFactory::QueryInterface(
36 if (IsEqualIID(riid
, IID_IUnknown
) || IsEqualIID(riid
, IID_IClassFactory
))
38 *ppvObj
= static_cast<IClassFactory
*>(this);
47 CNetshellClassFactory::AddRef()
49 ULONG refCount
= InterlockedIncrement(&m_ref
);
56 CNetshellClassFactory::Release()
58 ULONG refCount
= InterlockedDecrement(&m_ref
);
68 CNetshellClassFactory::CreateInstance(
75 if (IsEqualCLSID(m_clsid
, CLSID_ConnectionFolder
))
76 return ISF_NetConnect_Constructor(pUnkOuter
, riid
, ppvObject
);
77 else if (IsEqualCLSID(m_clsid
, CLSID_ConnectionManager
))
78 return INetConnectionManager_Constructor(pUnkOuter
, riid
, ppvObject
);
79 else if (IsEqualCLSID(m_clsid
, CLSID_LanConnectionUi
))
80 return LanConnectUI_Constructor(pUnkOuter
, riid
, ppvObject
);
81 else if (IsEqualCLSID(m_clsid
, CLSID_ConnectionTray
))
82 return LanConnectStatusUI_Constructor(pUnkOuter
, riid
, ppvObject
);
89 CNetshellClassFactory::LockServer(BOOL fLock
)
94 HRESULT
IClassFactory_fnConstructor(REFCLSID rclsid
, REFIID riid
, LPVOID
*ppvOut
)
96 CNetshellClassFactory
*pClsFactory
= new CNetshellClassFactory(rclsid
);
100 pClsFactory
->AddRef();
101 HRESULT hr
= pClsFactory
->QueryInterface(riid
, ppvOut
);
102 pClsFactory
->Release();