windows-nt/Source/XPSP1/NT/net/tcpip/driver/inc/fsbpool.h

100 lines
2.5 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1999-2000 Microsoft Corporation
Module Name:
fsbpool.h
Abstract:
This file contains definitions and function prototypes for manipulating
fixed-size block pools.
Author:
Shaun Cox (shaunco) 10-Dec-1999
--*/
#pragma once
typedef
VOID
(__stdcall *PFSB_BUILDBLOCK_FUNCTION) (
IN PUCHAR Block,
IN SIZE_T NumberOfBytes
);
// Creates a pool of fixed-size blocks built over non-paged pool. Each
// block is BlockSize bytes long. If NULL is not returned,
// FsbDestroyPool should be called at a later time to reclaim the
// resources used by the pool.
//
// Arguments:
// BlockSize - The size, in bytes, of each block.
// FreeBlockLinkOffset - The offset, in bytes, from the beginning of a block
// that represenets a pointer-sized storage location that the pool can
// use to chain free blocks together. Most often this will be zero
// (meaning use the first pointer-size bytes of the block.)
// Tag - The pool tag to be used internally for calls to
// ExAllocatePoolWithTag. This allows callers to track
// memory consumption for different pools.
// BuildFunction - An optional pointer to a function which initializes
// blocks when they are first allocated by the pool. This allows the
// caller to perform custom, on-demand initialization of each block.
//
// Returns the handle used to identify the pool.
//
// Caller IRQL: [PASSIVE_LEVEL, DISPATCH_LEVEL]
//
HANDLE
FsbCreatePool(
IN USHORT BlockSize,
IN USHORT FreeBlockLinkOffset,
IN ULONG Tag,
IN PFSB_BUILDBLOCK_FUNCTION BuildFunction OPTIONAL
);
// Destroys a pool of fixed-size blocks previously created by a call to
// FsbCreatePool.
//
// Arguments:
// PoolHandle - Handle which identifies the pool being destroyed.
//
// Caller IRQL: [PASSIVE_LEVEL, DISPATCH_LEVEL]
//
VOID
FsbDestroyPool(
IN HANDLE PoolHandle
);
// Returns a pointer to a block allocated from a pool. NULL is returned if
// the request could not be granted. The returned pointer is guaranteed to
// have 8 byte alignment.
//
// Arguments:
// PoolHandle - Handle which identifies the pool being allocated from.
//
// Caller IRQL: [PASSIVE_LEVEL, DISPATCH_LEVEL]
//
PUCHAR
FsbAllocate(
IN HANDLE PoolHandle
);
// Free a block back to the pool from which it was allocated.
//
// Arguments:
// Block - A block returned from a prior call to FsbAllocate.
//
// Caller IRQL: [PASSIVE_LEVEL, DISPATCH_LEVEL]
//
VOID
FsbFree(
IN PUCHAR Block
);