116 lines
2.5 KiB
C
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__
|