// COMDLL.h -- Component Object Model plumbing for the Storage DLL // // ------------------------------ // History: // // 96/10/08; RonM; Created // ------------------------------ // DLL Exports // // Note the { extern "C" } qualifiers. They're necessary to mark these as C declarations // rather than C++ declarations. extern "C" BOOL WINAPI DllMain(HMODULE hInst, ULONG ul_reason_for_call, LPVOID lpReserved); extern "C" STDAPI DllRegisterServer(void); extern "C" STDAPI DllUnregisterServer(void); extern "C" STDAPI DllCanUnloadNow(); extern "C" STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv); extern CImpITUnknown *g_pImpITFileSystemList; extern CImpITUnknown *g_pFSLockBytesFirstActive; extern CImpITUnknown *g_pStrmLockBytesFirstActive; extern CImpITUnknown *g_pImpIFSStorageList; /* GUID formats for the MVStorage class ID: {5D02926A-212E-11d0-9DF9-00A0C922E6EC} // {5D02926A-212E-11d0-9DF9-00A0C922E6EC} static const GUID <> = { 0x5d02926a, 0x212e, 0x11d0, { 0x9d, 0xf9, 0x0, 0xa0, 0xc9, 0x22, 0xe6, 0xec } }; // {5D02926A-212E-11d0-9DF9-00A0C922E6EC} DEFINE_GUID(<>, 0x5d02926a, 0x212e, 0x11d0, 0x9d, 0xf9, 0x0, 0xa0, 0xc9, 0x22, 0xe6, 0xec); // {5D02926A-212E-11d0-9DF9-00A0C922E6EC} IMPLEMENT_OLECREATE(<>, <>, 0x5d02926a, 0x212e, 0x11d0, 0x9d, 0xf9, 0x0, 0xa0, 0xc9, 0x22, 0xe6, 0xec); */ #define CLASS_NAME "MSITFS" #define CLASS_NAMEW L"MSITFS" #define CURRENT_VERSION "MSITFS1.0" #define CLASS_NAME_MK "MSITStore" #define CLASS_NAMEW_MK L"MSITStore" #define CURRENT_VERSION_MK "MSITStore1.0" #define CLASS_NAME_ITS "ITSProtocol" #define CLASS_NAMEW_ITS L"ITSProtocol" #define CURRENT_VERSION_ITS "ITSProtocol1.0" #define CLASS_NAME_FS "MSFSStore" #define CLASS_NAMEW_FS L"MSFSStore" #define CURRENT_VERSION_FS "MSFSStore1.0" extern CITCriticalSection g_csITFS; class CServerState { public: static CServerState *CreateServerState(HMODULE hInst); ~CServerState(); INT ObjectAdded(); INT ObjectReleased(); INT LockServer(); INT UnlockServer(); BOOL CanUnloadNow(); HMODULE ModuleInstance(); IMalloc *OLEAllocator(); private: CServerState(HANDLE hInst); BOOL InitServerState(); INT m_cObjectsActive; INT m_cLocksActive; HMODULE m_hModule; IMalloc *m_pIMalloc; CITCriticalSection m_cs; }; inline CServerState::CServerState(HANDLE hModule) { m_cObjectsActive = 0; m_cLocksActive = 0; m_pIMalloc = NULL; m_hModule = (HMODULE) hModule; DEBUGCODE(CITUnknown::OpenReferee();) } inline CServerState::~CServerState() { RonM_ASSERT(CanUnloadNow()); if (m_pIMalloc) m_pIMalloc->Release(); } inline IMalloc *CServerState::OLEAllocator() { return m_pIMalloc; } inline HMODULE CServerState::ModuleInstance() { return m_hModule; } extern CServerState *pDLLServerState; inline IMalloc *OLEHeap() { RonM_ASSERT(pDLLServerState); RonM_ASSERT(pDLLServerState->OLEAllocator()); return pDLLServerState->OLEAllocator(); } // Typedefs and global pointers for IE 4.0 APIs which we use. typedef HRESULT (STDAPICALLTYPE *PFindMimeFromData) (LPBC pBC, // bind context - can be NULL LPCWSTR pwzUrl, // url - can be null LPVOID pBuffer, // buffer with data to sniff - can be null (pwzUrl must be valid) DWORD cbSize, // size of buffer LPCWSTR pwzMimeProposed, // proposed mime if - can be null DWORD dwMimeFlags, // will be determined LPWSTR *ppwzMimeOut, // the suggested mime DWORD dwReserved // must be 0 ); extern PFindMimeFromData pFindMimeFromData; extern BOOL g_fDBCSSystem; inline BOOL IS_IE4 () { return (pFindMimeFromData != NULL); } inline BOOL DBCS_SYSTEM() { return g_fDBCSSystem; } #define NT_System 0 #define Unknown_System 1 #define Win32s_System 2 #define Win95_System 3 extern UINT iSystemType; inline BOOL Is_NT_System () { return (iSystemType == NT_System); } inline BOOL Is_Win32s_System() { return (iSystemType == Win32s_System); } inline BOOL Is_Win95_System () { return (iSystemType == Win95_System); } extern UINT cp_Default; inline UINT CP_USER_DEFAULT() { return cp_Default; }