Thursday, March 11, 2010

සිංහලෙන් win32 Portable Executable format

මෙම ලිපියෙන් ලිවීමට බලාපොරොත්තු වනුයේ win32 Portable Executable format යනුවෙන් හදුන්වන්නේ කුමක්ද යන්නත් මෙතෙක් ලියු ලිපි වල සාරාංශයක් ඉදිරිපත් කිරීමටත්ය.





සිං
හලෙන් win32 Portable Executable format - part 9 සදහා මීට පෙර ලිපියට යන්න.


මෙය විස්තර කිරීම සදහා නිශ්චිත ක්‍රමයක් නොමැත. එම නිසා මා දන්නා පමණනින් විස්තර කිරීම‍ට බලාපොරොත්තු වෙන්නෙමි. මෙම file format එක COFF (Common Object File Format) ලෙසද හදුන්වන ස්ථානද දක්නට ඇත. මෙය Microsoft ආයතනය විසින් පමණක් නිර්මානය කරන ලද්දක් නොවන අතර Intel, Borland, Watcom, IBM වැනි ආයතන කිහිපයක්ද එකතුව නිර්මානය කරන ලද්දකි.
මෙයටද වෙනත් file වර්ග(.html, .zip, .bmp වැනි) වලට මෙන්ම ආවේනික රටාවක් තිබේ. මෙම format එකට සකසන files .exe, .dll, .ocx, .cpl, .sys වැනි extenstions වලින් තිබිය හැක.

PE එකක් යනු compiler එකක් මගින් සකසන ලද file එකක් වේ. එය අපට නිර්මානය කිරීමට අපහසුය. අපට win32 executable එකක් සැකසීමට නම් PE format එක ගැනත් Linker එකක ක්‍රියාවලියත් යන 2ම ගැන හොද අවබෝධයක් තිබිය යුතුය. ඊ‍ට අමතරව library file වල ඇති functions ගැනත්, ඒවායේ කාර්යයන් ගැනත් හොද අවබෝධයක් තිබිය යුතුය.

මෙම ලිපි මාලාවේ පැහැදිලි කිරීම් සදහා calc.exe හා shell32.dll (අනවසරයෙන්)යොදා ගෙන ඇත.

PE file එකක් සැකසීමට 0 සිට 255 (ASCII Code) දක්වා ඇති සියලුම අකුරැ භාවිතයට ගනී. එම නිසා ඒවා text editor එකකින් කියවිය නොහැක. ඒවා කියවීමට නම් එය hex editor එකකින් විවෘත කර ගත යුතුය.

Source එක හා output එක පමණක් සැලකූ විට,

html source file එකක් web browser එකක් මගින් විවෘත කල විට එහි source එකට අනුව output එකක් නිර්මාණය කර දෙයි.



එසේම exe එකක් ක්‍රියාත්මක කල විට PE එකෙහි source එකට අදාල output එකක් අපට දැක ගත හැක.



PE format එක යනු PE එකක source එක තබා ගන්නා ආකෘතිය වේ. මෙම ලිපි මාලාවෙන් පැහැදිලි කර තිබෙනුයේ PE එකක source file එකෙහි format එක ගැනය. එය html යන language එක ගැන පැහැදිලි කිරීමක් වැනිය.
මෙහිදී සියළු පැහැදිලි කිරීම් සිදුකර ඇත්තේ අන්තර්ජාලය හරහා ලබා ගත් තොරතුරු මත හා මාගේ ස්වයං අධ්‍යයන මත ලබා ගත් කරුනු මගිනි. මෙම පැහැදිලි කිරීම් සදහා මා විසින් නිර්මාණය කරන ලද මෘදුකාංගයක් යොදා ගෙන ඇත. එය PE file එක තිබෙන ආකාරය බලා ගැනීමට හා වෙනස් කිරීමට හැකි IDE එකක් ලෙස ක්‍රියා කරයි. නමුත් මෙමගින් නව PE file එකක් නිර්මාණය කල නොහැක. මෙහිදී සිදු කරනුයේ PE එකෙහි data වෙනස් කර පිටපතක් save කිරීම පමනකි.

