CoCreateInstance Cannot Fetch IUnkown?
 
I am working on a Disk-Cleanup program. Disk-Cleanup utility in works
works with COM. In Windows Registry
"HKLM/Software/Microsoft/Windows/CurrentVersion/Explorer/VolumeCache",
there are info about all COM components that is for different kinds of
temp files.
I used _com_ptr_t and found it cannot create instance for some
component. So I checked code in _com_ptr_t::CreateInstance(). It is as
below:
    // Loads an interface for the provided CLSID.
    // Returns an HRESULT.  Any previous interface is unconditionally
released.
    //
    HRESULT CreateInstance(const CLSID& rclsid, IUnknown* pOuter =
NULL, DWORD dwClsContext = CLSCTX_ALL) throw()
    {
        HRESULT hr;
        _Release();
        if (dwClsContext & (CLSCTX_LOCAL_SERVER |
CLSCTX_REMOTE_SERVER)) {
            IUnknown* pIUnknown;
            hr = CoCreateInstance(rclsid, pOuter, dwClsContext,
__uuidof(IUnknown), reinterpret_cast<void**>(&pIUnknown));
            if (SUCCEEDED(hr)) {
                hr = OleRun(pIUnknown);
                if (SUCCEEDED(hr)) {
                    hr = pIUnknown->QueryInterface(GetIID(),
reinterpret_cast<void**>(&m_pInterface));
                }
                pIUnknown->Release();
            }
        }
        else {
            hr = CoCreateInstance(rclsid, pOuter, dwClsContext,
GetIID(), reinterpret_cast<void**>(&m_pInterface));
        }
        if (FAILED(hr)) {
            // just in case refcount = 0 and dtor gets called
            m_pInterface = NULL;
        }
        return hr;
}
I set some point and found that the CreateInstance breaks at
"CoCreateInstance(rclsid, pOuter, dwClsContext, __uuidof(IUnknown),
reinterpret_cast<void**>(&pIUnknown))". For Some some components it
fails, for others it is OK.
This is weird. Any component should support IUnkown interface. I write
some code the check the component by CoGetClassObject and get IUnkown
successfully. It confuses me. I believe that CoCreateInstance must do
something strange so that it cannot load some (not all) components.
Is it possible that component disable client to get its IUnkown through
CoCreateInstance?
Thanks