162 lines
4.2 KiB
C
162 lines
4.2 KiB
C
|
// 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 <<name>> =
|
||
|
{ 0x5d02926a, 0x212e, 0x11d0, { 0x9d, 0xf9, 0x0, 0xa0, 0xc9, 0x22, 0xe6, 0xec } };
|
||
|
|
||
|
// {5D02926A-212E-11d0-9DF9-00A0C922E6EC}
|
||
|
DEFINE_GUID(<<name>>,
|
||
|
0x5d02926a, 0x212e, 0x11d0, 0x9d, 0xf9, 0x0, 0xa0, 0xc9, 0x22, 0xe6, 0xec);
|
||
|
|
||
|
// {5D02926A-212E-11d0-9DF9-00A0C922E6EC}
|
||
|
IMPLEMENT_OLECREATE(<<class>>, <<external_name>>,
|
||
|
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; }
|