FSH_SEGALLOC - Allocate a GDT or LDT segment
Purpose
This function allocates a GDT or LDT selector. The selector will have
read/write access. An FSD may call this function.
Calling Sequence
int far pascal FSH_SEGALLOC(flags, cbSeg, pSel)
unsigned short flags;
unsigned long cbSeg;
unsigned short far * pSel;
Where
flags indicate GDT/LDT, protection ring, swappable/non-swappable.
Bit 0x0001 off indicates GDT selector returned.
Bit 0x0001 on indicates LDT selector returned.
Bit 0x0002 off indicates non-swappable memory.
Bit 0x0002 on indicates swappable memory.
Bits 13 and 14 are the desired ring number.
All other bits are reserved and must be zero.
cbSeg is the length of the segment.
pSel is the far address of the location where the allocated selector will
be stored.
Returns
If no error is detected, a zero error code is returned. If an error is
detected, one of the following error codes is returned:
oERROR_INTERRUPT
the current thread received a signal.
oERROR_INVALID_PARAMETER
the reserved bits in flags are set or requested size is too large.
oERROR_NOT_ENOUGH_MEMORY
too much memory is allocated.
Remarks
It is strongly suggested that FSDs allocate all their data at protection
level 0 for maximum protection from user programs.
GDT selectors are a scarce resource; the FSD must be prepared to expect an
error for allocation of a GDT segment. The FSD should limit itself to a
maximum of 10 GDT segments. It is suggested that a large segment be
allocated for each type of data and divided into per-process records.
FSH_SEGALLOC may block.
Take care to avoid deadlocks between swappable segments and swapper
requests .
Note: OS/2 does not validate input parameters. An FSD, therefore, should
call FSH_PROBEBUF where appropriate.
Created using Inf-PHP v.2 (c) 2003 Yuri Prokushev
Created using Inf-HTML v.0.9b (c) 1995 Peter Childs