මෙම PE file වල magic code එක "MZ" වේ. PE එකක ව්‍යුහය පිළිබදව අන්තර්ජාලය තුල සෙවීම් කිරීමේදී විවිධ ආකාරයේ පැහැදිලි කිරීම් දක්නට තිබේ. නමුත් මෙහිදී මා පළමුව සිදු කලේ PE එක ප්‍රධාන කොටස් 3 කට වෙන් කර එය tree එකක් ආකාරයට සකසා ගැනීමයි. පළමු කොටස MS-DOS දත්ත සදහාද, දෙවන කොටස Win NT දත්ත සදහාද, තෙවන කොටස PE එකෙහි data ඇති කොටස වශයෙන්ද වෙන් කර ඇත. මෙහි පළමු කොටස් 2හි ඇති සියළු උප කොටස් සෑම PE එකකම පාහේ දක්නට ඇත.තෙවන කොටස section වල meta data හා section data යනුවෙන් තවත් කොටස් 2 කට වෙන් කර ඇත. මෙම sections .text, .rsrc, .data වැනි නම් වලින් පිහිටා තිබේ. මෙම section තුල data අඩංගු tables පිහිටා ඇත. ඒවා import table, export table, resource table වැනි නම් වලින් පිහිටා ඇත. මෙම table තුල භාවිතා කරන දත්ත, executable code එක, වෙනත් library තුලින් import කල යුතු functions ගැන විස්තර ආදිය තිබේ.

මෙහි PE එකෙහි ව්‍යුහය tree එකක් ආකාරයට දක්වා ඇත.

Wednesday, March 10, 2010

සිංහලෙන් win32 Portable Executable format - part 9

පසුගිය සතියේ RT_DIALOG පිළිබදව විස්තර කිරීමක් සිදු කර ඇත. තවද dialog එකක් තුල ඇති Object classes කිහිපයක් ගැනද, ඒවායේ attribute ගැනද සදහන් කර ඇත. මේ සතියේ තවත් Object classes කිහිපයක් ගැන සදහන් කිරීමට බලාපොරොත්තු වෙමි.





COMBO BOX
STYLE NAMEBIT #
CBS_LOWERCASExviii=1
CBS_UPPERCASExix=1
CBS_DISABLENOSCROLLxxi=1
CBS_NOINTEGRALHEIGHTxxii=1
CBS_HASSTRINSxxiii=1
CBS_SORTxxiv=1
CBS_OEMCONVERTxxv=1
CBS_AUTOHSCROLLxxvi=1
CBS_OWNERDRAWVARIABLExxvii=1
CBS_OWNERDRAWFIXEDxxviii=1
CBS_DROPDOWNLISTxxxi=1 And
xxxii=1
CBS_DROPDOWNxxxi=1 And
xxxii=0
CBS_SIMPLExxxi=0 And
xxxii=1

msctls_trackbar32
TBS_NOTHUMBxxv=1
TBS_FIXEDLENGHTxxvi=1
TBS_ENABLESELRANGExxvii=1
TBS_NOTICKSxxviii=1
TBS_HORZxxxi=0
TBS_VERTxxxi=1
TBS_AUTOTICKSxxxii=1
TBS_RIGHTxxx=0
TBS_BOTTOMxxx=0
TBS_TOPxxx=1
TBS_LEFTxxx=1
TBS_BOTHxxix=1

msctls_updown32
UDS_NOTHOUSANDSxxv=1
UDS_HORZxxvi=1
UDS_ARROWKEYSxxvii=1
UDS_AUTOBUDDYxxviii=1
UDS_ALIGNLEFTxxix=1
UDS_ALIGNRIGHTxxx=1
UDS_SETBUDDYINTxxxi=1
UDS_WRAPxxxii=1

msctls_progress32
PBS_VERTICALxxx=1
PBS_SMOOTHxxxii=1

