Annotation of truecrypt/common/basecom.h, revision 1.1.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.