Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
dlgthk.inc
Package: shell.rar [view]
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 17k
Category:
Windows Kernel
Development Platform:
Visual C++
- CodeData equ <THUNK16BCodeData>
- include thkframe.inc
- include thkrp.inc
- include cbcheck.inc
- include public.inc
- include cbcid.inc
- include dlgcbid.inc
- externDef FreeCallback:far16
- externDef AllocCallback:far16
- externDef ConvertDevModeHandleSL:far16
- externDef ConvertDevNamesHandleSL:far16
- externDef ConvertDevModeHandleLS:far16
- externDef ConvertDevNamesHandleLS:far16
- fLocalFlag equ fDlgLog16
- ; note: following size should be the same as in thunkcompack.h
- OPENFILENAME16_SIZE EQU 72
- OPENFILENAME32_SIZE EQU 76 ;4Ch
- CHOOSECOLOR16_SIZE EQU 32
- CHOOSECOLOR32_SIZE EQU 36 ;24h
- CHOOSEFONT16_SIZE EQU 46
- CHOOSEFONT32_SIZE EQU 60 ;3Ch
- PRINTDLG16_SIZE EQU 52
- PRINTDLG32_SIZE EQU 66 ;42h
- LOGFONT16_SIZE EQU 50
- OFN16_Flags_OFFSET EQU 48 ;30h
- CC16_rgbResult_OFFSET EQU 8 ;08h
- CF16_iPointSize_OFFSET EQU 12 ;0Ch
- CF16_Flags_OFFSET EQU 14 ;0Dh
- CF16_rgbColors_OFFSET EQU 18 ;12h
- CF16_nFontType_OFFSET EQU 40 ;28h
- PD16_hDevMode_OFFSET EQU 6 ;06h
- PD16_hDevNames_OFFSET EQU 8 ;08h
- OFN32_Flags_OFFSET EQU 52 ;34h
- OFN32_lpfnHook_OFFSET EQU 68 ;44h
- CC32_rgbResult_OFFSET EQU 12 ;0Ch
- CC32_Flags_OFFSET EQU 20 ;14h
- CC32_lpfnHook_OFFSET EQU 28 ;1Ch
- FR32_Flags_OFFSET EQU 12 ;0CH
- FR32_lpfnHook_OFFSET EQU 32 ;20h
- CF32_lpLogFont_OFFSET EQU 12 ;0Ch
- CF32_iPointSize_OFFSET EQU 16 ;10h
- CF32_Flags_OFFSET EQU 20 ;14h
- CF32_rgbColors_OFFSET EQU 24 ;18h
- CF32_lpfnHook_OFFSET EQU 32 ;20h
- CF32_nFontType_OFFSET EQU 48 ;30h
- PD32_Flags_OFFSET EQU 20 ;1Ch
- PD32_hDevMode_OFFSET EQU 8 ;08h
- PD32_hDevNames_OFFSET EQU 12 ;0Ch
- PD32_lpfnPrintHook_OFFSET EQU 42 ;2Ah
- PD32_lpfnSetupHook_OFFSET EQU 46 ;2Eh
- ;---------------------------------------------------------------------------
- ; This macro does the work for GetOpenFilename() and GetSaveFilename().
- ; The argument "Flags" is a dword ptr expression denoting a thunk-compiler
- ; temporary that holds the Flags field of the OPENFILENAME struct.
- ;
- ; Assumption: If the hInst field is a global handle, the Win32 wrapper
- ; guaratees it's a (zero-extended) Win16 handle.
- ;---------------------------------------------------------------------------
- RAWPACK__THKGETOPENORSAVEFILENAME_lpOfn macro iOffset,iTempOffset,Flags
- local skip_it
- local nohook,hook_done
- local notemplate,template_done
- sub sp,OPENFILENAME16_SIZE ; alloc space for MapLS sels
- sub sp,OPENFILENAME16_SIZE ; alloc space on stack
- mov eax,[bp+iOffset] ; base address
- or eax,eax ; check structure pointer
- jz skip_it ; skip if null
- mov [bp-iTempOffset],sp ; save offset to buffer
- mov [bp-iTempOffset+2],ss ; save selector to buffer
- mov di,ss
- mov es,di
- movzx edi,sp ; es:edi == destination address
- mov esi,eax
- mov ds,cs:CodeData ; need access to FlatData
- mov ds,FlatData ; ds:esi == source address
- mov eax,ds:[esi + OFN32_Flags_OFFSET]
- mov Flags,eax
- cld
- lodsd ds:[esi] ;BUGBUG lStructSize should be checked here
- mov eax,OPENFILENAME16_SIZE ;sizeof(OPENFILENAME16)
- stosd es:[edi] ;lStructSize same size
- ; comments refer to action going 16->32
- ;hwndOwner
- copyt
- mov ecx,Flags
- and ecx,OFN_ENABLETEMPLATE
- lodsd ds:[esi] ;hInst
- MAP_CD_NULL_HINST eax,ecx
- stosw es:[edi]
- MAP_POINTER es:[di+OPENFILENAME16_SIZE] ;PLUGGED lpstrFilter
- MAP_POINTER es:[di+OPENFILENAME16_SIZE] ;PLUGGED lpstrCustomFilter
- ncopyd 2 ;nMaxCustFilter,nFilterIndex
- MAP_POINTER es:[di+OPENFILENAME16_SIZE] ;PLUGGED lpstrFile
- copyd ;nMaxFile
- MAP_POINTER es:[di+OPENFILENAME16_SIZE] ;PLUGGED lpstrFileTitle
- copyd ;nMaxFileTitle
- MAP_POINTER es:[di+OPENFILENAME16_SIZE] ;PLUGGED lpstrInitialDir
- MAP_POINTER es:[di+OPENFILENAME16_SIZE] ;PLUGGED lpstrTitle
- copyd ;Flags
- ncopyw 2 ;nFileOffset,nFileExtension
- MAP_POINTER es:[di+OPENFILENAME16_SIZE];PLUGGED lpstrDefExt
- copyd ;lCustData
- test Flags,OFN_ENABLEHOOK
- jz nohook
- MAP_CALLBACK CBID_OPENFILENAME ;PLUGGED lpfnHook
- jmp short hook_done
- nohook:
- copyd
- hook_done:
- ;lpTemplate must be mapped only if OFN_ENABLETEMPLATE is set
- xor eax,eax
- mov es:[di+OPENFILENAME16_SIZE],eax ;in case we skip mapping
- test Flags, OFN_ENABLETEMPLATE ; if OFN_ENABLETEMPLATE is set
- jz notemplate
- MAP_POINTER es:[di+OPENFILENAME16_SIZE] ;PLUGGED lpTemplateName
- jmp short template_done
- notemplate:
- copyd ;lpTemplate
- template_done:
- skip_it:
- endm
- RAWUNPACK__THKGETOPENORSAVEFILENAME_lpOfn macro iOffset,iTempOffset,Flags
- local skip_it
- local nohook,hook_done
- local notemplate,template_done
- mov eax,[bp+iOffset] ; base address
- or eax,eax ; check structure pointer
- jz skip_it ; skip if null
- mov es,cs:CodeData
- mov es,es:FlatData
- mov edi,eax ; source in es:edi
- push ds
- lds si,[bp-iTempOffset]
- movzx esi,si ;in case code uses esi by accident
- cld
- lods dword ptr ds:[si] ;BUGBUG lStructSize should be checked here
- mov eax,OPENFILENAME32_SIZE ;sizeof(OPENFILENAME32)
- stos dword ptr es:[edi] ;lStructSize same size
- ; comments refer to action going 16->32
- copyzx
- mov ecx,Flags
- and ecx,OFN_ENABLETEMPLATE
- lodsw ds:[si] ;hInst
- UMAP_CD_NULL_HINST ax,ecx
- stosd es:[edi]
- UMAP_POINTER ds:[si+OPENFILENAME16_SIZE] ;lpstrFilter must be mapped
- UMAP_POINTER ds:[si+OPENFILENAME16_SIZE] ;lpstrCustomFilter must be mapped
- ncopyd 2
- UMAP_POINTER ds:[si+OPENFILENAME16_SIZE] ;lpstrFile must be mapped
- copyd
- UMAP_POINTER ds:[si+OPENFILENAME16_SIZE] ;lpstrFileTitle must be mapped
- copyd
- UMAP_POINTER ds:[si+OPENFILENAME16_SIZE] ;lpstrInitialDir must be mapped
- UMAP_POINTER ds:[si+OPENFILENAME16_SIZE] ;lpstrTitle must be mapped
- copyd
- ncopyw 2
- UMAP_POINTER ds:[si+OPENFILENAME16_SIZE] ;lpstrDefExt must be mapped
- copyd
- test Flags,OFN_ENABLEHOOK
- jz nohook
- lodsd ds:[si]
- FREE_CALLBACK CBID_OPENFILENAME
- stos dword ptr es:[edi]
- jmp short hook_done
- nohook:
- copyd
- hook_done:
- test Flags,OFN_ENABLETEMPLATE
- jz notemplate
- UMAP_POINTER ds:[si+OPENFILENAME16_SIZE] ;lpTemplateName must be mapped
- jmp short template_done
- notemplate:
- copyd
- template_done:
- pop ds
- skip_it:
- endm
- ;-----------------------------------------------------------------------------
- ; Pack/unpack OPENFILENAME struct for GetOpenFilename().
- ;-----------------------------------------------------------------------------
- RAWPACK__THKGETOPENFILENAME_lpOfn macro iOffset,iTempOffset
- RAWPACK__THKGETOPENORSAVEFILENAME_lpOfn iOffset,iTempOffset,dword ptr LOCAL__THKGETOPENFILENAME_Flags
- endm
- RAWUNPACK__THKGETOPENFILENAME_lpOfn macro iOffset,iTempOffset
- RAWUNPACK__THKGETOPENORSAVEFILENAME_lpOfn iOffset,iTempOffset,dword ptr LOCAL__THKGETOPENFILENAME_Flags
- endm
- ;-----------------------------------------------------------------------------
- ; Pack/unpack OPENFILENAME struct for GetSaveFilename().
- ;-----------------------------------------------------------------------------
- RAWPACK__THKGETSAVEFILENAME_lpOfn macro iOffset,iTempOffset
- RAWPACK__THKGETOPENORSAVEFILENAME_lpOfn iOffset,iTempOffset,dword ptr LOCAL__THKGETSAVEFILENAME_Flags
- endm
- RAWUNPACK__THKGETSAVEFILENAME_lpOfn macro iOffset,iTempOffset
- RAWUNPACK__THKGETOPENORSAVEFILENAME_lpOfn iOffset,iTempOffset,dword ptr LOCAL__THKGETSAVEFILENAME_Flags
- endm
- ;-----------------------------------------------------------------------------
- ; Pack CHOOSECOLOR struct for ChooseColor().
- ;
- ; Assumption: If the hInst field is a global handle, the Win32 wrapper
- ; guaratees it's a (zero-extended) Win16 handle.
- ;-----------------------------------------------------------------------------
- RAWPACK__THKCHOOSECOLOR_lpcc macro iOffset,iTempOffset
- local nohook,hook_done
- local notemplate,template_done
- local skip_it
- sub sp,CHOOSECOLOR16_SIZE ;Alloc space on stack
- mov eax,[bp+iOffset]
- or eax,eax
- jz skip_it
- mov [bp-iTempOffset],sp ;Save offset to buffer
- mov [bp-iTempOffset+2],ss ;Save selector to buffer
- mov di,ss
- mov es,di
- movzx edi,sp
- mov esi,eax
- mov ds,cs:CodeData
- mov ds,FlatData
- mov eax,ds:[esi + CC32_Flags_OFFSET]
- mov LOCAL__THKCHOOSECOLOR_Flags,eax
- lodsd ds:[esi]
- mov eax,CHOOSECOLOR16_SIZE
- stosd es:[di] ;lStructSize
- ;hwndOwner
- copyt
- ;hInstance
- mov ecx,LOCAL__THKCHOOSECOLOR_Flags
- and ecx,CC_ENABLETEMPLATE
- lodsd ds:[esi] ;hInst
- MAP_CD_NULL_HINST eax,ecx
- stosw es:[di]
- ;rgbResult
- copyd
- MAP_POINTER LOCAL__THKCHOOSECOLOR_lpCustColorsSeg ;PLUGGED lpCustColors
- ;Flags, lCustData
- ncopyd 2
- ; Map hook function (only do the mapping if CC_ENABLEHOOK flag set).
- mov eax,LOCAL__THKCHOOSECOLOR_Flags
- test eax,CC_ENABLEHOOK
- jz nohook
- MAP_CALLBACK CBID_CHOOSECOLOR ;PLUGGED lpfnHook
- jmp short hook_done
- nohook:
- copyd
- hook_done:
- ; Map template name (only if CC_ENABLETEMPLATE flag set).
- mov eax,LOCAL__THKCHOOSECOLOR_Flags
- test eax,CC_ENABLETEMPLATE
- jz notemplate
- MAP_POINTER LOCAL__THKCHOOSECOLOR_lpTemplateNameSeg ;PLUGGED
- jmp short template_done ;lpTemplate
- notemplate:
- copyd
- template_done:
- ; Finished
- skip_it:
- endm
- ;-----------------------------------------------------------------------------
- ; Unpack CHOOSECOLOR struct for ChooseColor().
- ;-----------------------------------------------------------------------------
- RAWUNPACK__THKCHOOSECOLOR_lpcc macro iOffset,iTempOffset
- local skip_it
- local nohook
- mov eax,[bp+iOffset] ; base address
- or eax,eax ; check structure pointer
- jz skip_it ; skip if null
- mov es,cs:CodeData
- mov es,es:FlatData
- mov edi,eax ; source in es:edi
- ; Free callback (if CC_ENABLEHOOK flag set).
- mov eax,LOCAL__THKCHOOSECOLOR_Flags
- test eax,CC_ENABLEHOOK
- jz nohook
- mov eax,es:[edi+CC32_lpfnHook_OFFSET]
- FREE_CALLBACK CBID_CHOOSECOLOR
- nohook:
- ; Propagate copy-outs field back to caller's struct.
- mov si, [bp-iTempOffset]
- mov eax,ss:[si+CC16_rgbResult_OFFSET]
- mov es:[edi+CC32_rgbResult_OFFSET], eax
- ; Free up selectors (if no mapping happened, UnmapLS safely ignores
- ; NULL segments).
- pushd LOCAL__THKCHOOSECOLOR_lpCustColorsSeg
- call UnmapLS
- pushd LOCAL__THKCHOOSECOLOR_lpTemplateNameSeg
- call UnmapLS
- skip_it:
- endm
- ;-----------------------------------------------------------------------------
- ; Pack/unpack CHOOSEFONT struct for ChooseFont().
- ;
- ; Assumption: If the hInst field is a global handle, the Win32 wrapper
- ; guaratees it's a (zero-extended) Win16 handle.
- ;-----------------------------------------------------------------------------
- RAWPACK__THKCHOOSEFONT_lpcf macro iOffset,iTempOffset
- local skip_it
- local nohook,hook_done
- local notemplate,template_done
- local no_log_font
- sub sp,CHOOSEFONT16_SIZE+LOGFONT16_SIZE ; alloc space on stack
- mov eax,[bp+iOffset] ; base address
- or eax,eax ; check structure pointer
- jz skip_it ; skip if null
- mov [bp-iTempOffset],sp ; save offset to buffer
- mov [bp-iTempOffset+2],ss ; save selector to buffer
- mov di,ss
- mov es,di
- movzx edi,sp ; es:edi == destination address
- mov esi,eax
- mov ds,cs:CodeData ; need access to FlatData
- mov ds,FlatData ; ds:esi == source address
- mov eax,ds:[esi + CF32_Flags_OFFSET]
- mov LOCAL__THKCHOOSEFONT_Flags,eax
- cld
- ; comments refer to action going 16->32
- lodsd ds:[esi] ;BUGBUG lStructSize should be checked here
- mov eax,CHOOSEFONT16_SIZE ;sizeof(CHOOSEFONT16)
- stosd es:[di] ;lStructSize same size
- ;hwndOwner, hDC
- ncopyt 2
- lodsd ds:[esi]
- or eax,eax
- jz no_log_font
- mov ax,ss
- ror eax,16
- mov ax,di
- add ax,CHOOSEFONT16_SIZE-8 ;already moved DI by 8
- no_log_font:
- stosd es:[di] ;lpLogFont widened (need to pack it)
- ;iPointSize
- copyt
- ;Flags, rgbColors, lCustData
- ncopyd 3
- test dword ptr LOCAL__THKCHOOSEFONT_Flags,CF_ENABLEHOOK
- jz nohook
- MAP_CALLBACK CBID_CHOOSEFONT ;PLUGGED lpfnHook
- jmp short hook_done
- nohook:
- copyd
- hook_done:
- test dword ptr LOCAL__THKCHOOSEFONT_Flags,CF_ENABLETEMPLATE
- jz notemplate
- MAP_POINTER LOCAL__THKCHOOSEFONT_lpTemplateNameTemp ;PLUGGED
- jmp short template_done
- notemplate:
- copyd
- template_done:
- mov ecx,LOCAL__THKCHOOSEFONT_Flags
- and ecx,CF_ENABLETEMPLATE
- lodsd ds:[esi] ;hInst
- MAP_CD_NULL_HINST eax,ecx
- stosw es:[di]
- ;lpszStyle must be mapped
- MAP_POINTER LOCAL__THKCHOOSEFONT_lpszStyleTemp ;PLUGGED
- ;nFontType, nSizeMin, nSizeMax
- ncopyt 3
- mov esi,[bp+iOffset] ; base address
- mov esi,[esi].CF32_lpLogFont_OFFSET ; ds:esi == source address
- or esi,esi ; check structure pointer
- jz skip_it ; skip if null
- cld
- ; comments refer to action going 16->32
- ;lfHeight, lfWidth, lfEscapement, lfOrientation, lfWeight
- ncopyt 5
- ;lfItalic, ..., lfFaceName
- ncopyd (40/4)
- skip_it:
- endm
- RAWUNPACK__THKCHOOSEFONT_lpcf macro iOffset,iTempOffset
- local skip_it
- local nohook
- ;!!! We're only unpacking the log font structure! Does the rest of
- ; the CHOOSEFONT structure need to be unpacked as well?
- mov eax,[bp+iOffset] ; base address
- or eax,eax ; check structure pointer
- jz skip_it ; skip if null
- mov es,cs:CodeData
- mov es,es:FlatData
- mov edi,eax ; dest in es:edi
- test dword ptr LOCAL__THKCHOOSEFONT_Flags,CF_ENABLEHOOK
- jz nohook
- mov eax,es:[edi+CF32_lpfnHook_OFFSET]
- FREE_CALLBACK CBID_CHOOSEFONT
- nohook:
- ;; The iPointSize, rgbColors, Flags & nFontType fields need to be copied back
- ;; to the caller's buffer.
- lds si,dword ptr [bp-iTempOffset]
- movzx esi,si
- mov eax,[si+CF16_rgbColors_OFFSET] ; rgbColors
- mov es:[edi+CF32_rgbColors_OFFSET],eax
- mov ax,[si+CF16_iPointSize_OFFSET] ; iPointSize
- movsx eax,ax
- mov es:[edi+CF32_iPointSize_OFFSET],eax
- mov eax,[si+CF16_Flags_OFFSET] ; Flags
- mov es:[edi+CF32_Flags_OFFSET],eax
- mov ax,[si+CF16_nFontType_OFFSET] ; nFontType
- movzx eax,ax
- mov es:[edi+CF32_nFontType_OFFSET],eax
- mov edi,es:[edi+CF32_lpLogFont_OFFSET]
- or edi,edi
- jz skip_it
- add si,CHOOSEFONT16_SIZE
- ; comments refer to action going 16->32
- cld
- ncopysx 5
- ncopyd (40/4)
- skip_it:
- pushd LOCAL__THKCHOOSEFONT_lpszStyleTemp
- call UnmapLS
- pushd LOCAL__THKCHOOSEFONT_lpTemplateNameTemp
- call UnmapLS
- endm