SysListView32
LVS_NOSORTHEADERxvii=1
LVS_NOCOLUMHEADERxviii=1
LVS_NOSCROLLxix=1
LVS_OWNERDATAxx=1
LVS_OWNERDRAWFIXEDxxii=1
LVS_EDITLABELSxxiii=1
LVS_AUTOARRANGExxiv=1
LVS_ALIGNTOPxxi=0
LVS_ALIGNLEFTxxi=1
LVS_NOLABELWRAPxxv=1
LVS_SHAREIMAGELISTSxxvi=1
LVS_SORTDESCENGINGxxvii=1
LVS_SORTASCENDINGxxviii=1
LVS_LISTxxxi=1 And
xxxii=1
LVS_SMALLICONxxxi=1 And
xxxii=0
LVS_REPORTxxxi=0 And
xxxii=1
LVS_ICONxxxi=0 And
xxxii=0
LVS_SHOWSELALWAYSxxx=1
LVS_SINGLESELxxix=1

SysTreeView32
TVS_SHOWSELALWAYSxxvi=1
TVS_DISABLEDRAGDROPxxvii=1
TVS_EDITLABELSxxviii=1
TVS_LINESATROOTxxix=1
TVS_HASLINESxxxi=1
TVS_HASBUTTONSxxxii=1

SysTabControl32
TCS_FOCUSNEVERxvii=1
TCS_TOOLTIPSxviii=1
TCS_OWNERDRAWFIXEDxix=1
TCS_FOCUSONBUTTONDOWNxx=1
TCS_RIGHTJUSTIFYxxii=0
TCS_FIXEDWIDTHxxii=1
TCS_SINGLExxiii=0
TCS_MULTILINExxiii=1
TCS_TABSxxiv=0
TCS_BUTTONSxxiv=1
TCS_RAGGEDRIGHTxxi=1
TCS_VERTICALxxv=1
TCS_HOTTRACKxxvi=1
TCS_FORCELABELLEFTxxvii=1
TCS_FORCEICONLEFTxxviii=1
TCS_RIGHTxxxi=1
TCS_BOTTOMxxxi=1
TCS_SCROLLOPPOSITExxxii=1

SysAnimate32
ACS_TIMERxxviii=1
ACS_AUTOPLAYxxix=1
ACS_TRANSPARENTxxxi=1
ACS_CENTERxxxii=1

RichEdit20A
ES_SELECTIONBARix=1
ES_VERTICALx=1
ES_NOIMExiii=1
ES_SELFIMExiv=1
ES_SAVESELxvii=1
ES_SUNKENxviii=1
ES_DISABLENOSCROLLxix=1
ES_WANTRETURNxx=1
ES_READONLYxxi=1
ES_NOHIDESELxxiv=1
ES_AUTOHSCROLLxxv=1
ES_AUTOVSCROLLxxvi=1
ES_PASSWORDxxvii=1
ES_RIGHTxxxi=1 And
xxxii=0
ES_CENTERxxxi=0 And
xxxii=1
ES_LEFTxxxi=0 And
xxxii=0
ES_NOOLEDRAGDROPxxix=1
ES_MULTILINExxx=1

SysDateTimePick32
DTS_RIGHTALIGNxxvii=1
DTS_APPCANPARSExxviii=1
DTS_SHOWNONExxxi=1
DTS_UPDOWNxxxii=1
DTS_SHORTDATEFORMATxxx=0
DTS_LONGDATEFORMATxxx=1
DTS_TIMEFORMATxxix=1

SysMonthCal32
MCS_NOTODAYxxix=1
MCS_WEEKNUMBERSxxx=1
MCS_MULTISELECTxxxi=1
MCS_DAYSTATExxxii=1

ComboBoxEx32
CBS_LOWERCASExviii=1
CBS_UPPERCASExix=1
CBS_DISABLENOSCROLLxxi=1
CBS_NOINTGRALHRIGHTxxii=1
CBS_HASSTRINGSxxiii=1
CBS_SORTxxiv=1
CBS_OEMCONVERTxxv=1
CBS_AUTOHSCROLLxxvi=1
CBS_DROPDOWNLISTxxxi=1 And
xxxii=1
CBS_DROPDOWNxxxi=1 And
xxxii=0
CBS_SIMPLExxxi=0 And
xxxii=1




