page ,132 ;Thunk Compiler Version 1.8 Dec 14 1994 14:53:05 ;File Compiled Wed Jan 29 18:57:28 1997 ;Command Line: ..\..\..\..\dev\tools\binr\thunk.exe -NC _TEXT ..\w95thk.thk TITLE $..\w95thk.asm .386 OPTION READONLY OPTION OLDSTRUCTS IFNDEF IS_16 IFNDEF IS_32 %out command line error: specify one of -DIS_16, -DIS_32 .err ENDIF ;IS_32 ENDIF ;IS_16 IFDEF IS_32 IFDEF IS_16 %out command line error: you can't specify both -DIS_16 and -DIS_32 .err ENDIF ;IS_16 ;************************* START OF 32-BIT CODE ************************* .model FLAT,STDCALL ;-- Import common flat thunk routines (in k32) externDef AllocMappedBuffer :near32 externDef FreeMappedBuffer :near32 externDef MapHInstLS :near32 externDef MapHInstLS_PN :near32 externDef MapHInstSL :near32 externDef MapHInstSL_PN :near32 externDef FT_Prolog :near32 externDef FT_Thunk :near32 externDef QT_Thunk :near32 externDef FT_Exit0 :near32 externDef FT_Exit4 :near32 externDef FT_Exit8 :near32 externDef FT_Exit12 :near32 externDef FT_Exit16 :near32 externDef FT_Exit20 :near32 externDef FT_Exit24 :near32 externDef FT_Exit28 :near32 externDef FT_Exit32 :near32 externDef FT_Exit36 :near32 externDef FT_Exit40 :near32 externDef FT_Exit44 :near32 externDef FT_Exit48 :near32 externDef FT_Exit52 :near32 externDef FT_Exit56 :near32 externDef SMapLS :near32 externDef SUnMapLS :near32 externDef SMapLS_IP_EBP_8 :near32 externDef SUnMapLS_IP_EBP_8 :near32 externDef SMapLS_IP_EBP_12 :near32 externDef SUnMapLS_IP_EBP_12 :near32 externDef SMapLS_IP_EBP_16 :near32 externDef SUnMapLS_IP_EBP_16 :near32 externDef SMapLS_IP_EBP_20 :near32 externDef SUnMapLS_IP_EBP_20 :near32 externDef SMapLS_IP_EBP_24 :near32 externDef SUnMapLS_IP_EBP_24 :near32 externDef SMapLS_IP_EBP_28 :near32 externDef SUnMapLS_IP_EBP_28 :near32 externDef SMapLS_IP_EBP_32 :near32 externDef SUnMapLS_IP_EBP_32 :near32 externDef SMapLS_IP_EBP_36 :near32 externDef SUnMapLS_IP_EBP_36 :near32 externDef SMapLS_IP_EBP_40 :near32 externDef SUnMapLS_IP_EBP_40 :near32 MapLS PROTO NEAR STDCALL :DWORD UnMapLS PROTO NEAR STDCALL :DWORD MapSL PROTO NEAR STDCALL p32:DWORD ;***************** START OF KERNEL32-ONLY SECTION ****************** ; Hacks for kernel32 initialization. IFDEF FT_DEFINEFTCOMMONROUTINES .data public FT_w95thkTargetTable ;Flat address of target table in 16-bit module. public FT_w95thkChecksum32 FT_w95thkChecksum32 dd 03469h ENDIF ;FT_DEFINEFTCOMMONROUTINES ;***************** END OF KERNEL32-ONLY SECTION ****************** .code ;************************* COMMON PER-MODULE ROUTINES ************************* .data public w95thk_ThunkData32 ;This symbol must be exported. w95thk_ThunkData32 label dword dd 3130534ch ;Protocol 'LS01' dd 03469h ;Checksum dd 0 ;Jump table address. dd 3130424ch ;'LB01' dd 0 ;Flags dd 0 ;Reserved (MUST BE 0) dd 0 ;Reserved (MUST BE 0) dd offset QT_Thunk_w95thk - offset w95thk_ThunkData32 dd offset FT_Prolog_w95thk - offset w95thk_ThunkData32 .code externDef ThunkConnect32@24:near32 public w95thk_ThunkConnect32@16 w95thk_ThunkConnect32@16: pop edx push offset w95thk_ThkData16 push offset w95thk_ThunkData32 push edx jmp ThunkConnect32@24 w95thk_ThkData16 label byte db "w95thk_ThunkData16",0 pfnQT_Thunk_w95thk dd offset QT_Thunk_w95thk pfnFT_Prolog_w95thk dd offset FT_Prolog_w95thk .data QT_Thunk_w95thk label byte db 32 dup(0cch) ;Patch space. FT_Prolog_w95thk label byte db 32 dup(0cch) ;Patch space. .code ebp_top equ <[ebp + 8]> ;First api parameter ebp_retval equ <[ebp + -64]> ;Api return value FT_ESPFIXUP macro dwSpOffset or dword ptr [ebp + -20], 1 SHL ((dwSpOffset) SHR 1) endm ebp_qttop equ <[ebp + 8]> include fltthk.inc ;Support definitions include w95thk.inc ;************************ START OF THUNK BODIES************************ ; public GetSETUPXErrorText16@12 GetSETUPXErrorText16@12: FAPILOG16 73 mov cl,3 ; GetSETUPXErrorText16(16) = GetSETUPXErrorText16(32) {} ; ; dword ptr [ebp+8]: dwError ; dword ptr [ebp+12]: lpszErrorText ; dword ptr [ebp+16]: cbErrorText ; public IIGetSETUPXErrorText16@12 IIGetSETUPXErrorText16@12: push ebp mov ebp,esp push ecx sub esp,60 push dword ptr [ebp+8] ;dwError: dword->dword call SMapLS_IP_EBP_12 push eax push dword ptr [ebp+16] ;cbErrorText: dword->dword call dword ptr [pfnQT_Thunk_w95thk] call SUnMapLS_IP_EBP_12 leave retn 12 ; public CtlSetLddPath16@8 CtlSetLddPath16@8: FAPILOG16 53 mov cl,2 ; CtlSetLddPath16(16) = CtlSetLddPath16(32) {} ; ; dword ptr [ebp+8]: uiLDID ; dword ptr [ebp+12]: lpszPath ; public IICtlSetLddPath16@8 IICtlSetLddPath16@8: push ebp mov ebp,esp push ecx sub esp,60 push word ptr [ebp+8] ;uiLDID: dword->word call SMapLS_IP_EBP_12 push eax call dword ptr [pfnQT_Thunk_w95thk] call SUnMapLS_IP_EBP_12 leave retn 8 ; public GenInstall16@12 GenInstall16@12: FAPILOG16 36 mov cl,1 ; GenInstall16(16) = GenInstall16(32) {} ; ; dword ptr [ebp+8]: lpszInf ; dword ptr [ebp+12]: lpszSection ; dword ptr [ebp+16]: lpszDirectory ; public IIGenInstall16@12 IIGenInstall16@12: push ebp mov ebp,esp push ecx sub esp,60 call SMapLS_IP_EBP_8 push eax call SMapLS_IP_EBP_12 push eax call SMapLS_IP_EBP_16 push eax call dword ptr [pfnQT_Thunk_w95thk] call SUnMapLS_IP_EBP_8 call SUnMapLS_IP_EBP_12 call SUnMapLS_IP_EBP_16 leave retn 12 ; public GenFormStrWithoutPlaceHolders16@12 GenFormStrWithoutPlaceHolders16@12: FAPILOG16 0 mov cl,0 ; GenFormStrWithoutPlaceHolders16(16) = GenFormStrWithoutPlaceHolders16(32) {} ; ; dword ptr [ebp+8]: lpszDst ; dword ptr [ebp+12]: lpszSrc ; dword ptr [ebp+16]: lpszInfFilename ; public IIGenFormStrWithoutPlaceHolders16@12 IIGenFormStrWithoutPlaceHolders16@12: push ebp mov ebp,esp push ecx sub esp,60 call SMapLS_IP_EBP_8 push eax call SMapLS_IP_EBP_12 push eax call SMapLS_IP_EBP_16 push eax call dword ptr [pfnQT_Thunk_w95thk] cwde call SUnMapLS_IP_EBP_8 call SUnMapLS_IP_EBP_12 call SUnMapLS_IP_EBP_16 leave retn 12 ;----------------------------------------------------------- ifdef DEBUG FT_ThunkLogNames label byte db '[F] GenFormStrWithoutPlaceHolders16',0 db '[F] GenInstall16',0 db '[F] CtlSetLddPath16',0 db '[F] GetSETUPXErrorText16',0 endif ;DEBUG ;----------------------------------------------------------- ELSE ;************************* START OF 16-BIT CODE ************************* OPTION SEGMENT:USE16 .model LARGE,PASCAL .code _TEXT externDef GenFormStrWithoutPlaceHolders16:far16 externDef GenInstall16:far16 externDef CtlSetLddPath16:far16 externDef GetSETUPXErrorText16:far16 FT_w95thkTargetTable label word dw offset GenFormStrWithoutPlaceHolders16 dw seg GenFormStrWithoutPlaceHolders16 dw offset GenInstall16 dw seg GenInstall16 dw offset CtlSetLddPath16 dw seg CtlSetLddPath16 dw offset GetSETUPXErrorText16 dw seg GetSETUPXErrorText16 .data public w95thk_ThunkData16 ;This symbol must be exported. w95thk_ThunkData16 dd 3130534ch ;Protocol 'LS01' dd 03469h ;Checksum dw offset FT_w95thkTargetTable dw seg FT_w95thkTargetTable dd 0 ;First-time flag. .code _TEXT externDef ThunkConnect16:far16 public w95thk_ThunkConnect16 w95thk_ThunkConnect16: pop ax pop dx push seg w95thk_ThunkData16 push offset w95thk_ThunkData16 push seg w95thk_ThkData32 push offset w95thk_ThkData32 push cs push dx push ax jmp ThunkConnect16 w95thk_ThkData32 label byte db "w95thk_ThunkData32",0 ENDIF END