|
|
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1994.
//
// File: mmodel.cxx
//
// Contents: CMemoryModel
//
// History: 29-Sep-94 DrewB Created
//
//----------------------------------------------------------------------------
#include "headers.cxx"
#pragma hdrstop
CMemoryModel16 mmodel16Public(TRUE); CMemoryModel16 mmodel16Owned(FALSE); CMemoryModel32 mmodel32;
//+---------------------------------------------------------------------------
//
// Method: CMemoryModel16::AllocMemory
//
// Synopsis: Allocates memory
//
// Arguments: [cb] - Size of block to allocate
//
// Returns: New address of block or NULL
//
// History: 7-05-94 BobDay (Bob Day) Created
//
//----------------------------------------------------------------------------
DWORD CMemoryModel16::AllocMemory(DWORD cb) { VPVOID vpv; HMEM16 hmem16;
thkAssert(cb > 0);
vpv = WgtAllocLock(GMEM_MOVEABLE, cb, &hmem16); if (vpv == 0) { //
// Not able to allocate a 16-bit memory block!
//
thkDebugOut((DEB_ERROR, "CMemoryModel16::AllocMemory, " "Allocation failed, size %08lX\n", cb)); return 0; }
if (_fPublic) { SetOwnerPublicHMEM16(hmem16); }
return vpv; }
//+---------------------------------------------------------------------------
//
// Method: CMemoryModel16::FreeMemory
//
// Synopsis: Deallocates a block of memory previously allocated
//
// Arguments: [dwMem] - Address of memory block to free
//
// History: 7-05-94 BobDay (Bob Day) Created
//
//----------------------------------------------------------------------------
void CMemoryModel16::FreeMemory(DWORD dwMem) { thkAssert(dwMem != 0); WgtUnlockFree(dwMem); }
//+---------------------------------------------------------------------------
//
// Method: CMemoryModel16::ResolvePtr
//
// Synopsis: Returns a resolved pointer given an abstract pointer
//
// Arguments: [dwMem] - Address to get pointer from
// [cb] - Length, starting at given address, to make valid
// pointers for.
//
// Returns: LPVOID - A real pointer equivalent to the abstract pointer.
//
// History: 7-05-94 BobDay (Bob Day) Created
//
// Notes: Be careful of alignment issues
//
//----------------------------------------------------------------------------
LPVOID CMemoryModel16::ResolvePtr(DWORD dwMem, DWORD cb) { LPVOID pv;
thkAssert(dwMem != 0 && cb > 0);
pv = (LPVOID)WOWFIXVDMPTR(dwMem, cb); if (pv == NULL) { thkDebugOut((DEB_ERROR, "CMemoryModel16::ResolvePtr, " "WOWGetVDMPointer failed on %08lX, size %08lX\n", dwMem, cb)); }
return pv; }
//+---------------------------------------------------------------------------
//
// Member: CMemoryModel16::ReleasePtr, public
//
// Synopsis: Releases a resolved pointer
//
// Arguments: [dwMem] - Abstract pointer to release
//
// History: 10-Oct-94 DrewB Created
//
//----------------------------------------------------------------------------
void CMemoryModel16::ReleasePtr(DWORD dwMem) { thkAssert(dwMem != 0);
WOWRELVDMPTR(dwMem); }
//+---------------------------------------------------------------------------
//
// Method: CMemoryModel32::AllocMemory
//
// Synopsis: Allocates memory
//
// Arguments: [cb] - Size of block to allocate
//
// Returns: New address of block or NULL
//
// History: 7-05-94 BobDay (Bob Day) Created
//
//----------------------------------------------------------------------------
DWORD CMemoryModel32::AllocMemory(DWORD cb) { DWORD dwMem;
thkAssert(cb > 0); dwMem = (DWORD)CoTaskMemAlloc(cb); if (dwMem == 0) { //
// Not able to allocate a 32-bit memory block!
//
thkDebugOut((DEB_ERROR, "CMemoryModel32::AllocBlock, " "CoTaskMemAlloc failed size %08lX\n", cb)); return 0; } return dwMem; }
//+---------------------------------------------------------------------------
//
// Method: CMemoryModel32::FreeMemory
//
// Synopsis: Deallocates a block of memory previously allocated
//
// Arguments: [dwMem] - Address of memory block to free
//
// History: 7-05-94 BobDay (Bob Day) Created
//
//----------------------------------------------------------------------------
void CMemoryModel32::FreeMemory(DWORD dwMem) { thkAssert(dwMem != 0); CoTaskMemFree((LPVOID)dwMem); }
//+---------------------------------------------------------------------------
//
// Method: CMemoryModel32::ResolvePtr
//
// Synopsis: Returns a resolved pointer given an abstract pointer
//
// Arguments: [dwMem] - Address to get pointer from
// [cb] - Length, starting at given address, to make valid
// pointers for.
//
// Returns: LPVOID - A real pointer equivalent to the abstract pointer.
//
// History: 7-05-94 BobDay (Bob Day) Created
//
// Notes: Be careful of alignment issues
//
//----------------------------------------------------------------------------
LPVOID CMemoryModel32::ResolvePtr(DWORD dwMem, DWORD cb) { thkAssert(dwMem != 0 && cb > 0); return (LPVOID)dwMem; }
//+---------------------------------------------------------------------------
//
// Member: CMemoryModel32::ReleasePtr, public
//
// Synopsis: Releases a resolved pointer
//
// Arguments: [dwMem] - Abstract pointer to release
//
// History: 10-Oct-94 DrewB Created
//
//----------------------------------------------------------------------------
void CMemoryModel32::ReleasePtr(DWORD dwMem) { thkAssert(dwMem != 0); }
|