2020-09-30 17:12:29 +02:00

116 lines
2.5 KiB
C

// VMBuffer.h -- Copied from the PDC sample application
// by Ron Murray
// 15 December 1992
#ifndef __VMBUFFER_H__
#define __VMBUFFER_H__
// Macro definitions
//
//
// Useful rounding macros when the rounding amount is always a
// power of two.
//
#define ROUND_DOWN( Size, Amount ) ((DWORD)(Size) & ~((Amount) - 1))
#define ROUND_UP( Size, Amount ) (((DWORD)(Size) + ((Amount) - 1)) & ~((Amount) - 1))
//
// Pseudo keywords for documentation purposes.
//
#define IN
#define OUT
#define OPTIONAL
// CB_BUFFER_INCREMENT is the default increment by which a virtual buffer will be
// grown when we get an access violation.
#define CB_BUFFER_INCREMENT 0x00010000
//
// Determine if an argument is present by testing a value of NULL
//
#define ARGUMENT_PRESENT( ArgumentPointer ) (\
(LPSTR)(ArgumentPointer) != (LPSTR)(NULL) )
//
// Calculate the address of the base of the structure given its type, and an
// address of a field within the structure.
//
#define CONTAINING_RECORD( address, type, field ) ((type *)( \
(PCHAR)(address) - \
(PCHAR)(&((type *)0)->field)))
//
// Virtual Buffer data structure and function prototypes.
//
typedef struct _MY_VIRTUAL_BUFFER
{
LPVOID Base;
ULONG PageSize;
LPVOID CommitLimit;
LPVOID ReserveLimit;
BOOL fForceExceptions;
} MY_VIRTUAL_BUFFER, *PMY_VIRTUAL_BUFFER;
#ifdef _DEBUG
#define CreateVirtualBuffer(Buffer, Commit, Reserve) _CreateVirtualBuffer(Buffer, Commit, Reserve, TRUE, __FILE__, __LINE__)
BOOL
_CreateVirtualBuffer(
OUT PMY_VIRTUAL_BUFFER Buffer,
IN DWORD CommitSize,
IN DWORD ReserveSize = 0,
BOOL fForceExceptions = TRUE,
PSZ pszWhichFile = NULL,
UINT iWhichLine = 0
);
#else // _DEBUG
BOOL
CreateVirtualBuffer(
OUT PMY_VIRTUAL_BUFFER Buffer,
IN DWORD CommitSize,
IN DWORD ReserveSize = 0,
BOOL fForceExceptions = TRUE
);
#endif // _DEBUG
BOOL
ExtendVirtualBuffer(
IN PMY_VIRTUAL_BUFFER Buffer,
IN LPVOID Address
);
BOOL
TrimVirtualBuffer(
IN PMY_VIRTUAL_BUFFER Buffer
);
BOOL
FreeVirtualBuffer(
IN PMY_VIRTUAL_BUFFER Buffer
);
int
VirtualBufferExceptionFilter(
IN DWORD ExceptionCode,
IN PEXCEPTION_POINTERS ExceptionInfo,
IN OUT PMY_VIRTUAL_BUFFER Buffer,
IN UINT cbIncrement = CB_BUFFER_INCREMENT
);
#endif // __VMBUFFER_H__