117 lines
2.1 KiB
C
117 lines
2.1 KiB
C
|
#ifndef POOLMEM_H
|
||
|
#define POOLMEM_H
|
||
|
|
||
|
#define STRICT
|
||
|
#define LEAN_AND_MEAN
|
||
|
#include <windows.h>
|
||
|
#include <assert.h>
|
||
|
#include <stdio.h>
|
||
|
#include <mbstring.h>
|
||
|
|
||
|
|
||
|
typedef LPVOID POOLHANDLE;
|
||
|
|
||
|
|
||
|
#define POOLMEMORYBLOCKSIZE 8192
|
||
|
|
||
|
|
||
|
|
||
|
POOLHANDLE WINAPI PoolMemInitPool ();
|
||
|
VOID WINAPI PoolMemDestroyPool (IN POOLHANDLE Handle);
|
||
|
LPVOID WINAPI PoolMemGetAlignedMemory(IN POOLHANDLE Handle, IN DWORD Size, IN DWORD AlignSize);
|
||
|
|
||
|
|
||
|
#define PoolMemCreateString(h,x) ((LPTSTR) PoolMemGetAlignedMemory((h),(x)*sizeof(TCHAR)))
|
||
|
#define PoolMemCreateDword(h) ((PDWORD) PoolMemGetMemory((h),sizeof(DWORD)))
|
||
|
|
||
|
|
||
|
__inline
|
||
|
LPVOID
|
||
|
PoolMemGetMemory (
|
||
|
IN POOLHANDLE Handle,
|
||
|
IN DWORD Size
|
||
|
)
|
||
|
{
|
||
|
|
||
|
return PoolMemGetAlignedMemory(Handle,Size,0);
|
||
|
|
||
|
}
|
||
|
|
||
|
__inline
|
||
|
LPTSTR
|
||
|
PoolMemCreateStringA (
|
||
|
IN POOLHANDLE Handle,
|
||
|
IN DWORD Size
|
||
|
)
|
||
|
{
|
||
|
return (LPSTR) PoolMemGetAlignedMemory(Handle,Size * sizeof(CHAR),sizeof(CHAR));
|
||
|
}
|
||
|
|
||
|
__inline
|
||
|
LPWSTR
|
||
|
PoolMemCreateStringW (
|
||
|
IN POOLHANDLE Handle,
|
||
|
IN DWORD Size
|
||
|
)
|
||
|
{
|
||
|
return (LPWSTR) PoolMemGetAlignedMemory(Handle,Size * sizeof(WCHAR),sizeof(WCHAR));
|
||
|
}
|
||
|
|
||
|
|
||
|
__inline
|
||
|
PTSTR
|
||
|
PoolMemDuplicateStringA (
|
||
|
IN POOLHANDLE Handle,
|
||
|
IN LPCSTR StringToCopy
|
||
|
)
|
||
|
|
||
|
{
|
||
|
|
||
|
|
||
|
DWORD stringLength;
|
||
|
PSTR rString;
|
||
|
|
||
|
assert(StringToCopy);
|
||
|
|
||
|
stringLength = (DWORD) _mbschr(StringToCopy,0) - (DWORD) StringToCopy + 1;
|
||
|
rString = PoolMemGetAlignedMemory(Handle,stringLength,sizeof(CHAR));
|
||
|
|
||
|
if (rString) {
|
||
|
|
||
|
_mbscpy(rString,StringToCopy);
|
||
|
}
|
||
|
|
||
|
return rString;
|
||
|
}
|
||
|
|
||
|
|
||
|
__inline
|
||
|
PWSTR
|
||
|
PoolMemDuplicateStringW (
|
||
|
IN POOLHANDLE Handle,
|
||
|
IN LPCWSTR StringToCopy
|
||
|
)
|
||
|
|
||
|
{
|
||
|
|
||
|
|
||
|
DWORD stringLength;
|
||
|
PWSTR rString;
|
||
|
|
||
|
assert(StringToCopy);
|
||
|
|
||
|
stringLength = ((wcslen(StringToCopy)+1)*sizeof(WCHAR));
|
||
|
rString = PoolMemGetAlignedMemory(Handle,stringLength,sizeof(WCHAR));
|
||
|
|
||
|
if (rString) {
|
||
|
|
||
|
wcscpy(rString,StringToCopy);
|
||
|
}
|
||
|
|
||
|
return rString;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
#endif
|