Source code of Windows XP (NT5)
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.
|
|
PAGE,132 ;*************************************************************************** ;* ;* DLLENTRY.ASM ;* ;* VER.DLL Entry code ;* ;* This module generates a code segment called INIT_TEXT. ;* It initializes the local heap if one exists and then calls ;* the C routine LibMain() which should have the form: ;* BOOL FAR PASCAL LibMain(HANDLE hInstance, ;* WORD wDataSeg, ;* WORD cbHeap, ;* LPSTR lpszCmdLine); ;* ;* The result of the call to LibMain is returned to Windows. ;* The C routine should return TRUE if it completes initialization ;* successfully, FALSE if some error occurs. ;* ;**************************************************************************
INCLUDE CMACROS.INC
externFP <LIBMAIN> ;The C routine to be called
ifndef SEGNAME SEGNAME equ <_TEXT> ; default seg name endif
createSeg %SEGNAME, CodeSeg, word, public, CODE
sBegin CodeSeg ; this defines what seg this goes in assumes cs,CodeSeg
?PLM=0 ;'C'naming externA <_acrtused> ;Ensures that Win DLL startup code is linked
?PLM=1 ;'PASCAL' naming externFP <LOCALINIT> ;Windows heap init routine
cProc LibEntry, <PUBLIC,FAR> ;Entry point into DLL
cBegin push di ;Handle of the module instance push ds ;Library data segment push cx ;Heap size push es ;Command line segment push si ;Command line offset
;** If we have some heap then initialize it jcxz callc ;Jump if no heap specified
;** Call the Windows function LocalInit() to set up the heap ;** LocalInit((LPSTR)start, WORD cbHeap); xor ax,ax cCall LOCALINIT <ds, ax, cx> or ax,ax ;Did it do it ok ? jz error ;Quit if it failed
;** Invoke the C routine to do any special initialization
callc: call LIBMAIN ;Invoke the 'C' routine (result in AX) jmp short exit ;LibMain is responsible for stack clean up
error: pop si ;Clean up stack on a LocalInit error pop es pop cx pop ds pop di exit:
cEnd
sEnd _thisseg
END LibEntry
|