object සදහා වන Styles හා ExStyles යෙදිය හැකි අගයන් ඉහත දක්වා තිබේ. මීගල‍ට ඇති 4 bytes මගින් දක්වනු ලබන්නේ එම object එක තිබෙන ස්ථානයේ x හා y ඛණ්ඩාංකයන් වේ. මිලග 4 bytes මගින් දක්වා ඇත්තේ එම object එකෙහි පළල හා උස වේ. මෙම අගයන් පික්සල්(px) මගින් දක්වා ඇත. මීලග 4 bytes මගින් පෙන්වනු ලබන්නේ Object එකෙහි ID එක වේ. මීලග‍ට ඇති 2 bytes මගින් 0xFFFF පෙන්නුම් කර ඇත්නම් එමගින් කියවෙනුයේ ඉන් පසුව ඇති 2 bytes මගින් Object class එකට අදාල අංකය දක්වා ඇති බවය. එසේ නොමැති නම් පසුව ඇත්තේ එම Object එකෙහි නම වේ.





Object class වලට අදාල අංක පහත ආකාර වේ.

0x0080BUTTON
0x0081TEXT BOX
0x0082STATIC
0x0083LIST BOX
0x0084SCROLLBAR
0x0085COMBO BOX

වෙනත් අංකයක් නම් එහි Object class එක ලෙස එම අංකයම යොදා ගනී.

මීලග‍ට ඇති 2 bytes මගින් 0xFFFF නිරෑපනය කර ඇත්නම් එමගින් කියවනුයේ මීලගට ඇති 2 bytes මගින් අදාල Object එක හා සම්බන්ධ කර ඇති resource එකක ID එකක් වේ.

උදා:- Object එක Icon එකක් යැයි සිතන්න එවිට එයට යෙදිය යුතු Icon එකෙහි ID එක මෙහි දක්වා ඇත.
එසේ නොමැති නම් මෙහි සදහන් වනුයේ text එකකි. එය Object එකට අදාල caption එකක් විය හැක.

මෙතනින් RT_DIALOG ගැන ලියල ඉවරයි. ලබන සතියේ ලියන්නේ RT_STRING ගැනයි.

Tuesday, January 19, 2010

සිංහලෙන් win32 Portable Executable format - part 8

පසුගිය කලාපයේ Resource data වර්ග 3 ක් පිළිබදව විස්තර කරන ලදී. මෙවර තවත් resource data වර්ග කීපයක් ගැන විස්තර කිරීමට බලාපොරොත්තු වෙමි.





RT_DIALOG (0x00000005)
මෙහි ඇත්තේ PE එකක අපට දක්නට ඇති dialogs වේ. එනම් අප forms ලෙස හදුන්වන්නේද මේවාය. මෙම dialog එකක් තුල තවත් objects තිබිය හැක. එනම් buttons, check boxes, radio buttons ආදිය වේ. පලමුව dialog එකක structure එක හදුනා ගැනීම සිදු කරමු.

dialog වර්ග 2 ක් තිබේ. එනම් Extended Styles(ExStyles) ඇති හා නැති ඒවා ලෙසය.

මෙහි resource data හි පලමු 8 bytes 0x00000000FFFF0001 ලෙස ඇත්නම් එහි ExStyles ඇත.

මෙහි මීට පසුව ඇති පලමු 4 bytes මගින් ExStyles පෙන්නුම් කරයි. එම styles පහත ආකාරයට දැක්විය හැක.
උදා:- Shell32.dll හි 1003 යන dialog එකෙහි ExStyle එක 0x00000000 ලෙස වේ.


