Annotation of truecrypt/common/basecom.h, revision 1.1

1.1     ! root        1: /*
        !             2:  Copyright (c) TrueCrypt Foundation. All rights reserved.
        !             3: 
        !             4:  Covered by the TrueCrypt License 2.2 the full text of which is contained
        !             5:  in the file License.txt included in TrueCrypt binary and source code
        !             6:  distribution packages.
        !             7: */
        !             8: 
        !             9: #include <guiddef.h>
        !            10: 
        !            11: template <class TClass>
        !            12: class TrueCryptFactory : public IClassFactory
        !            13: {
        !            14: 
        !            15: public:
        !            16:        TrueCryptFactory (DWORD messageThreadId) : 
        !            17:                RefCount (1), ServerLockCount (0), MessageThreadId (messageThreadId) { }
        !            18: 
        !            19:        ~TrueCryptFactory () { }
        !            20:        
        !            21:        virtual ULONG STDMETHODCALLTYPE AddRef ()
        !            22:        {
        !            23:                return InterlockedIncrement (&RefCount) - 1;
        !            24:        }
        !            25: 
        !            26:        virtual ULONG STDMETHODCALLTYPE Release ()
        !            27:        {
        !            28:                ULONG r = InterlockedDecrement (&RefCount) + 1;
        !            29: 
        !            30:                if (r == 0)
        !            31:                        delete this;
        !            32: 
        !            33:                return r;
        !            34:        }
        !            35: 
        !            36:        virtual HRESULT STDMETHODCALLTYPE QueryInterface (REFIID riid, void **ppvObject)
        !            37:        {
        !            38:                if (riid == IID_IUnknown || riid == IID_IClassFactory)
        !            39:                        *ppvObject = this;
        !            40:                else
        !            41:                {
        !            42:                        *ppvObject = NULL;
        !            43:                        return E_NOINTERFACE;
        !            44:                }
        !            45: 
        !            46:                AddRef ();
        !            47:                return S_OK;
        !            48:        }
        !            49:         
        !            50:        virtual HRESULT STDMETHODCALLTYPE CreateInstance (IUnknown *pUnkOuter, REFIID riid, void **ppvObject)
        !            51:        {
        !            52:                if (pUnkOuter != NULL)
        !            53:                        return CLASS_E_NOAGGREGATION;
        !            54: 
        !            55:                TClass *tc = new TClass (MessageThreadId);
        !            56:                if (tc == NULL)
        !            57:                        return E_OUTOFMEMORY;
        !            58: 
        !            59:                HRESULT hr = tc->QueryInterface (riid, ppvObject);
        !            60: 
        !            61:                if (hr)
        !            62:                        delete tc;
        !            63: 
        !            64:                return hr;
        !            65:        }
        !            66: 
        !            67:        virtual HRESULT STDMETHODCALLTYPE LockServer (BOOL fLock)
        !            68:        {
        !            69:                if (fLock)
        !            70:                {
        !            71:                        InterlockedIncrement (&ServerLockCount);
        !            72:                }
        !            73:                else
        !            74:                {
        !            75:                        if (!InterlockedDecrement (&ServerLockCount))
        !            76:                                PostThreadMessage (MessageThreadId, WM_APP, 0, 0);
        !            77:                }
        !            78: 
        !            79:                return S_OK;
        !            80:        }
        !            81: 
        !            82:        virtual bool IsServerLocked ()
        !            83:        {
        !            84:                return ServerLockCount > 0;
        !            85:        }
        !            86: 
        !            87: protected:
        !            88:        DWORD MessageThreadId;
        !            89:        LONG RefCount;
        !            90:        LONG ServerLockCount;
        !            91: };
        !            92: 
        !            93: 
        !            94: BOOL ComGetInstanceBase (HWND hWnd, REFCLSID clsid, REFIID iid, void **tcServer);
        !            95: HRESULT CreateElevatedComObject (HWND hwnd, REFGUID guid, REFIID iid, void **ppv);

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.