windows-nt/Source/XPSP1/NT/ds/security/gina/profmap/dll/poolmem.h
2020-09-26 16:20:57 +08:00

166 lines
3 KiB
C

/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
poolmem.h
Abstract:
Declares the pool memory interface. A pool of memory is a set of
blocks (typically 8K each) that are used for several allocations,
and then freed at the end of processing. See below for routines.
Author:
Marc R. Whitten (marcw) 02-Feb-1997
Revision History:
jimschm 04-Feb-1998 Named pools for tracking
--*/
#pragma once
typedef PVOID POOLHANDLE;
/*++
Create and destroy routines:
POOLHANDLE
PoolMemInitPool (
VOID
);
POOLHANDLE
PoolMemInitNamedPool (
IN PCSTR Name
);
VOID
PoolMemDestroyPool (
IN POOLHANDLE Handle
);
Primitive routines:
PVOID
PoolMemGetMemory (
IN POOLHANDLE Handle,
IN DWORD Size
);
PVOID
PoolMemGetAlignedMemory (
IN POOLHANDLE Handle,
IN DWORD Size
);
VOID
PoolMemReleaseMemory (
IN POOLHANDLE Handle,
IN PVOID Memory
);
Performance and debugging control:
VOID
PoolMemSetMinimumGrowthSize (
IN POOLHANDLE Handle,
IN DWORD GrowthSize
);
VOID
PoolMemEmptyPool (
IN POOLHANDLE Handle
);
VOID
PoolMemDisableTracking (
IN POOLHANDLE Handle
);
Allocation and duplication of data types:
PCTSTR
PoolMemCreateString (
IN POOLHANDLE Handle,
IN UINT TcharCount
);
PCTSTR
PoolMemCreateDword (
IN POOLHANDLE Handle
);
PBYTE
PoolMemDuplicateMemory (
IN POOLHANDLE Handle,
IN PBYTE Data,
IN UINT DataSize
);
PDWORD
PoolMemDuplciateDword (
IN POOLHANDLE Handle,
IN DWORD Data
);
PTSTR
PoolMemDuplicateString (
IN POOLHANDLE Handle,
IN PCTSTR String
);
PTSTR
PoolMemDuplicateMultiSz (
IN POOLHANDLE Handle,
IN PCTSTR MultiSz
);
--*/
#define ByteCountW(x) (lstrlen(x)*sizeof(WCHAR))
//
// Default size of memory pool blocks. This can be changed on a per-pool basis
// by calling PoolMemSetMinimumGrowthSize().
//
#define POOLMEMORYBLOCKSIZE 8192
POOLHANDLE
PoolMemInitPool (
VOID
);
#define PoolMemInitNamedPool(x) PoolMemInitPool()
VOID
PoolMemDestroyPool (
IN POOLHANDLE Handle
);
//
// Callers should use PoolMemGetMemory or PoolMemGetAlignedMemory. These each decay into
// PoolMemRealGetMemory.
//
#define PoolMemGetMemory(h,s) PoolMemRealGetMemory(h,s,0)
#define PoolMemGetAlignedMemory(h,s) PoolMemRealGetMemory(h,s,sizeof(DWORD))
PVOID PoolMemRealGetMemory(IN POOLHANDLE Handle, IN DWORD Size, IN DWORD AlignSize);
VOID PoolMemReleaseMemory (IN POOLHANDLE Handle, IN PVOID Memory);
VOID PoolMemSetMinimumGrowthSize(IN POOLHANDLE Handle, IN DWORD Size);