/*++ Copyright (c) 1998 Microsoft Corporation Module Name: regcell.c Abstract: This module contains cell manipulation functions. Author: Dragos C. Sambotin (dragoss) 30-Dec-1998 Revision History: --*/ #include "chkreg.h" extern PUCHAR Base; extern ULONG HiveLength; BOOLEAN IsCellAllocated( HCELL_INDEX Cell ) /* Routine Description: Checks if the cell is allocated (i.e. the size is negative). Arguments: Cell - supplies the cell index of the cell of interest. Return Value: TRUE if Cell is allocated. FALSE otherwise. */ { PHCELL pcell; if( Cell >= HiveLength ) return FALSE; pcell = (PHCELL)(Base + Cell); return (pcell->Size < 0) ? TRUE : FALSE; } LONG GetCellSize( HCELL_INDEX Cell ) /* Routine Description: Retrieves the size of the specified cell. Arguments: Cell - supplies the cell index of the cell of interest. Return Value: The size of the cell. */ { LONG size; PHCELL pcell; pcell = (PHCELL)(Base + Cell); size = pcell->Size * -1; return size; } VOID FreeCell( HCELL_INDEX Cell ) /* Routine Description: Frees a cell. Arguments: Cell - supplies the cell index of the cell of interest. Return Value: NONE. */ { PHCELL pcell; pcell = (PHCELL)(Base + Cell); pcell->Size *= -1; ASSERT(pcell->Size >= 0 ); } BOOLEAN AllocateCell( HCELL_INDEX Cell ) /* Routine Description: Allocates a cell, by ensuring a negative size on it Arguments: Cell - supplies the cell index of the cell of interest. Return Value: NONE. */ { PHCELL pcell; if( Cell >= HiveLength ) return FALSE; pcell = (PHCELL)(Base + Cell); pcell->Size *= -1; if( pcell->Size >= 0 ) return FALSE; return TRUE; } PCELL_DATA GetCell( HCELL_INDEX Cell ) /* Routine Description: Retrieves the memory address of the cell specified by Cell. Arguments: Cell - supplies the cell index of the cell of interest. Return Value: The memory address of Cell. */ { PHCELL pcell; pcell = (PHCELL)(Base + Cell); return (struct _CELL_DATA *)&(pcell->u.NewCell.u.UserData); }