STYLE NAME
BIT #
WS_EX_NOACTIVATEv=1
WS_EX_LAYOUTRTLx=1
WS_EX_NOINHERITLAYOUTxii=1
WS_EX_LAYEREDxiii=1
WS_EX_APPWINDOWxiv=1
WS_EX_STATICEDGExv=1
WS_EX_CONTROLPARENTxvi=1
WS_EX_LEFTSCROLLBARxviii=1
WS_EX_RTLREADINGxix=1
WS_EX_RIGHTxx=1
WS_EX_LEFT
WS_EX_LTRREADING
WS_EX_RIGHTSCROLLBAR
xviii=0 And xix=0 And xx=0
WS_EX_CONTEXTHELPxxii=1
WS_EX_CLIENTEDGExxiii=1
WS_EX_WINDOWEDGExxiv=1
WS_EX_TOOLWINDOWxxv=1
WS_EX_MDICHILADxxvi=1
WS_EX_TRANSPARENTxxvii=1
WS_EX_ACCEPTFILESxxviii=1
WS_EX_TOPMOSTxxix=1
WS_EX_NOPARENTNOTIFYxxx=1
WS_EX_DLGMODALFRAMExxxii=1
WS_EX_PALETTEWINDOWxxiv=1 And
xxv=1 And
xxix=1
WS_EX_OVERLAPPEDWINDOWxxiii=1 And
xxiv=1


මෙහි මීලග 4 bytes මගින් Window Styles පෙන්නුම් කෙරේ. එම Styles පහත ආකාරයට පෙන්නුම් කල හැක.
උදා:- Shell32.dll හි 1003 යන dialog එකෙහි Style එක 0x80C821CC ලෙස ඇත.


STYLE NAMEBIT #
WS_POPUPi=1 And
ii=0
WS_CHILDi=0 And
ii=1
WS_MINIMIZEiii=1
WS_VISIBLEiv=1
WS_DISABLEDv=1
WS_CLIPSIBLINGSvi=1
WS_CLIPCHILDRENvii=1
WS_MAXIMIZEviii=1
WS_BORDERix=1 And
x=0
WS_DLGFRAMEix=1 And
x=0
WS_CAPTIONix=1 And
x=1
WS_VSCROLLxi=1
WS_HSCROLLxii=1
WS_SYSMENUxiii=1
WS_THICKFRAMExiv=1
WS_MINIMIZEBOXxv=1
WS_MAXIMIZEBOXxvi=1
DS_CONTEXTHELPxix=1
DS_CENTERMOUSExx=1
DS_CENTERxxi=1
DS_CONTROLxxii=1
DS_SETFOREGROUNDxxiii=1
DS_NOIDLEMSGxxiv=1
DS_MODALFRAMExxv=1
DS_SETFONTxxvi=1
DS_LOCALEDITxxvii=1
DS_NOFAILCREATExxviii=1
DS_FIXEDSYSxxix=1
DS_SYSMDALxxxi=1
DS_ABSALIGNxxxii=1
WS_POPUPWINDOWi=1 And
ix=1 And
x=1 And
xiii=1
WS_TILEDWINDOWix=1 And
x=1 And
xiii=1 And
xiv=1 And
xv=1 And
xvi=1

