Files
mirror-processhacker/2.x/trunk/phlib/include/filepoolp.h
T
wj32 6c140d5ec3 added documentation to filepool.c
git-svn-id: svn://svn.code.sf.net/p/processhacker/code@4134 21ef857c-d57f-4fe0-8362-d861dc6d29cd
2011-03-12 07:13:36 +00:00

205 lines
4.3 KiB
C

#ifndef _PH_FILEPOOLP_H
#define _PH_FILEPOOLP_H
typedef struct _PH_FILE_POOL_VIEW
{
LIST_ENTRY ByIndexListEntry;
PH_AVL_LINKS ByBaseLinks;
LIST_ENTRY InactiveViewsListEntry;
ULONG RefCount;
ULONG SegmentIndex;
PVOID Base;
} PH_FILE_POOL_VIEW, *PPH_FILE_POOL_VIEW;
NTSTATUS PhpValidateFilePoolParameters(
__inout PPH_FILE_POOL_PARAMETERS Parameters
);
VOID PhpSetDefaultFilePoolParameters(
__out PPH_FILE_POOL_PARAMETERS Parameters
);
// Range mapping
NTSTATUS PhFppExtendRange(
__inout PPH_FILE_POOL Pool,
__in ULONG NewSize
);
NTSTATUS PhFppMapRange(
__inout PPH_FILE_POOL Pool,
__in ULONG Offset,
__in ULONG Size,
__out PVOID *Base
);
NTSTATUS PhFppUnmapRange(
__inout PPH_FILE_POOL Pool,
__in PVOID Base
);
// Segments
VOID PhFppInitializeSegment(
__inout PPH_FILE_POOL Pool,
__out PPH_FP_BLOCK_HEADER BlockOfSegmentHeader,
__in ULONG AdditionalBlocksUsed
);
PPH_FP_BLOCK_HEADER PhFppAllocateSegment(
__inout PPH_FILE_POOL Pool,
__out PULONG NewSegmentIndex
);
PPH_FP_SEGMENT_HEADER PhFppGetHeaderSegment(
__inout PPH_FILE_POOL Pool,
__in PPH_FP_BLOCK_HEADER FirstBlock
);
// Views
VOID PhFppAddViewByIndex(
__inout PPH_FILE_POOL Pool,
__inout PPH_FILE_POOL_VIEW View
);
VOID PhFppRemoveViewByIndex(
__inout PPH_FILE_POOL Pool,
__inout PPH_FILE_POOL_VIEW View
);
PPH_FILE_POOL_VIEW PhFppFindViewByIndex(
__inout PPH_FILE_POOL Pool,
__in ULONG SegmentIndex
);
LONG NTAPI PhpFilePoolViewByBaseCompareFunction(
__in PPH_AVL_LINKS Links1,
__in PPH_AVL_LINKS Links2
);
VOID PhFppAddViewByBase(
__inout PPH_FILE_POOL Pool,
__inout PPH_FILE_POOL_VIEW View
);
VOID PhFppRemoveViewByBase(
__inout PPH_FILE_POOL Pool,
__inout PPH_FILE_POOL_VIEW View
);
PPH_FILE_POOL_VIEW PhFppFindViewByBase(
__inout PPH_FILE_POOL Pool,
__in PVOID Base
);
PPH_FILE_POOL_VIEW PhFppCreateView(
__inout PPH_FILE_POOL Pool,
__in ULONG SegmentIndex
);
VOID PhFppDestroyView(
__inout PPH_FILE_POOL Pool,
__inout PPH_FILE_POOL_VIEW View
);
VOID PhFppActivateView(
__inout PPH_FILE_POOL Pool,
__inout PPH_FILE_POOL_VIEW View
);
VOID PhFppDeactivateView(
__inout PPH_FILE_POOL Pool,
__inout PPH_FILE_POOL_VIEW View
);
VOID PhFppReferenceView(
__inout PPH_FILE_POOL Pool,
__inout PPH_FILE_POOL_VIEW View
);
VOID PhFppDereferenceView(
__inout PPH_FILE_POOL Pool,
__inout PPH_FILE_POOL_VIEW View
);
PPH_FP_BLOCK_HEADER PhFppReferenceSegment(
__inout PPH_FILE_POOL Pool,
__in ULONG SegmentIndex
);
VOID PhFppDereferenceSegment(
__inout PPH_FILE_POOL Pool,
__in ULONG SegmentIndex
);
VOID PhFppReferenceSegmentByBase(
__inout PPH_FILE_POOL Pool,
__in PVOID Base
);
VOID PhFppDereferenceSegmentByBase(
__inout PPH_FILE_POOL Pool,
__in PVOID Base
);
// Bitmap allocation
PPH_FP_BLOCK_HEADER PhFppAllocateBlocks(
__inout PPH_FILE_POOL Pool,
__in PPH_FP_BLOCK_HEADER FirstBlock,
__inout PPH_FP_SEGMENT_HEADER SegmentHeader,
__in ULONG NumberOfBlocks
);
VOID PhFppFreeBlocks(
__inout PPH_FILE_POOL Pool,
__in PPH_FP_BLOCK_HEADER FirstBlock,
__inout PPH_FP_SEGMENT_HEADER SegmentHeader,
__in PPH_FP_BLOCK_HEADER BlockHeader
);
// Free list
ULONG PhFppComputeFreeListIndex(
__in PPH_FILE_POOL Pool,
__in ULONG NumberOfBlocks
);
BOOLEAN PhFppInsertFreeList(
__inout PPH_FILE_POOL Pool,
__in ULONG FreeListIndex,
__in ULONG SegmentIndex,
__in PPH_FP_SEGMENT_HEADER SegmentHeader
);
BOOLEAN PhFppRemoveFreeList(
__inout PPH_FILE_POOL Pool,
__in ULONG FreeListIndex,
__in ULONG SegmentIndex,
__in PPH_FP_SEGMENT_HEADER SegmentHeader
);
// Misc.
PPH_FP_BLOCK_HEADER PhFppGetHeaderBlock(
__in PPH_FILE_POOL Pool,
__in PVOID Block
);
ULONG PhFppEncodeRva(
__in PPH_FILE_POOL Pool,
__in ULONG SegmentIndex,
__in PPH_FP_BLOCK_HEADER FirstBlock,
__in PVOID Address
);
ULONG PhFppDecodeRva(
__in PPH_FILE_POOL Pool,
__in ULONG Rva,
__out PULONG SegmentIndex
);
#endif