Syntax

DosCreateCSAlias (DataSelector, CodeSelector)

Parameters

;DataSelector (SEL) - input : Data segment selector. ;CodeSelector (PSEL) - output : Address where the selector of the code segment alias descriptor is returned.

Return Code

rc (USHORT) - return Return code descriptions are: * 0 NO_ERROR * 5 ERROR_ACCESS_DENIED

Remarks

A selector returned by a call to DosAllocSeg with no sharing options specified can be used as the data segment specified with DosCreateCSAlias. However, to be CS alias, the segment must be a privilege level 2 or privilege level 3 non-shared segment.

A CS alias segment must be exclusively accessible by the process and cannot be a huge segment. Selectors of shared memory segments and dynamically linked global data segments cannot be used as input for DosCreateCSAlias.

The code segment selector returned by DosCreateCSAlias is valid for CS. If a procedure is stored in the data segment, it can be called using the CS alias. The procedure may be called from privilege level 3 or I/O privilege level.

Use DosFreeSeg to free a CS alias selector created with DosCreateCSAlias. Procedures in the segment can continue to be referenced if the data selector for the aliased segment is passed to DosFreeSeg, because the CS alias selector is not affected. Once both selectors have been passed to DosFreeSeg, the segment is deallocated.

Family API Considerations

The returned selector is the segment address of the allocated memory. When the returned selector or the original selector is freed, OS/2 immediately deallocates the block of memory.

Example Code

C Binding

<PRE> #define INCL_DOSMEMMGR

USHORT rc = DosCreateCSAlias(DataSelector, CodeSelector);

SEL DataSelector; /* Data segment selector */ PSEL CodeSelector; /* Code segment selector (returned) */

USHORT rc; /* return code */ </PRE> 'Example'

This example requests a block of memory (data segment) then requests a descriptor of the segment marking it as a code segment. <PRE> #define INCL_DOSMEMMGR

#define NUMBER_OF_BYTES 120 #define ALLOC_FLAG SEG_GETTABLE

SEL CodeSel; SEL Selector; USHORT rc;

if(!DosAllocSeg(NUMBER_OF_BYTES, /* # of bytes requested */
&Selector, /* Selector allocated */
ALLOC_FLAG)) /* Allocation flags */
rc = DosCreateCSAlias(Selector, /* Data segment selector */
&CodeSel); /* Code segment selector */

</PRE>

MASM Binding

<PRE> EXTRN DosCreateCSAlias:FAR INCL_DOSMEMMGR EQU 1

PUSH WORD DataSelector ;Data segment selector PUSH@ WORD CodeSelector ;Code segment selector (returned) CALL DosCreateCSAlias

Returns WORD </PRE>

Note

Text based on http://www.edm2.com/index.php/DosCreateCSAlias

Family API
DOS	Process Manager	DosBeep DosExit DosSleep DosExecPgm
File Manager	DosChDir DosChgFilePtr DosClose DosDelete DosDupHandle DosMkDir DosMove DosQCurDir DosQCurDisk DosSetFileMode DosOpen DosQFileInfo DosRead DosQFileMode DosQFSInfo DosQVerify DosRmDir DosSelectDisk DosFindClose DosFindFirst DosFindNext DosSetFileInfo DosSetVerify DosWrite DosFileLocks DosSetFHandState DosNewSize DosBufReset DosQFHandState DosSetFSinfo DosShutdown
Memory Manager	DosFreeSeg DosSubAlloc DosSubFree DosSubSet DosAllocHuge DosAllocSeg DosReallocHuge DosReallocSeg DosGetHugeShift DosCreateCSAlias
NLS	DosCaseMap DosGetCtryInfo DosGetDBCSEv DosSetCtryCode DosGetCollate DosGetMessage DosInsMessage DosPutMessage
Date and Time	DosSetDateTime DosGetDateTime
Devices	DosDevConfig DosDevIOCtl DosDevIOCtl2
Signals	DosHoldSignal DosSetSigHandler
Misc	BadDynLink DosGetEnv DosGetMachineMode DosGetVersion DosError DosErrClass DosSetVec
KBD	KbdCharIn KbdFlushBuffer KbdGetStatus KbdSetStatus KbdStringIn KbdPeek
VIO	VioGetBuf VioGetConfig VioGetCurPos VioGetCurType VioGetPhysBuf VioReadCellStr VioReadCharStr VioScrollUp VioScrollDn VioScrollLf VioScrollRt VioScrUnLock VioSetCurPos VioSetCurType VioSetMode VioGetMode VioShowBuf VioWrtCellStr VioWrtCharStr VioWrtCharStrAtt VioWrtNAttr VioWrtNCell VioWrtNChar VioWrtTTY VioScrLock VioPopUp
Tools	BIND
Modules	DOSCALLS.DLL VIOCALLS.DLL KBDCALLS.DLL MSG.DLL
Libraries	API.LIB OS2386.LIB FAPI.LIB DOSCALLS.LIB SUBCALLS.LIB