NT4/private/ole32/stg/props/reserved.hxx
2020-09-30 17:12:29 +02:00

184 lines
4.1 KiB
C++

//+-------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1992.
//
// File: reserved.hxx
//
// Contents: Definition for class to handle reserved memory for
// property operation.
//
// Classes: CWin32ReservedMemory
// CWin31ReservedMemory
//
// History: 07-Jun-92 BillMo Created.
// 29-Aug-96 MikeHill Split CReservedMemory into CWin31 & CWin32
//
//--------------------------------------------------------------------------
#ifndef _RESERVED_HXX_
#define _RESERVED_HXX_
//+-------------------------------------------------------------------------
//
// Class: CReservedMemory
//
// Purpose: Provide a memory reservation mechanism. Once initialized,
// a pointer to the memory can be retrieved with the Lock
// which obviously locks the buffer as well.
//
//--------------------------------------------------------------------------
class CReservedMemory
{
public:
virtual ~CReservedMemory() {};
public:
virtual HRESULT Init(VOID) = 0;
virtual BYTE * LockMemory(VOID) = 0;
virtual VOID UnlockMemory(VOID) = 0;
};
//+----------------------------------------------------------------------------
//
// Class: CWin32ReservedMemory
//
// Purpose: Defines a derivation of CReservedMemory which can be
// used in a Win32 environment. Win32 is necessary
// for its Mutex and file-mapping APIs.
//
//+----------------------------------------------------------------------------
#ifndef _MAC
class CWin32ReservedMemory : public CReservedMemory
{
// Constructors.
public:
CWin32ReservedMemory()
{
_hLock = NULL;
_hMapping = NULL;
_pb = NULL;
_fInitializedHint = FALSE;
}
~CWin32ReservedMemory();
// Public overrides
public:
HRESULT Init(VOID)
{
if (!_fInitializedHint)
return(_Init());
else
return(S_OK);
}
BYTE * LockMemory(VOID);
VOID UnlockMemory(VOID);
// Internal methods
private:
HRESULT _Init(VOID);
// Internal data
private:
HANDLE _hLock; // all initialized to zero...
HANDLE _hMapping;
BYTE * _pb;
BOOL _fInitializedHint;
};
#endif // #ifndef _MAC
//+----------------------------------------------------------------------------
//
// Class: CWin31ReservedMemory
//
// Purpose: This derivation of CReservedMemory assumes the Win 3.1
// architecture of shared-memory DLLs and cooperative multi-threading.
//
// This class assumes that the g_pbPropSetReserved extern is a
// large enough buffer for the largest property set.
// Note that on the Mac, g_pbPropSetReserved should exist in
// a shared-data library, so that there need not be one
// Reserved buffer per instance of the property set library.
//
//+----------------------------------------------------------------------------
#ifdef _MAC
class CWin31ReservedMemory : public CReservedMemory
{
// Constructors
public:
CWin31ReservedMemory()
{
#if DBG==1
_fLocked = FALSE;
#endif
}
~CWin31ReservedMemory()
{
DfpAssert( !_fLocked );
}
// Public overrides
public:
HRESULT Init(VOID)
{
return(S_OK);
}
BYTE * LockMemory(VOID);
VOID UnlockMemory(VOID);
// Private data
private:
#if DBG==1
BOOL _fLocked;
#endif
};
#endif // #ifdef _MAC
//
// Provide an extern for the instantiation of CReservedMemory.
// We use the CWin31 class on the Mac, and the CWin32 everywhere
// else. Also, along with the CWin31 extern, we must extern
// the global reserved memory buffer.
//
#ifdef _MAC
EXTERN_C long g_pbPropSetReserved[];
extern CWin31ReservedMemory g_ReservedMemory;
#else
extern CWin32ReservedMemory g_ReservedMemory;
#endif
#endif // #ifndef _RESERVED_HXX_