මීලගට ඇති 2 bytes මගින් මෙම form එකෙහි ඇති objects ගණන දක්වා ඇත. මෙහි 0x0008 ලෙස ඇත. මීලග 2 bytes මගින් form එක පෙන්විය යුතු ස්ථානයේ X ඛන්ඩාංකය දක්වා ඇත. මෙහිදී 0x0000 වේ. මීලග 2 bytes මගින් Y ඛන්ඩාංකය දක්වා ඇත. මෙහිදී 0x0000 වේ. මීලග 2 bytes මගින් form එකෙහි width එකද ඊලග 2 bytes මගින් form එකෙහි height එකද දක්වා ඇත. මෙහිදී ඒවා 0x00E3 හා 0x005F ලෙස වේ. මීලග 2 bytes මගින් form එකට Main menu එකක් තිබේද යන වග පෙන්වයි. මෙහි අගය 0x0000 හෝ 0xFFFF නොවේ නම්, එහි ඇති අගය menu එකෙහි ID එක වේ. 0xFFFF ලෙස ඇත්නම් ඊලග 2 bytes මගින් menu ID එක පෙන්නුම් කරයි. මීලගට menu ID එක දැක්වූ ආකාරයටම class ID එක දක්වා ඇත. මෙහිදී බොහෝ විට 0x0000 ලෙස ඇත. මීලගට ඇත්තේ form එකෙහි caption එක වේ. මීලග 2 bytes මගින් form එකෙහි font size එක දක්වා ඇත. මීලග 2 bytes මගින් font weight එක දක්වා ඇත. මීලග 2 bytes මගින් italic ද යන වග දක්වා ඇත. එය 0x0001 ලෙස ඇත්නම් italic ද 0x0000 ලෙස ඇත්නම් italic නොවන බවද පෙන්නුම් කරයි. මීලගට ඇත්තේ font name එක වේ. මෙහි weight හා italic යන්න ඇත්තේ ExStyles ඇති forms වල පමණක් වේ.


මීලගට ඇත්තේ form එකෙහි objects පිළිබද විස්තර වේ. ඒවා array එකක් ලෙස ඇත. පළමුව object classes හදුනා ගනිමු.


ප්‍රධාන වශයෙන් classes වර්ග 6 ක් ඇත. එම classes හා ඒවාට අයත් objects පහත දක්වා ඇත.


මෙම සෑම object එකකම data ආරම්භ වනුයේ file offset එක 4 හි ගුණාකාරයක් වන ස්ථානයකිනි. එනම් මෙහි alignment එක 4 වේ. එක් object එකක් ගත් විට,

මෙහි පළමු 4 bytes මගින් ExStyles පෙන්නුම් කරයි. මෙය ExStyles ඇති forms වල පමණක් ඇත. ExStyles පහත ආකාර වේ.


STYLE NAMEBIT #
WS_EX_DLGMODALFRAMExxxii=1
WS_EX_CLIENTEDGExxiii=1
WS_EX_STATICEDGEv=1

තවද object එකෙහි class එක අනුව ExStlyes ඇත. ඒවා පහත දක්වා ඇත.

SysListView32
STYLE NAMEBIT #
LVS_EX_GRIDLINESxxxii=1
LVS_EX_SUBITEMIMAGESxxxi=1
LVS_EX_CHECKBOXESxxx=1
LVS_EX_TRACKSELECTxxix=1
LVS_EX_HEADERRAGDROPxxviii=1
LVS_EX_FULLROWSELECTxxvii=1
LVS_EX_ONECLICKACTIVATExxvi=1
LVS_EX_TWOCLICKACTIVATExxv=1

SysTabControl32
STYLE NAMEBIT #
TCS_EX_FLATSEPARATORSxxxii=1
TCS_EX_REGISTERDROPxxxi=1

RichEdit20A
STYLE NAMEBIT #
ES_EX_NOCALLOLEINITxxxii=1

ComboBoxEx32
STYLE NAMEBIT #
CBES_EX_NOEDITIMAGExxxii=1
CBES_EX_NOEDITIMAGEINDENTxxxi=1
CBES_EX_PATHWORDBREAKPROxxx=1
CBES_EX_NOSIZELIMITxxix=1
CBES_EX_CASESENSITIVExxviii=1

මීලග 4 bytes මගින් දක්වා ඇත්තේ Styles වේ. ඒවා පහත ආකාර වේ.

STYLE NAMEBIT #
WS_TABSTOPxvi=1
WS_GROUPxv=1
WS_HSCROLLxii=1
WS_VSCROLLxi=1
WS_BORDERix=1
WS_CLIPSBLINGSvi=1
WS_DISABLEDv=1
WS_VISIBLEiv=1
WS_CHILDii=1

මෙහිදීද object class එක අනුව styles දක්වනු ලැබේ.

