You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
170 lines
2.3 KiB
170 lines
2.3 KiB
/*++
|
|
|
|
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);
|
|
}
|
|
|