195 lines
3.8 KiB
C
195 lines
3.8 KiB
C
|
/*++
|
|||
|
|
|||
|
Copyright (c) 1992-1997 Microsoft Corporation
|
|||
|
|
|||
|
Module Name:
|
|||
|
|
|||
|
mem.c
|
|||
|
|
|||
|
Abstract:
|
|||
|
|
|||
|
Contains memory allocation routines for SNMP master agent.
|
|||
|
|
|||
|
Environment:
|
|||
|
|
|||
|
User Mode - Win32
|
|||
|
|
|||
|
Revision History:
|
|||
|
|
|||
|
10-Feb-1997 DonRyan
|
|||
|
Rewrote to implement SNMPv2 support.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
///////////////////////////////////////////////////////////////////////////////
|
|||
|
// //
|
|||
|
// Include files //
|
|||
|
// //
|
|||
|
///////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
#include "globals.h"
|
|||
|
#include "mem.h"
|
|||
|
|
|||
|
|
|||
|
///////////////////////////////////////////////////////////////////////////////
|
|||
|
// //
|
|||
|
// Private definitions //
|
|||
|
// //
|
|||
|
///////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
#define AGENT_HEAP_FLAGS 0
|
|||
|
#define AGENT_HEAP_INITIAL_SIZE 0xffff
|
|||
|
#define AGENT_HEAP_MAXIMUM_SIZE 0
|
|||
|
|
|||
|
|
|||
|
///////////////////////////////////////////////////////////////////////////////
|
|||
|
// //
|
|||
|
// Global variables //
|
|||
|
// //
|
|||
|
///////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
HANDLE g_hAgentHeap = NULL;
|
|||
|
|
|||
|
|
|||
|
///////////////////////////////////////////////////////////////////////////////
|
|||
|
// //
|
|||
|
// Public procudures //
|
|||
|
// //
|
|||
|
///////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
BOOL
|
|||
|
AgentHeapCreate(
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Creates private heap for master agent private structures.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
Return Values:
|
|||
|
|
|||
|
Returns true if successful.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
// create master agent heap
|
|||
|
g_hAgentHeap = HeapCreate(
|
|||
|
AGENT_HEAP_FLAGS,
|
|||
|
AGENT_HEAP_INITIAL_SIZE,
|
|||
|
AGENT_HEAP_MAXIMUM_SIZE
|
|||
|
);
|
|||
|
|
|||
|
// validate heap handle
|
|||
|
if (g_hAgentHeap == NULL) {
|
|||
|
|
|||
|
SNMPDBG((
|
|||
|
SNMP_LOG_ERROR,
|
|||
|
"SNMP: SVC: error %d creating agent heap.\n",
|
|||
|
GetLastError()
|
|||
|
));
|
|||
|
}
|
|||
|
|
|||
|
// return success if created
|
|||
|
return (g_hAgentHeap != NULL);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
BOOL
|
|||
|
AgentHeapDestroy(
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Destroys private heap for master agent private structures.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
Return Values:
|
|||
|
|
|||
|
Returns true if successful.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
// validate handle
|
|||
|
if (g_hAgentHeap != NULL) {
|
|||
|
|
|||
|
// release heap handle
|
|||
|
HeapDestroy(g_hAgentHeap);
|
|||
|
|
|||
|
// re-initialize
|
|||
|
g_hAgentHeap = NULL;
|
|||
|
}
|
|||
|
|
|||
|
return TRUE;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
LPVOID
|
|||
|
AgentMemAlloc(
|
|||
|
UINT nBytes
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Allocates memory from master agent's private heap.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
Return Values:
|
|||
|
|
|||
|
Returns true if successful.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
// allocate memory from private heap (and initialize)
|
|||
|
return HeapAlloc(g_hAgentHeap, HEAP_ZERO_MEMORY, nBytes);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
VOID
|
|||
|
AgentMemFree(
|
|||
|
LPVOID pMem
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Frees memory from master agent's private heap.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
pMem - pointer to memory block to release.
|
|||
|
|
|||
|
Return Values:
|
|||
|
|
|||
|
Returns true if successful.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
// validate pointer
|
|||
|
if (pMem != NULL) {
|
|||
|
|
|||
|
// release agent memory
|
|||
|
HeapFree(g_hAgentHeap, 0, pMem);
|
|||
|
}
|
|||
|
}
|
|||
|
|