BUTTON
අවසන් 4 bits හි අගය,
BS_PUSHBUTTON0
BS_DEEPUSHBUTTON1
BS_CHECKBOX2
BS_AUTOCHECKBOX3
BS_RADIOBUTTON4
BS_3STATE5
BS_AUTO3STATE6
BS_GROUPBOX7
BS_USERBUTTON8
BS_AUTORADIOBUTTON9
BS_OWNERDRAW11

STYLE NAMEBIT #
BS_LEFTTEXTxxvii=1
BS_ICONxxvi=1
BS_BITMAPxxv=1
BS_LEFTxxiv=1 And
xxiii=0
BS_RIGHTxxiv=0 And
xxiii=1
BS_CENTERxxiv=1 And
xxiii=1
BS_TOPxxiv=1 And
xxiii=0
BS_BOTTOMxxii=0 And
xxi=1
BS_VCENTERxxii=1 And
xxi=1
BS_PUSHLIKExx=1
BS_MULTILINExix=1
BS_NTIFYxviii=1
BS_FLATxvii=1

TEXT BOX
STYLE NAMEBIT #
ES_LEFTxxxii=0 And
xxxi=0
ES_CENTERxxxii=1 And
xxxi=0
ES_RIGHTxxxii=1 And
xxxi=1
ES_MULTILINExxx=1
ES_UPPERCASExxix=1
ES_LOWERCASExxviii=1
ES_PASSWORDxxvii=1
ES_AUTOVSCROLLxxvi=1
ES_AUTOHSCROLLxxv=1
ES_NOHIDESELxxiv=1
ES_OEMCONVERTxxiii=1
ES_READONLYxxii=1
ES_WANTRETURNxxi=1
ES_NUMBERxx=1

STATIC
අවසන් 4 bits හි අගය,
SS_LEFT0
SS_CENTER1
SS_RIGHT2
SS_ICON3
SS_BLACKRECT4
SS_GRAYRECT5
SS_WHITERECT6
SS_BLACKFRAME7
SS_GRAYFRAME8
SS_WHITEFRAME9
SS_USERITEM10
SS_SIMPLE11
SS_LEFTNOWORDWRAP12
SS_OWNERDRAW13
SS_BITMAP14
SS_ENHMETAFILE15

STYLE NAMEBIT #
SS_NOPREFIXxxv=1
SS_REALSIZEIMAGExxi=1
SS_RIGHTIMAGExxii=1
SS_CENTERIMAGExxiii=1
SS_NOTIFYxxiv=1
SS_WORDELLIPSISxvii=1 And
xviii=1
SS_PATHELLIPSISxvii=1 And
xviii=1
SS_ENDELLIPSISxvii=0 And
xviii=1
SS_SUNKENxx=1

LIST BOX
STYLE NAMEBIT #
LBS_NODATAxix=1
LBS_DISABLENOSCROLLxx=1
LBS_EXTENDEDSELxxi=1
LBS_WANTKEYBOARDINPUTxxii=1
LBS_MULTICOLUMNxxiii=1
LBS_NOINTEGRALHEIGHTxxiv=1
LBS_USETABSTOPSxxv=1
LBS_HASSTRINGSxxvi=1
LBS_OWNERDRAWVARIABLExxvii=1
LBS_OWNERDRAWFIXEDxxviii=1
LBS_MULTIPLESELxxix=1
LBS_NOREDRAWxxx=1
LBS_SORTxxxi=1
LBS_NOTIFYxxxii=1

SCROLLBAR
STYLE NAMEBIT #
SBS_SIZEGRIPxxviii=1
SBS_SIZEBOXxxix=1
SBS_BOTTOMALIGNxxx=1
SBS_RIGHTALIGN
SBS_SIZEBOXBOTTOMRIGHTALIGN
SBS_TOPALIGN
SBS_LEFTALIGN
SBS_SIZEBOXTOPLEFTALIGN
xxxi=1
SBS_HORZxxxii=0
SBS_VERTxxxii=1

අදට ලියල ඉවරයි. මේ කොටසේ තව ලියන්න තියෙනවා. මීලග කොටසින් ඒ ටික ලියනවා.