Autoit Res Hacker

    • Autoit Res Hacker



      مشروع يقوم بعملية تحديث لبيانات Resource بملفات البرامج التنفيذية بنفس طريقة
      البرنامج الشهير ResHacker.exe كما يمكن البحث و التحميل كذالك في بيانات
      Resource معلومات أكثر حول هذه العملية من موقع ميكروسوفت من هذا الرابط
      موقع ResHacker
      angusj.com/resourcehacker/

      رابط ميكروسوفت
      Peering Inside the PE: A Tour of the Win32 Portable Executable File Format
      msdn.microsoft.com/en-us/library/ms809762.aspx

      المشروع مصمم على لغة autoitscript لعدم إمكانية تحديث ملفات هذه اللغة بواظائف Resource
      المتعارف عليها وذالك لوجود بيانات إظافية بالملف التفيذي الناتج من برنامج Compiling اللغة
      Compiling Scripts with Aut2Exe و هي بيانات مشفرة لكود Scripts اللغة مضاف في
      أخر الملف و خارج عن SizeOfImage حجم الأمج للملف التفيذي EXE

      لمن يريد تجربة عمليات المشروع عليه أولا تنصيب مترجم اللغة Autoit من هذا الرابط
      autoitscript.com/cgi-bin/getfi…toit3/autoit-v3-setup.exe

      أو من صفحة إنزال المترجم من هنا
      autoitscript.com/autoit3/downloads.shtml

      المشروع كامل على المرفقات

      وهذا كود لسكربتات المشروع

      AutoitResHacker.au3

      كود المصدر

      1. #Include <WinAPI.au3>
      2. Func FindResourceExW($sFileName,$ResType,$ResName,$ResLang)
      3. $ImageArray = FileToImageArray($sFileName)
      4. if Not IsArray($ImageArray) Then Return 0
      5. $hFile = $ImageArray[0][0]
      6. $ResStartPos = $ImageArray[3][0]
      7. $PosOfResRawData = $ImageArray[7][0]
      8. $OffsetToDir = 0
      9. $OffsetToDir = GetRes_DirEntry($hFile,$PosOfResRawData ,$OffsetToDir,$ResType)
      10. if Not($OffsetToDir) Then Return 0
      11. $OffsetToDir = GetRes_DirEntry($hFile,$PosOfResRawData,$OffsetToDir,$ResName)
      12. if Not($OffsetToDir) Then Return 0
      13. $OffsetToDir = GetRes_DirEntry($hFile,$PosOfResRawData,$OffsetToDir,$ResLang)
      14. if Not($OffsetToDir) Then Return 0
      15. $IMAGE_RESOURCE_DATA_ENTRY = _
      16. READ_IMAGE_RES_DAT($hFile,$PosOfResRawData,$OffsetToDir)
      17. $DataLangOffsetToData = DllStructGetData($IMAGE_RESOURCE_DATA_ENTRY,"OffsetToData")
      18. $DataLangDataSize = DllStructGetData($IMAGE_RESOURCE_DATA_ENTRY,"Size")
      19. if Not($DataLangOffsetToData) Then Return 0
      20. $HandFindRes = DllStructCreate("hwnd;int;int;int;int")
      21. DllStructSetData($HandFindRes,1,$hFile)
      22. DllStructSetData($HandFindRes,2,$ResStartPos)
      23. DllStructSetData($HandFindRes,3,$DataLangOffsetToData)
      24. DllStructSetData($HandFindRes,4,$DataLangDataSize)
      25. DllStructSetData($HandFindRes,5,$PosOfResRawData)
      26. Return $HandFindRes
      27. EndFunc
      28. Func LoadResource($HandFindRes)
      29. if Not IsDllStruct($HandFindRes) Then Return -1
      30. $hFile = DllStructGetData($HandFindRes,1)
      31. if Not ($hFile) Then Return -2
      32. $ResStartPos = DllStructGetData($HandFindRes,2)
      33. $DataLangOffsetToData = DllStructGetData($HandFindRes,3)
      34. $DataLangDataSize = DllStructGetData($HandFindRes,4)
      35. $PosOfResRawData = DllStructGetData($HandFindRes,5)
      36. if ($DataLangOffsetToData - $ResStartPos) <= 0 Then _
      37. Return MsgBox(0,"", _
      38. "Compressor Resource")
      39. $DataPos = $PosOfResRawData + ($DataLangOffsetToData - $ResStartPos)
      40. $LoadRes = READ_Data($hFile,$DataPos,$DataLangDataSize)
      41. Return $LoadRes
      42. EndFunc
      43. Func SizeofResource($HandFindRes)
      44. if Not IsDllStruct($HandFindRes) Then Return -1
      45. $hFile = DllStructGetData($HandFindRes,1)
      46. if Not ($hFile) Then Return -2
      47. $DataLangDataSize = DllStructGetData($HandFindRes,4)
      48. Return $DataLangDataSize
      49. EndFunc
      50. Func LockResource($LoadRes)
      51. if Not IsDllStruct($LoadRes) Then Return -1
      52. Return DllStructGetPtr($LoadRes)
      53. EndFunc
      54. Func FindRes_CloseHandle($HandFindRes)
      55. if Not IsDllStruct($HandFindRes) Then Return -1
      56. $hFile = DllStructGetData($HandFindRes,1)
      57. if Not ($hFile) Then Return -2
      58. _WinAPI_CloseHandle($hFile)
      59. EndFunc
      60. Func GetRes_DirEntry($hFile,$PosOfResRawData,$OffsetToDir,$FindName)
      61. $IMAGE_RESOURCE_DIRECTORY = _
      62. READ_IMAGE_RES_DIR($hFile,$PosOfResRawData,$OffsetToDir)
      63. $Entries = DllStructGetData($IMAGE_RESOURCE_DIRECTORY,"NumberOfIdEntries") _
      64. + DllStructGetData($IMAGE_RESOURCE_DIRECTORY,"NumberOfNamedEntries")
      65. if IsInt($FindName) Then
      66. For $j = 0 To $Entries - 1
      67. $IMAGE_RESOURCE_DIRECTORY_ENTRY = _
      68. READ_IMAGE_RES_ENT($hFile,$PosOfResRawData,$OffsetToDir + (16 + ($j * 8)))
      69. $Name = DllStructGetData($IMAGE_RESOURCE_DIRECTORY_ENTRY,"Name")
      70. $OffsetToData = DllStructGetData($IMAGE_RESOURCE_DIRECTORY_ENTRY,"OffsetToData")
      71. if $Name <> $FindName Or NameIsString($Name) Then ContinueLoop
      72. $OffsetToDir = OffsetToDirectory($OffsetToData)
      73. Return $OffsetToDir
      74. Next
      75. Else
      76. For $j = 0 To $Entries - 1
      77. $IMAGE_RESOURCE_DIRECTORY_ENTRY = _
      78. READ_IMAGE_RES_ENT($hFile,$PosOfResRawData,$OffsetToDir + (16 + ($j * 8)))
      79. $Name = DllStructGetData($IMAGE_RESOURCE_DIRECTORY_ENTRY,"Name")
      80. if Not NameIsString($Name) Then ContinueLoop
      81. $OffsetToData = DllStructGetData($IMAGE_RESOURCE_DIRECTORY_ENTRY,"OffsetToData")
      82. $NameString = _
      83. ReadStringName($Name,$hFile,$PosOfResRawData)
      84. if StringCompare($NameString,$FindName) _
      85. <> 0 Then ContinueLoop
      86. $OffsetToDir = OffsetToDirectory($OffsetToData)
      87. Return $OffsetToDir
      88. Next
      89. EndIf
      90. Return 0
      91. EndFunc
      92. Func ResourceList($sFileName)
      93. $ImageArray = FileToImageArray($sFileName)
      94. if Not IsArray($ImageArray) Then Return 0
      95. $hFile = $ImageArray[0][0]
      96. $ResStartPos = $ImageArray[3][0]
      97. $PosOfResRawData = $ImageArray[7][0]
      98. $IMAGE_RESOURCE_DIRECTORY = _
      99. READ_IMAGE_RES_DIR($hFile,$PosOfResRawData,0)
      100. $Entries = DllStructGetData($IMAGE_RESOURCE_DIRECTORY,"NumberOfIdEntries") _
      101. + DllStructGetData($IMAGE_RESOURCE_DIRECTORY,"NumberOfNamedEntries")
      102. $PIMAGE_RESOURCE_DIRECTORY = DllStructGetPtr($IMAGE_RESOURCE_DIRECTORY)
      103. Local $RtArray[2][12] , $TestTypeChange = False , $TestLangChange = False _
      104. , $TestNameChange = False ,$D = 0 ,$E = 0 , $F = 0 , $G = 0 , $H = 0 , $J = 0 , $K = 0 _
      105. , $L = 0 , $iTestNameChange = "" , $iTestTypeChange = "" , $iTestLangChange , $ALLSize
      106. For $A = 0 To $Entries - 1
      107. $Type_IMAGE_RESOURCE_DIRECTORY_ENTRY = _
      108. READ_IMAGE_RES_ENT($hFile,$PosOfResRawData,(16 + ($A * 8)))
      109. $PType_IMAGE_RESOURCE_DIRECTORY_ENTRY = DllStructGetPtr($Type_IMAGE_RESOURCE_DIRECTORY_ENTRY)
      110. $TypeName = DllStructGetData($Type_IMAGE_RESOURCE_DIRECTORY_ENTRY,"Name")
      111. if NameIsString($TypeName) Then $TypeName = ReadStringName($TypeName,$hFile,$PosOfResRawData)
      112. $TypeOffsetToData = DllStructGetData($Type_IMAGE_RESOURCE_DIRECTORY_ENTRY,"OffsetToData")
      113. $TypeOffsetToDirectory = OffsetToDirectory($TypeOffsetToData)
      114. $NameIMAGE_RESOURCE_DIRECTORY = _
      115. READ_IMAGE_RES_DIR($hFile,$PosOfResRawData,$TypeOffsetToDirectory)
      116. $NameEntries = DllStructGetData($NameIMAGE_RESOURCE_DIRECTORY,"NumberOfIdEntries") _
      117. + DllStructGetData($NameIMAGE_RESOURCE_DIRECTORY,"NumberOfNamedEntries")
      118. $ImgResDir = DllStructGetPtr($NameIMAGE_RESOURCE_DIRECTORY)
      119. $OUT_PIMAGE_RES_DIR2 = $ImgResDir
      120. For $B = 0 To $NameEntries - 1
      121. $Name_IMAGE_RESOURCE_DIRECTORY_ENTRY = _
      122. READ_IMAGE_RES_ENT($hFile,$PosOfResRawData ,$TypeOffsetToDirectory + (16 + ($B * 8)))
      123. $PName_IMAGE_RESOURCE_DIRECTORY_ENTRY = DllStructGetPtr($Name_IMAGE_RESOURCE_DIRECTORY_ENTRY)
      124. $NameName = DllStructGetData($Name_IMAGE_RESOURCE_DIRECTORY_ENTRY,"Name")
      125. if NameIsString($NameName) Then $NameName = ReadStringName($NameName,$hFile,$PosOfResRawData)
      126. $NameOffsetToData = DllStructGetData($Name_IMAGE_RESOURCE_DIRECTORY_ENTRY,"OffsetToData")
      127. $NameOffsetToDirectory = OffsetToDirectory($NameOffsetToData)
      128. $LangIMAGE_RESOURCE_DIRECTORY = _
      129. READ_IMAGE_RES_DIR($hFile,$PosOfResRawData,$NameOffsetToDirectory)
      130. $LangEntries = DllStructGetData($LangIMAGE_RESOURCE_DIRECTORY,"NumberOfIdEntries") _
      131. + DllStructGetData($LangIMAGE_RESOURCE_DIRECTORY,"NumberOfLangdEntries")
      132. $ImgResDir = DllStructGetPtr($LangIMAGE_RESOURCE_DIRECTORY)
      133. $OUT_PIMAGE_RES_DIR4 = $ImgResDir
      134. For $C = 0 To $LangEntries - 1
      135. $Lang_IMAGE_RESOURCE_DIRECTORY_ENTRY = _
      136. READ_IMAGE_RES_ENT($hFile,$PosOfResRawData ,$NameOffsetToDirectory + (16 + ($C * 8)))
      137. $PLang_IMAGE_RESOURCE_DIRECTORY_ENTRY = DllStructGetPtr($Lang_IMAGE_RESOURCE_DIRECTORY_ENTRY)
      138. $LangName = DllStructGetData($Lang_IMAGE_RESOURCE_DIRECTORY_ENTRY,"Name")
      139. if NameIsString($LangName) Then $LangName = ReadStringName($LangName,$hFile,$PosOfResRawData)
      140. $LangOffsetToData = DllStructGetData($Lang_IMAGE_RESOURCE_DIRECTORY_ENTRY,"OffsetToData")
      141. $LangOffsetToDirectory = OffsetToDirectory($LangOffsetToData)
      142. $IMAGE_RESOURCE_DATA_ENTRY = _
      143. READ_IMAGE_RES_DAT($hFile,$PosOfResRawData , $LangOffsetToDirectory)
      144. $DataLangOffsetToData = DllStructGetData($IMAGE_RESOURCE_DATA_ENTRY,"OffsetToData")
      145. $DataLangDataSize = DllStructGetData($IMAGE_RESOURCE_DATA_ENTRY,"Size")
      146. $RtArray[0][0] = "TypeName"
      147. $RtArray[0][1] = "NameName"
      148. $RtArray[0][2] = "LangName"
      149. $RtArray[0][3] = "Size Of Res"
      150. $RtArray[0][4] = "OffsetToData In File"
      151. $RtArray[0][5] = "IsCompressorRes"
      152. $RtArray[0][6] = "TypeName IsString"
      153. $RtArray[0][7] = "NameName IsString"
      154. $RtArray[0][8] = "LangName IsString"
      155. $RtArray[0][9] = "TypeName IsInt"
      156. $RtArray[0][10] = "NameName IsInt"
      157. $RtArray[0][11] = "LangName IsInt"
      158. $RtArray[UBound($RtArray) - 1][0] = $TypeName
      159. $RtArray[UBound($RtArray) - 1][1] = $NameName
      160. $RtArray[UBound($RtArray) - 1][2] = $LangName
      161. $RtArray[UBound($RtArray) - 1][3] = $DataLangDataSize
      162. if ($DataLangOffsetToData - $ResStartPos) > 0 Then _
      163. $RtArray[UBound($RtArray) - 1][4] = $PosOfResRawData + ($DataLangOffsetToData - $ResStartPos)
      164. $RtArray[UBound($RtArray) - 1][5] = ($DataLangOffsetToData - $ResStartPos) <= 0
      165. $RtArray[UBound($RtArray) - 1][6] = IsString($TypeName)
      166. $RtArray[UBound($RtArray) - 1][7] = IsString($NameName)
      167. $RtArray[UBound($RtArray) - 1][8] = IsString($LangName)
      168. $RtArray[UBound($RtArray) - 1][9] = IsInt($TypeName)
      169. $RtArray[UBound($RtArray) - 1][10] = IsInt($NameName)
      170. $RtArray[UBound($RtArray) - 1][11] = IsInt($LangName)
      171. ReDim $RtArray[UBound($RtArray) + 1][12]
      172. Next
      173. Next
      174. Next
      175. ReDim $RtArray[UBound($RtArray) - 1][12]
      176. _WinAPI_CloseHandle($hFile)
      177. Return $RtArray
      178. EndFunc
      179. Func BeginUpdateResource($pFileName,$OutFile = "OutFile.exe")
      180. if ($pFileName == $OutFile) Then Return 0
      181. $ImageArray = FileToImageArray($pFileName)
      182. if Not IsArray($ImageArray) Then Return $ImageArray
      183. $ImageArray = RESOURCE_DIRECTORY_TO_ARRAY($ImageArray)
      184. if Not IsArray($ImageArray) Then Return $ImageArray
      185. ReDim $ImageArray[12][2]
      186. $ImageArray[11][0] = $OutFile
      187. $ImageArray[11][1] = "OutFile"
      188. Return $ImageArray
      189. EndFunc
      190. Func UpdateResource($ImageArray,$lpType,$lpName,$wLanguage,$Data_Ptr,$Data_Size)
      191. Local $SizeStrlpType = 0 , $SizeStrlpName = 0 , $TestType = False , _
      192. $TestLang = False , $TestName = False , $TestTypeChange = False , $A = "" _
      193. , $B = "", $C = "" , $D = "", $E = "", $F = "" , $G = "" , $H = "", $nBytes , _
      194. $OF_READWRITE = 0x00000002 , $OF_CREATE = 0x00001000
      195. if Not IsArray($ImageArray) Then Return -1
      196. if Not IsInt($wLanguage) Then Return -2
      197. if Not IsPtr($Data_Ptr) Then Return -3
      198. if $lpType == "" Or $lpName == "" Then Return -4
      199. if IsString($lpType) Then $lpType = StringUpper($lpType)
      200. if IsString($lpName) Then $lpName = StringUpper($lpName)
      201. $RtArray = $ImageArray[10][0]
      202. if Not($RtArray[0][16]) Then
      203. $TempFile = @TempDir & "\~Res.res"
      204. if Not FileExists(@TempDir) Then $TempFile = @ScriptDir & "\~Res.res"
      205. $RtArray[0][16] = $TempFile
      206. Else
      207. $TempFile = $RtArray[0][16]
      208. EndIf
      209. $DataStruct = DllStructCreate("char[' & $Data_Size & ']",$Data_Ptr)
      210. $Data_Ptr = DllStructGetPtr($DataStruct)
      211. $Data_Size = DllStructGetSize($DataStruct)
      212. if Not($RtArray[0][17]) Then
      213. $hTempFile = WINAPIOpenFile($TempFile,$OF_CREATE + $OF_READWRITE)
      214. $RtArray[0][17] = $hTempFile
      215. $RtArray[0][18] = 0
      216. Else
      217. $hTempFile = $RtArray[0][17]
      218. EndIf
      219. $MovePos = $RtArray[0][18]
      220. WRITE_Data($hTempFile,$MovePos,$DataStruct)
      221. For $i = 0 To UBound($RtArray) - 1
      222. $TypeName = $RtArray[$i][0]
      223. $NameName = $RtArray[$i][1]
      224. $LangName = $RtArray[$i][2]
      225. if $lpType < $TypeName And $A == "" Then $A = $i
      226. if $lpType == $TypeName Then
      227. $TestType = True
      228. $G = $i
      229. if $B == "" Then $B = $i
      230. if $lpName < $NameName And $C == "" Then $C = $i
      231. if $lpName == $NameName Then
      232. $TestName = True
      233. if $D == "" Then $D = $i
      234. if $wLanguage < $LangName And $E == "" Then $E = $i
      235. if $wLanguage == $LangName Then
      236. if $F == "" Then $F = $i
      237. $TestLang = True
      238. Else
      239. ContinueLoop
      240. EndIf
      241. Else
      242. ContinueLoop
      243. EndIf
      244. Else
      245. ContinueLoop
      246. EndIf
      247. Next
      248. if $TestType = True And $TestName = True And $TestLang = True Then
      249. $RtArray[$F][3] = $Data_Size
      250. $RtArray[$F][15] = True
      251. $RtArray[$F][19] = $RtArray[0][18]
      252. EndIf
      253. if $TestType = False And $TestName = False And $TestLang = False Then
      254. if $A == "" Then
      255. ReDim $RtArray[UBound($RtArray) + 1][20]
      256. $RtArray[UBound($RtArray) - 1][0] = $lpType
      257. $RtArray[UBound($RtArray) - 1][1] = $lpName
      258. $RtArray[UBound($RtArray) - 1][2] = $wLanguage
      259. $RtArray[UBound($RtArray) - 1][3] = $Data_Size
      260. $RtArray[UBound($RtArray) - 1][4] = True
      261. $RtArray[UBound($RtArray) - 1][5] = True
      262. $RtArray[UBound($RtArray) - 1][6] = True
      263. $RtArray[UBound($RtArray) - 1][7] = 0
      264. $RtArray[UBound($RtArray) - 1][15] = True
      265. $RtArray[UBound($RtArray) - 1][19] = $RtArray[0][18]
      266. if IsInt($lpType) Then
      267. $RtArray[0][8] += 1
      268. if $RtArray[0][9] == "" Then $RtArray[0][9] = 0
      269. Else
      270. $RtArray[0][9] += 1
      271. if $RtArray[0][8] == "" Then $RtArray[0][8] = 0
      272. EndIf
      273. if IsString($lpName) Then
      274. $RtArray[UBound($RtArray) - 1][10] = 1
      275. $RtArray[UBound($RtArray) - 1][11] = 0
      276. Else
      277. $RtArray[UBound($RtArray) - 1][11] = 1
      278. $RtArray[UBound($RtArray) - 1][10] = 0
      279. EndIf
      280. $RtArray[UBound($RtArray) - 1][12] = 0
      281. $RtArray[UBound($RtArray) - 1][13] = 1
      282. Else
      283. Dim $OuArray[1][20]
      284. For $i = 0 To UBound($RtArray) - 1
      285. if $i = $A Then
      286. $OuArray[UBound($OuArray) - 1][0] = $lpType
      287. $OuArray[UBound($OuArray) - 1][1] = $lpName
      288. $OuArray[UBound($OuArray) - 1][2] = $wLanguage
      289. $OuArray[UBound($OuArray) - 1][3] = $Data_Size
      290. $OuArray[UBound($OuArray) - 1][4] = True
      291. $OuArray[UBound($OuArray) - 1][5] = True
      292. $OuArray[UBound($OuArray) - 1][6] = True
      293. $OuArray[UBound($OuArray) - 1][7] = 0
      294. $OuArray[UBound($OuArray) - 1][8] = $RtArray[$i][8]
      295. $OuArray[UBound($OuArray) - 1][9] = $RtArray[$i][9]
      296. $OuArray[UBound($OuArray) - 1][10] = $RtArray[$i][10]
      297. $OuArray[UBound($OuArray) - 1][11] = $RtArray[$i][11]
      298. $OuArray[UBound($OuArray) - 1][12] = $RtArray[$i][12]
      299. $OuArray[UBound($OuArray) - 1][13] = $RtArray[$i][13]
      300. $OuArray[UBound($OuArray) - 1][14] = $RtArray[$i][14]
      301. $OuArray[UBound($OuArray) - 1][15] = True
      302. $OuArray[UBound($OuArray) - 1][16] = $RtArray[$i][16]
      303. $OuArray[UBound($OuArray) - 1][17] = $RtArray[$i][17]
      304. $OuArray[UBound($OuArray) - 1][18] = $RtArray[$i][18]
      305. $OuArray[UBound($OuArray) - 1][19] = $RtArray[$i][18]
      306. if IsInt($lpType) Then
      307. $OuArray[0][8] += 1
      308. if $OuArray[0][9] == "" Then $OuArray[0][9] = 0
      309. Else
      310. $OuArray[0][9] += 1
      311. if $OuArray[0][8] == "" Then $OuArray[0][8] = 0
      312. EndIf
      313. if IsString($lpName) Then
      314. $OuArray[UBound($OuArray) - 1][10] = 1
      315. $OuArray[UBound($OuArray) - 1][11] = 0
      316. Else
      317. $OuArray[UBound($OuArray) - 1][11] = 1
      318. $OuArray[UBound($OuArray) - 1][10] = 0
      319. EndIf
      320. $OuArray[UBound($OuArray) - 1][12] = 0
      321. $OuArray[UBound($OuArray) - 1][13] = 1
      322. ReDim $OuArray[UBound($OuArray) + 1][20]
      323. EndIf
      324. $OuArray[UBound($OuArray) - 1][0] = $RtArray[$i][0]
      325. $OuArray[UBound($OuArray) - 1][1] = $RtArray[$i][1]
      326. $OuArray[UBound($OuArray) - 1][2] = $RtArray[$i][2]
      327. $OuArray[UBound($OuArray) - 1][3] = $RtArray[$i][3]
      328. $OuArray[UBound($OuArray) - 1][4] = $RtArray[$i][4]
      329. $OuArray[UBound($OuArray) - 1][5] = $RtArray[$i][5]
      330. $OuArray[UBound($OuArray) - 1][6] = $RtArray[$i][6]
      331. $OuArray[UBound($OuArray) - 1][7] = $RtArray[$i][7]
      332. $OuArray[UBound($OuArray) - 1][8] = $RtArray[$i][8]
      333. $OuArray[UBound($OuArray) - 1][9] = $RtArray[$i][9]
      334. $OuArray[UBound($OuArray) - 1][10] = $RtArray[$i][10]
      335. $OuArray[UBound($OuArray) - 1][11] = $RtArray[$i][11]
      336. $OuArray[UBound($OuArray) - 1][12] = $RtArray[$i][12]
      337. $OuArray[UBound($OuArray) - 1][13] = $RtArray[$i][13]
      338. $OuArray[UBound($OuArray) - 1][14] = $RtArray[$i][14]
      339. $OuArray[UBound($OuArray) - 1][15] = $RtArray[$i][15]
      340. $OuArray[UBound($OuArray) - 1][16] = $RtArray[$i][16]
      341. $OuArray[UBound($OuArray) - 1][17] = $RtArray[$i][17]
      342. $OuArray[UBound($OuArray) - 1][18] = $RtArray[$i][18]
      343. $OuArray[UBound($OuArray) - 1][19] = $RtArray[$i][19]
      344. ReDim $OuArray[UBound($OuArray) + 1][20]
      345. Next
      346. ReDim $OuArray[UBound($OuArray) - 1][20]
      347. $RtArray = $OuArray
      348. EndIf
      349. EndIf
      350. if $TestType = True And $TestName = False And $TestLang = False Then
      351. Dim $OuArray[1][20]
      352. if $C == "" Then
      353. For $i = 0 To UBound($RtArray) - 1
      354. if $i = 0 Then
      355. if IsString($lpName) Then
      356. $RtArray[$B][10] += 1
      357. if $RtArray[$B][11] == "" Then _
      358. $RtArray[$B][11] = 0
      359. Else
      360. $RtArray[$B][11] += 1
      361. if $RtArray[$B][10] == "" Then _
      362. $RtArray[$B][10] = 0
      363. EndIf
      364. $RtArray[UBound($RtArray) - 1][12] = 0
      365. $RtArray[UBound($RtArray) - 1][13] = 1
      366. EndIf
      367. $OuArray[UBound($OuArray) - 1][0] = $RtArray[$i][0]
      368. $OuArray[UBound($OuArray) - 1][1] = $RtArray[$i][1]
      369. $OuArray[UBound($OuArray) - 1][2] = $RtArray[$i][2]
      370. $OuArray[UBound($OuArray) - 1][3] = $RtArray[$i][3]
      371. $OuArray[UBound($OuArray) - 1][4] = $RtArray[$i][4]
      372. $OuArray[UBound($OuArray) - 1][5] = $RtArray[$i][5]
      373. $OuArray[UBound($OuArray) - 1][6] = $RtArray[$i][6]
      374. $OuArray[UBound($OuArray) - 1][7] = $RtArray[$i][7]
      375. $OuArray[UBound($OuArray) - 1][8] = $RtArray[$i][8]
      376. $OuArray[UBound($OuArray) - 1][9] = $RtArray[$i][9]
      377. $OuArray[UBound($OuArray) - 1][10] = $RtArray[$i][10]
      378. $OuArray[UBound($OuArray) - 1][11] = $RtArray[$i][11]
      379. $OuArray[UBound($OuArray) - 1][12] = $RtArray[$i][12]
      380. $OuArray[UBound($OuArray) - 1][13] = $RtArray[$i][13]
      381. $OuArray[UBound($OuArray) - 1][14] = $RtArray[$i][14]
      382. $OuArray[UBound($OuArray) - 1][15] = $RtArray[$i][15]
      383. $OuArray[UBound($OuArray) - 1][16] = $RtArray[$i][16]
      384. $OuArray[UBound($OuArray) - 1][17] = $RtArray[$i][17]
      385. $OuArray[UBound($OuArray) - 1][18] = $RtArray[$i][18]
      386. $OuArray[UBound($OuArray) - 1][19] = $RtArray[$i][19]
      387. if $OuArray[UBound($OuArray) - 1][4] = False Then
      388. $OuArray[UBound($OuArray) - 1][10] = 0
      389. $OuArray[UBound($OuArray) - 1][11] = 0
      390. EndIf
      391. ReDim $OuArray[UBound($OuArray) + 1][20]
      392. if $i = $G Then
      393. $OuArray[UBound($OuArray) - 1][0] = $lpType
      394. $OuArray[UBound($OuArray) - 1][1] = $lpName
      395. $OuArray[UBound($OuArray) - 1][2] = $wLanguage
      396. $OuArray[UBound($OuArray) - 1][3] = $Data_Size
      397. $OuArray[UBound($OuArray) - 1][4] = False
      398. $OuArray[UBound($OuArray) - 1][5] = True
      399. $OuArray[UBound($OuArray) - 1][6] = True
      400. $OuArray[UBound($OuArray) - 1][7] = 0
      401. $OuArray[UBound($OuArray) - 1][8] = $RtArray[$i][8]
      402. $OuArray[UBound($OuArray) - 1][9] = $RtArray[$i][9]
      403. $OuArray[UBound($OuArray) - 1][10] = $RtArray[$i][10]
      404. $OuArray[UBound($OuArray) - 1][11] = $RtArray[$i][11]
      405. $OuArray[UBound($OuArray) - 1][12] = $RtArray[$i][12]
      406. $OuArray[UBound($OuArray) - 1][13] = $RtArray[$i][13]
      407. $OuArray[UBound($OuArray) - 1][14] = $RtArray[$i][14]
      408. $OuArray[UBound($OuArray) - 1][15] = True
      409. $OuArray[UBound($OuArray) - 1][16] = $RtArray[$i][16]
      410. $OuArray[UBound($OuArray) - 1][17] = $RtArray[$i][17]
      411. $OuArray[UBound($OuArray) - 1][18] = $RtArray[$i][18]
      412. $OuArray[UBound($OuArray) - 1][19] = $RtArray[$i][18]
      413. if $OuArray[UBound($OuArray) - 1][4] = False Then
      414. $OuArray[UBound($OuArray) - 1][10] = 0
      415. $OuArray[UBound($OuArray) - 1][11] = 0
      416. EndIf
      417. ReDim $OuArray[UBound($OuArray) + 1][20]
      418. EndIf
      419. Next
      420. Else
      421. For $i = 0 To UBound($RtArray) - 1
      422. if $i = 0 Then
      423. if IsString($lpName) Then
      424. $RtArray[$B][10] += 1
      425. if $RtArray[$B][11] == "" Then _
      426. $RtArray[$B][11] = 0
      427. Else
      428. $RtArray[$B][11] += 1
      429. if $RtArray[$B][10] == "" Then _
      430. $RtArray[$B][10] = 0
      431. EndIf
      432. $RtArray[UBound($RtArray) - 1][12] = 0
      433. $RtArray[UBound($RtArray) - 1][13] = 1
      434. EndIf
      435. if $i = $C Then
      436. $OuArray[UBound($OuArray) - 1][0] = $lpType
      437. $OuArray[UBound($OuArray) - 1][1] = $lpName
      438. $OuArray[UBound($OuArray) - 1][2] = $wLanguage
      439. $OuArray[UBound($OuArray) - 1][3] = $Data_Size
      440. $OuArray[UBound($OuArray) - 1][4] = False
      441. $OuArray[UBound($OuArray) - 1][5] = True
      442. $OuArray[UBound($OuArray) - 1][6] = True
      443. $OuArray[UBound($OuArray) - 1][7] = 0
      444. $OuArray[UBound($OuArray) - 1][8] = $RtArray[$i][8]
      445. $OuArray[UBound($OuArray) - 1][9] = $RtArray[$i][9]
      446. $OuArray[UBound($OuArray) - 1][10] = $RtArray[$i][10]
      447. $OuArray[UBound($OuArray) - 1][11] = $RtArray[$i][11]
      448. $OuArray[UBound($OuArray) - 1][12] = $RtArray[$i][12]
      449. $OuArray[UBound($OuArray) - 1][13] = $RtArray[$i][13]
      450. $OuArray[UBound($OuArray) - 1][14] = $RtArray[$i][14]
      451. $OuArray[UBound($OuArray) - 1][15] = True
      452. $OuArray[UBound($OuArray) - 1][16] = $RtArray[$i][16]
      453. $OuArray[UBound($OuArray) - 1][17] = $RtArray[$i][17]
      454. $OuArray[UBound($OuArray) - 1][18] = $RtArray[$i][18]
      455. $OuArray[UBound($OuArray) - 1][19] = $RtArray[$i][18]
      456. if $OuArray[UBound($OuArray) - 1][4] = False Then
      457. $OuArray[UBound($OuArray) - 1][10] = 0
      458. $OuArray[UBound($OuArray) - 1][11] = 0
      459. EndIf
      460. ReDim $OuArray[UBound($OuArray) + 1][20]
      461. EndIf
      462. $OuArray[UBound($OuArray) - 1][0] = $RtArray[$i][0]
      463. $OuArray[UBound($OuArray) - 1][1] = $RtArray[$i][1]
      464. $OuArray[UBound($OuArray) - 1][2] = $RtArray[$i][2]
      465. $OuArray[UBound($OuArray) - 1][3] = $RtArray[$i][3]
      466. $OuArray[UBound($OuArray) - 1][4] = $RtArray[$i][4]
      467. $OuArray[UBound($OuArray) - 1][5] = $RtArray[$i][5]
      468. $OuArray[UBound($OuArray) - 1][6] = $RtArray[$i][6]
      469. $OuArray[UBound($OuArray) - 1][7] = $RtArray[$i][7]
      470. $OuArray[UBound($OuArray) - 1][8] = $RtArray[$i][8]
      471. $OuArray[UBound($OuArray) - 1][9] = $RtArray[$i][9]
      472. $OuArray[UBound($OuArray) - 1][10] = $RtArray[$i][10]
      473. $OuArray[UBound($OuArray) - 1][11] = $RtArray[$i][11]
      474. $OuArray[UBound($OuArray) - 1][12] = $RtArray[$i][12]
      475. $OuArray[UBound($OuArray) - 1][13] = $RtArray[$i][13]
      476. $OuArray[UBound($OuArray) - 1][14] = $RtArray[$i][14]
      477. $OuArray[UBound($OuArray) - 1][15] = $RtArray[$i][15]
      478. $OuArray[UBound($OuArray) - 1][16] = $RtArray[$i][16]
      479. $OuArray[UBound($OuArray) - 1][17] = $RtArray[$i][17]
      480. $OuArray[UBound($OuArray) - 1][18] = $RtArray[$i][18]
      481. $OuArray[UBound($OuArray) - 1][19] = $RtArray[$i][19]
      482. if $OuArray[UBound($OuArray) - 1][4] = False Then
      483. $OuArray[UBound($OuArray) - 1][10] = 0
      484. $OuArray[UBound($OuArray) - 1][11] = 0
      485. EndIf
      486. ReDim $OuArray[UBound($OuArray) + 1][20]
      487. Next
      488. EndIf
      489. ReDim $OuArray[UBound($OuArray) - 1][20]
      490. $RtArray = $OuArray
      491. EndIf
      492. if $TestType = True And $TestName = True And $TestLang = False Then
      493. Dim $OuArray[1][20]
      494. if $E == "" Then
      495. For $i = 0 To UBound($RtArray) - 1
      496. if $i = 0 Then
      497. $RtArray[$D][12] = 0
      498. $RtArray[$D][13] += 1
      499. EndIf
      500. $OuArray[UBound($OuArray) - 1][0] = $RtArray[$i][0]
      501. $OuArray[UBound($OuArray) - 1][1] = $RtArray[$i][1]
      502. $OuArray[UBound($OuArray) - 1][2] = $RtArray[$i][2]
      503. $OuArray[UBound($OuArray) - 1][3] = $RtArray[$i][3]
      504. $OuArray[UBound($OuArray) - 1][4] = $RtArray[$i][4]
      505. $OuArray[UBound($OuArray) - 1][5] = $RtArray[$i][5]
      506. $OuArray[UBound($OuArray) - 1][6] = $RtArray[$i][6]
      507. $OuArray[UBound($OuArray) - 1][7] = $RtArray[$i][7]
      508. $OuArray[UBound($OuArray) - 1][8] = $RtArray[$i][8]
      509. $OuArray[UBound($OuArray) - 1][9] = $RtArray[$i][9]
      510. $OuArray[UBound($OuArray) - 1][10] = $RtArray[$i][10]
      511. $OuArray[UBound($OuArray) - 1][11] = $RtArray[$i][11]
      512. $OuArray[UBound($OuArray) - 1][12] = $RtArray[$i][12]
      513. $OuArray[UBound($OuArray) - 1][13] = $RtArray[$i][13]
      514. $OuArray[UBound($OuArray) - 1][14] = $RtArray[$i][14]
      515. $OuArray[UBound($OuArray) - 1][15] = $RtArray[$i][15]
      516. $OuArray[UBound($OuArray) - 1][16] = $RtArray[$i][16]
      517. $OuArray[UBound($OuArray) - 1][17] = $RtArray[$i][17]
      518. $OuArray[UBound($OuArray) - 1][18] = $RtArray[$i][18]
      519. $OuArray[UBound($OuArray) - 1][19] = $RtArray[$i][19]
      520. if $OuArray[UBound($OuArray) - 1][5] = False Then
      521. $OuArray[UBound($OuArray) - 1][12] = 0
      522. $OuArray[UBound($OuArray) - 1][13] = 0
      523. EndIf
      524. ReDim $OuArray[UBound($OuArray) + 1][20]
      525. if $i = $G Then
      526. $OuArray[UBound($OuArray) - 1][0] = $lpType
      527. $OuArray[UBound($OuArray) - 1][1] = $lpName
      528. $OuArray[UBound($OuArray) - 1][2] = $wLanguage
      529. $OuArray[UBound($OuArray) - 1][3] = $Data_Size
      530. $OuArray[UBound($OuArray) - 1][4] = False
      531. $OuArray[UBound($OuArray) - 1][5] = False
      532. $OuArray[UBound($OuArray) - 1][6] = True
      533. $OuArray[UBound($OuArray) - 1][7] = 0
      534. $OuArray[UBound($OuArray) - 1][8] = $RtArray[$i][8]
      535. $OuArray[UBound($OuArray) - 1][9] = $RtArray[$i][9]
      536. $OuArray[UBound($OuArray) - 1][10] = $RtArray[$i][10]
      537. $OuArray[UBound($OuArray) - 1][11] = $RtArray[$i][11]
      538. $OuArray[UBound($OuArray) - 1][12] = $RtArray[$i][12]
      539. $OuArray[UBound($OuArray) - 1][13] = $RtArray[$i][13]
      540. $OuArray[UBound($OuArray) - 1][14] = $RtArray[$i][14]
      541. $OuArray[UBound($OuArray) - 1][15] = True
      542. $OuArray[UBound($OuArray) - 1][16] = $RtArray[$i][16]
      543. $OuArray[UBound($OuArray) - 1][17] = $RtArray[$i][17]
      544. $OuArray[UBound($OuArray) - 1][18] = $RtArray[$i][18]
      545. $OuArray[UBound($OuArray) - 1][19] = $RtArray[$i][18]
      546. $OuArray[UBound($OuArray) - 1][12] = 0
      547. $OuArray[UBound($OuArray) - 1][13] += 1
      548. if $OuArray[UBound($OuArray) - 1][5] = False Then
      549. $OuArray[UBound($OuArray) - 1][12] = 0
      550. $OuArray[UBound($OuArray) - 1][13] = 0
      551. EndIf
      552. ReDim $OuArray[UBound($OuArray) + 1][20]
      553. EndIf
      554. Next
      555. Else
      556. For $i = 0 To UBound($RtArray) - 1
      557. if $i = 0 Then
      558. $RtArray[$D][12] = 0
      559. $RtArray[$D][13] += 1
      560. EndIf
      561. if $i = $E Then
      562. $OuArray[UBound($OuArray) - 1][0] = $lpType
      563. $OuArray[UBound($OuArray) - 1][1] = $lpName
      564. $OuArray[UBound($OuArray) - 1][2] = $wLanguage
      565. $OuArray[UBound($OuArray) - 1][3] = $Data_Size
      566. $OuArray[UBound($OuArray) - 1][4] = False
      567. $OuArray[UBound($OuArray) - 1][5] = False
      568. $OuArray[UBound($OuArray) - 1][6] = True
      569. $OuArray[UBound($OuArray) - 1][7] = 0
      570. $OuArray[UBound($OuArray) - 1][8] = $RtArray[$i][8]
      571. $OuArray[UBound($OuArray) - 1][9] = $RtArray[$i][9]
      572. $OuArray[UBound($OuArray) - 1][10] = $RtArray[$i][10]
      573. $OuArray[UBound($OuArray) - 1][11] = $RtArray[$i][11]
      574. $OuArray[UBound($OuArray) - 1][12] = $RtArray[$i][12]
      575. $OuArray[UBound($OuArray) - 1][13] = $RtArray[$i][13]
      576. $OuArray[UBound($OuArray) - 1][14] = $RtArray[$i][14]
      577. $OuArray[UBound($OuArray) - 1][15] = True
      578. $OuArray[UBound($OuArray) - 1][16] = $RtArray[$i][16]
      579. $OuArray[UBound($OuArray) - 1][17] = $RtArray[$i][17]
      580. $OuArray[UBound($OuArray) - 1][18] = $RtArray[$i][18]
      581. $OuArray[UBound($OuArray) - 1][19] = $RtArray[$i][18]
      582. if $OuArray[UBound($OuArray) - 1][5] = False Then
      583. $OuArray[UBound($OuArray) - 1][12] = 0
      584. $OuArray[UBound($OuArray) - 1][13] = 0
      585. EndIf
      586. ReDim $OuArray[UBound($OuArray) + 1][20]
      587. EndIf
      588. $OuArray[UBound($OuArray) - 1][0] = $RtArray[$i][0]
      589. $OuArray[UBound($OuArray) - 1][1] = $RtArray[$i][1]
      590. $OuArray[UBound($OuArray) - 1][2] = $RtArray[$i][2]
      591. $OuArray[UBound($OuArray) - 1][3] = $RtArray[$i][3]
      592. $OuArray[UBound($OuArray) - 1][4] = $RtArray[$i][4]
      593. $OuArray[UBound($OuArray) - 1][5] = $RtArray[$i][5]
      594. $OuArray[UBound($OuArray) - 1][6] = $RtArray[$i][6]
      595. $OuArray[UBound($OuArray) - 1][7] = $RtArray[$i][7]
      596. $OuArray[UBound($OuArray) - 1][8] = $RtArray[$i][8]
      597. $OuArray[UBound($OuArray) - 1][9] = $RtArray[$i][9]
      598. $OuArray[UBound($OuArray) - 1][10] = $RtArray[$i][10]
      599. $OuArray[UBound($OuArray) - 1][11] = $RtArray[$i][11]
      600. $OuArray[UBound($OuArray) - 1][12] = $RtArray[$i][12]
      601. $OuArray[UBound($OuArray) - 1][13] = $RtArray[$i][13]
      602. $OuArray[UBound($OuArray) - 1][14] = $RtArray[$i][14]
      603. $OuArray[UBound($OuArray) - 1][15] = $RtArray[$i][15]
      604. $OuArray[UBound($OuArray) - 1][16] = $RtArray[$i][16]
      605. $OuArray[UBound($OuArray) - 1][17] = $RtArray[$i][17]
      606. $OuArray[UBound($OuArray) - 1][18] = $RtArray[$i][18]
      607. $OuArray[UBound($OuArray) - 1][19] = $RtArray[$i][19]
      608. if $OuArray[UBound($OuArray) - 1][5] = False Then
      609. $OuArray[UBound($OuArray) - 1][12] = 0
      610. $OuArray[UBound($OuArray) - 1][13] = 0
      611. EndIf
      612. ReDim $OuArray[UBound($OuArray) + 1][20]
      613. Next
      614. EndIf
      615. ReDim $OuArray[UBound($OuArray) - 1][20]
      616. $RtArray = $OuArray
      617. EndIf
      618. $RtArray[0][18] += $Data_Size
      619. $ImageArray[10][0] = $RtArray
      620. Return $ImageArray
      621. EndFunc
      622. Func EndUpdateResource($ImageArray)
      623. Return ARRAY_TO_RESOURCE_DIRECTORY($ImageArray)
      624. EndFunc
      625. Func RESOURCE_DIRECTORY_TO_ARRAY($ImageArray)
      626. if Not IsArray($ImageArray) Then Return 0
      627. $hFile = $ImageArray[0][0]
      628. $StartPos_Of_ResRawData = $ImageArray[7][0]
      629. $IMAGE_RESOURCE_DIRECTORY = _
      630. READ_IMAGE_RES_DIR($hFile,$StartPos_Of_ResRawData,0)
      631. $Entries = DllStructGetData($IMAGE_RESOURCE_DIRECTORY,"NumberOfIdEntries") _
      632. + DllStructGetData($IMAGE_RESOURCE_DIRECTORY,"NumberOfNamedEntries")
      633. $PIMAGE_RESOURCE_DIRECTORY = DllStructGetPtr($IMAGE_RESOURCE_DIRECTORY)
      634. Local $RtArray[1][21] , $TestTypeChange = False , $TestLangChange = False _
      635. , $TestNameChange = False ,$D = 0 ,$E = 0 , $F = 0 , $G = 0 , $H = 0 , $J = 0 , $K = 0 _
      636. , $L = 0 , $iTestNameChange = "" , $iTestTypeChange = "" , $iTestLangChange , $ALLSize
      637. For $A = 0 To $Entries - 1
      638. $Type_IMAGE_RESOURCE_DIRECTORY_ENTRY = _
      639. READ_IMAGE_RES_ENT($hFile,$StartPos_Of_ResRawData,(16 + ($A * 8)))
      640. $PType_IMAGE_RESOURCE_DIRECTORY_ENTRY = DllStructGetPtr($Type_IMAGE_RESOURCE_DIRECTORY_ENTRY)
      641. $TypeName = DllStructGetData($Type_IMAGE_RESOURCE_DIRECTORY_ENTRY,"Name")
      642. if NameIsString($TypeName) Then $TypeName = ReadStringName($TypeName,$hFile,$StartPos_Of_ResRawData)
      643. $TypeOffsetToData = DllStructGetData($Type_IMAGE_RESOURCE_DIRECTORY_ENTRY,"OffsetToData")
      644. $TypeOffsetToDirectory = OffsetToDirectory($TypeOffsetToData)
      645. $NameIMAGE_RESOURCE_DIRECTORY = _
      646. READ_IMAGE_RES_DIR($hFile,$StartPos_Of_ResRawData,$TypeOffsetToDirectory)
      647. $NameEntries = DllStructGetData($NameIMAGE_RESOURCE_DIRECTORY,"NumberOfIdEntries") _
      648. + DllStructGetData($NameIMAGE_RESOURCE_DIRECTORY,"NumberOfNamedEntries")
      649. $ImgResDir = DllStructGetPtr($NameIMAGE_RESOURCE_DIRECTORY)
      650. $OUT_PIMAGE_RES_DIR2 = $ImgResDir
      651. For $B = 0 To $NameEntries - 1
      652. $Name_IMAGE_RESOURCE_DIRECTORY_ENTRY = _
      653. READ_IMAGE_RES_ENT($hFile,$StartPos_Of_ResRawData ,$TypeOffsetToDirectory + (16 + ($B * 8)))
      654. $PName_IMAGE_RESOURCE_DIRECTORY_ENTRY = DllStructGetPtr($Name_IMAGE_RESOURCE_DIRECTORY_ENTRY)
      655. $NameName = DllStructGetData($Name_IMAGE_RESOURCE_DIRECTORY_ENTRY,"Name")
      656. if NameIsString($NameName) Then $NameName = ReadStringName($NameName,$hFile,$StartPos_Of_ResRawData)
      657. $NameOffsetToData = DllStructGetData($Name_IMAGE_RESOURCE_DIRECTORY_ENTRY,"OffsetToData")
      658. $NameOffsetToDirectory = OffsetToDirectory($NameOffsetToData)
      659. $LangIMAGE_RESOURCE_DIRECTORY = _
      660. READ_IMAGE_RES_DIR($hFile,$StartPos_Of_ResRawData,$NameOffsetToDirectory)
      661. $LangEntries = DllStructGetData($LangIMAGE_RESOURCE_DIRECTORY,"NumberOfIdEntries") _
      662. + DllStructGetData($LangIMAGE_RESOURCE_DIRECTORY,"NumberOfLangdEntries")
      663. $ImgResDir = DllStructGetPtr($LangIMAGE_RESOURCE_DIRECTORY)
      664. $OUT_PIMAGE_RES_DIR4 = $ImgResDir
      665. For $C = 0 To $LangEntries - 1
      666. $Lang_IMAGE_RESOURCE_DIRECTORY_ENTRY = _
      667. READ_IMAGE_RES_ENT($hFile,$StartPos_Of_ResRawData ,$NameOffsetToDirectory + (16 + ($C * 8)))
      668. $PLang_IMAGE_RESOURCE_DIRECTORY_ENTRY = DllStructGetPtr($Lang_IMAGE_RESOURCE_DIRECTORY_ENTRY)
      669. $LangName = DllStructGetData($Lang_IMAGE_RESOURCE_DIRECTORY_ENTRY,"Name")
      670. if NameIsString($LangName) Then $LangName = ReadStringName($LangName,$hFile,$StartPos_Of_ResRawData)
      671. $LangOffsetToData = DllStructGetData($Lang_IMAGE_RESOURCE_DIRECTORY_ENTRY,"OffsetToData")
      672. $LangOffsetToDirectory = OffsetToDirectory($LangOffsetToData)
      673. $IMAGE_RESOURCE_DATA_ENTRY = _
      674. READ_IMAGE_RES_DAT($hFile,$StartPos_Of_ResRawData , $LangOffsetToDirectory)
      675. $DataLangOffsetToData = DllStructGetData($IMAGE_RESOURCE_DATA_ENTRY,"OffsetToData")
      676. $DataLangDataSize = DllStructGetData($IMAGE_RESOURCE_DATA_ENTRY,"Size")
      677. if $iTestLangChange <> $LangName Then
      678. $TestLangChange = True
      679. Else
      680. $TestLangChange = False
      681. EndIf
      682. if $iTestNameChange <> $NameName Then
      683. $TestNameChange = True
      684. Else
      685. $TestNameChange = False
      686. EndIf
      687. if $iTestTypeChange <> $TypeName Then
      688. $TestTypeChange = True
      689. Else
      690. $TestTypeChange = False
      691. EndIf
      692. if IsString($TypeName) Then
      693. if $TestTypeChange = True Then $D += 1
      694. Else
      695. if $TestTypeChange = True Then $E += 1
      696. EndIf
      697. if IsString($NameName) Then
      698. $RtArray[UBound($RtArray) - 1][10] = 1
      699. $RtArray[UBound($RtArray) - 1][11] = 0
      700. Else
      701. $RtArray[UBound($RtArray) - 1][10] = 0
      702. $RtArray[UBound($RtArray) - 1][11] = 1
      703. EndIf
      704. if $TestTypeChange = True Then
      705. $F = UBound($RtArray) - 1
      706. if IsString($NameName) Then
      707. $G = 1
      708. $H = 0
      709. Else
      710. $G = 0
      711. $H = 1
      712. EndIf
      713. Else
      714. if IsString($NameName) Then
      715. if $TestNameChange = True Then $G += 1
      716. Else
      717. if $TestNameChange = True Then $H += 1
      718. EndIf
      719. $RtArray[$F][10] = $G
      720. $RtArray[$F][11] = $H
      721. EndIf
      722. if IsString($LangName) Then
      723. $RtArray[UBound($RtArray) - 1][12] = 1
      724. $RtArray[UBound($RtArray) - 1][13] = 0
      725. Else
      726. $RtArray[UBound($RtArray) - 1][12] = 0
      727. $RtArray[UBound($RtArray) - 1][13] = 1
      728. EndIf
      729. if $TestNameChange = True Or $TestTypeChange = True Then
      730. $J = UBound($RtArray) - 1
      731. if IsString($LangName) Then
      732. $K = 1
      733. $L = 0
      734. Else
      735. $K = 0
      736. $L = 1
      737. EndIf
      738. Else
      739. if IsString($LangName) Then
      740. if $TestLangChange = True Then $K += 1
      741. Else
      742. if $TestLangChange = True Then $L += 1
      743. EndIf
      744. if $TestNameChange = False Or $TestTypeChange = False Then
      745. $RtArray[$F][12] = $K
      746. $RtArray[$F][13] = $L
      747. EndIf
      748. EndIf
      749. if $A = 0 And $B = 0 And $C = 0 Then $TestTypeChange = True
      750. if $TestTypeChange = True Then $TestNameChange = True
      751. if $TestNameChange = True Or $TestTypeChange = True Then $TestLangChange = True
      752. $iTestTypeChange = $TypeName
      753. $iTestNameChange = $NameName
      754. $iTestLangChange = $LangName
      755. $RtArray[UBound($RtArray) - 1][0] = $TypeName
      756. $RtArray[UBound($RtArray) - 1][1] = $NameName
      757. $RtArray[UBound($RtArray) - 1][2] = $LangName
      758. $RtArray[UBound($RtArray) - 1][3] = $DataLangDataSize
      759. $RtArray[UBound($RtArray) - 1][4] = $TestTypeChange
      760. $RtArray[UBound($RtArray) - 1][5] = $TestNameChange
      761. $RtArray[UBound($RtArray) - 1][6] = $TestLangChange
      762. $RtArray[UBound($RtArray) - 1][7] = $DataLangOffsetToData
      763. $RtArray[UBound($RtArray) - 1][15] = False
      764. ReDim $RtArray[UBound($RtArray) + 1][21]
      765. Next
      766. Next
      767. Next
      768. $RtArray[0][9] = $D
      769. $RtArray[0][8] = $E
      770. $RtArray[0][14] = $ALLSize
      771. $RtArray[0][16] = 0
      772. $RtArray[0][17] = 0
      773. $RtArray[0][18] = 0
      774. $RtArray[0][19] = 0
      775. ReDim $RtArray[UBound($RtArray) - 1][21]
      776. ReDim $ImageArray[11][2]
      777. $ImageArray[10][0] = $RtArray
      778. $ImageArray[10][1] = "ResultArray"
      779. Return $ImageArray
      780. EndFunc
      781. Func ARRAY_TO_RESOURCE_DIRECTORY($ImageArray)
      782. Local $OF_READWRITE = 0x00000002 , _
      783. $OF_CREATE = 0x00001000 , _
      784. $ResTablePos_Start = $ImageArray[3][0] , _
      785. $SectPos_Start = $ImageArray[4][0] , _
      786. $SectDatSize = $ImageArray[5][0] , _
      787. $ResDatSize = $ImageArray[2][0] , _
      788. $OutFile = $ImageArray[11][0] , _
      789. $SectIndex = $ImageArray[8][0] , _
      790. $PosOfResRawData = $ImageArray[7][0] , _
      791. $hFile = $ImageArray[0][0] , _
      792. $FileSize = $ImageArray[1][0] , _
      793. $ImageSize = $ImageArray[9][0]
      794. $RtArray = $ImageArray[10][0]
      795. Local $TestType = $RtArray[0][4] , _
      796. $TestName = $RtArray[0][5] , _
      797. $FirstTypeName = $RtArray[0][0] , _
      798. $TestStringName = False , _
      799. $StringName[1][2] , _
      800. $FirstPointerToRawData = 0 , _
      801. $hTempFile = 0
      802. $HFILE1 = WINAPIOpenFile($OutFile,$OF_CREATE + $OF_READWRITE)
      803. $HFILE2 = WINAPIOpenFile($OutFile,$OF_CREATE + $OF_READWRITE)
      804. If Not ($HFILE1) Or Not ($HFILE2) Then Return -1
      805. $IMAGE_DOS_HEADER = READ_IMAGE_DOS_HEADER($hFile,0)
      806. WRITE_IMAGE_DOS_HEADER($HFILE1,0,$IMAGE_DOS_HEADER)
      807. $MovePos = DllStructGetData($IMAGE_DOS_HEADER,"lfanew")
      808. $lfanew = $MovePos
      809. $Signature = READ_Signature($hFile,$MovePos)
      810. WRITE_Signature($HFILE1,$MovePos,$Signature)
      811. $MovePos += DllStructGetSize($Signature)
      812. $IMAGE_FILE_HEADER = READ_IMAGE_FILE_HEADER($hFile,$MovePos)
      813. WRITE_IMAGE_FILE_HEADER($HFILE1,$MovePos,$IMAGE_FILE_HEADER)
      814. $MovePos += DllStructGetSize($IMAGE_FILE_HEADER)
      815. $IMAGE_OPTIONAL_HEADER = READ_IMAGE_OPTIONAL_HEADER($hFile,$MovePos)
      816. $IMovePos = $MovePos
      817. WRITE_IMAGE_OPTIONAL_HEADER($HFILE1,$MovePos,$IMAGE_OPTIONAL_HEADER)
      818. $NumberOfSections = DllStructGetData($IMAGE_FILE_HEADER,"NumberOfSections")
      819. $MovePos += DllStructGetSize($IMAGE_OPTIONAL_HEADER)
      820. $JMovePos = $MovePos
      821. $SizeOfHeaders = DllStructGetData($IMAGE_OPTIONAL_HEADER,"SizeOfHeaders")
      822. ;SizeOf IMAGE_SECTION_HEADER ==> 40
      823. $RemainderSize = $SizeOfHeaders - ($MovePos + $NumberOfSections * 40)
      824. $DataPos = ($MovePos + $NumberOfSections * 40)
      825. $DataStruct = READ_Data($hFile,$DataPos,$RemainderSize)
      826. WRITE_Data($HFILE2,$DataPos,$DataStruct)
      827. $SectIndex = $ImageArray[8][0]
      828. For $i = 1 To $NumberOfSections
      829. $IMAGE_SECTION_HEADER = READ_IMAGE_SECTION_HEADER($hFile,$MovePos)
      830. $PointerToRawData = DllStructGetData($IMAGE_SECTION_HEADER,"PointerToRawData")
      831. $SizeOfRawData = DllStructGetData($IMAGE_SECTION_HEADER,"SizeOfRawData")
      832. $VirtualAddress = DllStructGetData($IMAGE_SECTION_HEADER,"VirtualAddress")
      833. $XMovePos = $MovePos
      834. if $i = $SectIndex Then ExitLoop
      835. WRITE_IMAGE_SECTION_HEADER($HFILE1,$MovePos,$IMAGE_SECTION_HEADER)
      836. $ByteStruct = READ_SECTION($hFile,$PointerToRawData,$SizeOfRawData)
      837. WRITE_SECTION($HFILE2,$PointerToRawData,$byteStruct)
      838. $MovePos += DllStructGetSize($IMAGE_SECTION_HEADER)
      839. Next
      840. $StartPos = $PointerToRawData
      841. $IMAGE_RES_DIR = CRE_IMAGE_RES_DIR()
      842. $NumberOfNamedEntries = $RtArray[0][9]
      843. $NumberOfIdEntries = $RtArray[0][8]
      844. $OffsetToData = GetFirstOffsetToData($NumberOfNamedEntries + $NumberOfIdEntries)
      845. DllStructSetData($IMAGE_RES_DIR,"NumberOfNamedEntries",$NumberOfNamedEntries)
      846. DllStructSetData($IMAGE_RES_DIR,"NumberOfIdEntries",$NumberOfIdEntries)
      847. WRITE_IMAGE_RES_DIR($HFILE2,$StartPos,$IMAGE_RES_DIR)
      848. $OffsetToData -= 16
      849. $MovePos = 16
      850. For $M = 0 To UBound($RtArray) -1
      851. $TestType = $RtArray[$M][4]
      852. if $TestType <> True Then ContinueLoop
      853. $OffsetToData += 16
      854. $IMAGE_RES_DIR_ENTRY = CRE_IMAGE_RES_ENT()
      855. $TypeName = $RtArray[$M][0]
      856. if IsString($TypeName) Then
      857. $StringName[UBound($StringName) - 1][0] = $TypeName
      858. $StringName[UBound($StringName) - 1][1] = $MovePos
      859. ReDim $StringName[UBound($StringName) + 1][2]
      860. $TestStringName = True
      861. EndIf
      862. DllStructSetData($IMAGE_RES_DIR_ENTRY,"Name",$TypeName)
      863. DllStructSetData($IMAGE_RES_DIR_ENTRY,"OffsetToData",$OffsetToData)
      864. WRITE_IMAGE_RES_EN($HFILE2,$StartPos + $MovePos,$IMAGE_RES_DIR_ENTRY)
      865. $NameInOneType = $RtArray[$M][10] + $RtArray[$M][11]
      866. $OffsetToData += (8 * $NameInOneType)
      867. $MovePos += 8
      868. Next
      869. For $M = 0 To UBound($RtArray) -1
      870. $TestType = $RtArray[$M][4]
      871. $TestName = $RtArray[$M][5]
      872. If $TestType = True Then
      873. $IMAGE_RES_DIR = CRE_IMAGE_RES_DIR()
      874. $NumberOfNamedEntries = $RtArray[$M][10]
      875. $NumberOfIdEntries = $RtArray[$M][11]
      876. DllStructSetData($IMAGE_RES_DIR,"NumberOfNamedEntries",$NumberOfNamedEntries)
      877. DllStructSetData($IMAGE_RES_DIR,"NumberOfIdEntries",$NumberOfIdEntries)
      878. WRITE_IMAGE_RES_DIR($HFILE2,$StartPos + $MovePos,$IMAGE_RES_DIR)
      879. $MovePos += 16
      880. EndIf
      881. If $TestName <> True Then ContinueLoop
      882. $OffsetToData += 16
      883. $IMAGE_RES_DIR_ENTRY = CRE_IMAGE_RES_ENT()
      884. $NameName = $RtArray[$M][1]
      885. if IsString($NameName) Then
      886. $StringName[UBound($StringName) - 1][0] = $NameName
      887. $StringName[UBound($StringName) - 1][1] = $MovePos
      888. ReDim $StringName[UBound($StringName) + 1][2]
      889. $TestStringName = True
      890. EndIf
      891. DllStructSetData($IMAGE_RES_DIR_ENTRY,"Name",$NameName)
      892. DllStructSetData($IMAGE_RES_DIR_ENTRY,"OffsetToData",$OffsetToData)
      893. WRITE_IMAGE_RES_EN($HFILE2,$StartPos + $MovePos,$IMAGE_RES_DIR_ENTRY)
      894. $LangInOneName = $RtArray[$M][12] + $RtArray[$M][13]
      895. $OffsetToData += (8 * $LangInOneName)
      896. $MovePos += 8
      897. Next
      898. $OffsetToDirectory = OffsetToDirectory($OffsetToData)
      899. For $M = 0 To UBound($RtArray) -1
      900. $TestType = $RtArray[$M][4]
      901. $TestName = $RtArray[$M][5]
      902. $TestLang = $RtArray[$M][6]
      903. if $TestName = True Then
      904. $IMAGE_RES_DIR = CRE_IMAGE_RES_DIR()
      905. $NumberOfNamedEntries = $RtArray[$M][12]
      906. $NumberOfIdEntries = $RtArray[$M][13]
      907. DllStructSetData($IMAGE_RES_DIR,"NumberOfNamedEntries",$NumberOfNamedEntries)
      908. DllStructSetData($IMAGE_RES_DIR,"NumberOfIdEntries",$NumberOfIdEntries)
      909. WRITE_IMAGE_RES_DIR($HFILE2,$StartPos + $MovePos,$IMAGE_RES_DIR)
      910. $MovePos += 16
      911. EndIf
      912. $OffsetToDirectory += 16
      913. $OffsetToData += 16
      914. $IMAGE_RES_DIR_ENTRY = CRE_IMAGE_RES_ENT()
      915. $LangName = $RtArray[$M][2]
      916. if IsString($LangName) Then
      917. $StringName[UBound($StringName) - 1][0] = $LangName
      918. $StringName[UBound($StringName) - 1][1] = $MovePos
      919. ReDim $StringName[UBound($StringName) + 1][2]
      920. $TestStringName = True
      921. EndIf
      922. DllStructSetData($IMAGE_RES_DIR_ENTRY,"Name",$LangName)
      923. DllStructSetData($IMAGE_RES_DIR_ENTRY,"OffsetToData",$OffsetToDirectory)
      924. WRITE_IMAGE_RES_EN($HFILE2,$StartPos + $MovePos,$IMAGE_RES_DIR_ENTRY)
      925. $MovePos += 8
      926. Next
      927. $OffsetToData += 16
      928. if $TestStringName = True Then
      929. ReDim $StringName[UBound($StringName) - 1][3]
      930. For $i = 0 To UBound($StringName) - 1
      931. $Name = $StringName[$i][0]
      932. $Length = StringLen($Name)
      933. $IMAGE_RESOURCE_DIR_STRING_U = CRE_IMAGE_RES_DIR_STRING_U(0,$Length)
      934. DllStructSetData($IMAGE_RESOURCE_DIR_STRING_U,"Length",$Length)
      935. DllStructSetData($IMAGE_RESOURCE_DIR_STRING_U,"NameString",$Name)
      936. $DirEntryMovePos = $StringName[$i][1]
      937. $IMAGE_RES_DIR_ENTRY = READ_IMAGE_RES_ENT($HFILE2,$StartPos,$DirEntryMovePos)
      938. DllStructSetData($IMAGE_RES_DIR_ENTRY,"Name",$OffsetToData)
      939. WRITE_IMAGE_RES_EN($HFILE2,$StartPos + $DirEntryMovePos,$IMAGE_RES_DIR_ENTRY)
      940. $OffsetToData += DllStructGetSize($IMAGE_RESOURCE_DIR_STRING_U)
      941. Next
      942. EndIf
      943. $FirstDataOffsetToData = OffsetToDirectory($OffsetToData + $ResTablePos_Start)
      944. For $M = 0 To UBound($RtArray) -1
      945. $DataSize = $RtArray[$M][3]
      946. $IMAGE_RES_DAT_ENTRY = CRE_IMAGE_RES_DAT()
      947. DllStructSetData($IMAGE_RES_DAT_ENTRY,"OffsetToData",$FirstDataOffsetToData)
      948. DllStructSetData($IMAGE_RES_DAT_ENTRY,"Size",$DataSize)
      949. WRITE_IMAGE_RES_DAT($HFILE2,$StartPos + $MovePos,$IMAGE_RES_DAT_ENTRY)
      950. $MovePos += 16
      951. $FirstDataOffsetToData += $DataSize
      952. Next
      953. if $TestStringName = True Then
      954. For $i = 0 To UBound($StringName) - 1
      955. $Name = $StringName[$i][0]
      956. $Length = StringLen($Name)
      957. $IMAGE_RESOURCE_DIR_STRING_U = CRE_IMAGE_RES_DIR_STRING_U(0,$Length)
      958. DllStructSetData($IMAGE_RESOURCE_DIR_STRING_U,"Length",$Length)
      959. DllStructSetData($IMAGE_RESOURCE_DIR_STRING_U,"NameString",$Name)
      960. WRITE_StringName($HFILE2,$StartPos + $MovePos,$IMAGE_RESOURCE_DIR_STRING_U)
      961. $MovePos += DllStructGetSize($IMAGE_RESOURCE_DIR_STRING_U)
      962. Next
      963. EndIf
      964. For $i = 0 To UBound($RtArray) - 1
      965. $DataOffsetToData = $RtArray[$i][7]
      966. $DataSize = $RtArray[$i][3]
      967. $NewRes_BOOL = $RtArray[$i][15]
      968. if ($NewRes_BOOL) Then
      969. $hTempFile = $RtArray[0][17]
      970. $MovePosTemp = $RtArray[$i][19]
      971. $DataStruct = READ_Data($hTempFile,$MovePosTemp,$DataSize)
      972. WRITE_Data($HFILE2,$StartPos + $MovePos,$DataStruct)
      973. Else
      974. $DataPos = $PosOfResRawData + ($DataOffsetToData - $ResTablePos_Start)
      975. $DataStruct = READ_Data($hFile,$DataPos,$DataSize)
      976. WRITE_Data($HFILE2,$StartPos + $MovePos,$DataStruct)
      977. EndIf
      978. $MovePos += $DataSize
      979. Next
      980. $NewResSize = $MovePos
      981. $SectionSizeOfAfterRes = ($SectPos_Start + $SectDatSize) - ($PosOfResRawData + $ResDatSize)
      982. if $SectionSizeOfAfterRes > 0 Then
      983. $DataPos = $PosOfResRawData + $ResDatSize
      984. $DatSectionStructOfAfterRes = READ_Data($hFile,$DataPos,$SectionSizeOfAfterRes)
      985. WRITE_Data($HFILE2,$StartPos + $MovePos,$DatSectionStructOfAfterRes)
      986. $MovePos += $SectionSizeOfAfterRes
      987. EndIf
      988. $NewResSectionSize = $MovePos
      989. $FileAlignment = DllStructGetData($IMAGE_OPTIONAL_HEADER,"FileAlignment")
      990. $SectionAlignment = DllStructGetData($IMAGE_OPTIONAL_HEADER,"SectionAlignment")
      991. $OldPointerToRawData = DllStructGetData($IMAGE_SECTION_HEADER,"PointerToRawData")
      992. $OldSizeOfRawData = DllStructGetData($IMAGE_SECTION_HEADER,"SizeOfRawData")
      993. $OldVirtualSize = DllStructGetData($IMAGE_SECTION_HEADER,"Misc")
      994. $NewSizeOfRawData = ROUND_UP($NewResSectionSize,$FileAlignment)
      995. DllStructSetData($IMAGE_SECTION_HEADER,"SizeOfRawData",$NewSizeOfRawData)
      996. $NewVirtualSize = $NewResSectionSize
      997. DllStructSetData($IMAGE_SECTION_HEADER,"Misc",$NewVirtualSize)
      998. $DataDirectory = DllStructGetPtr($IMAGE_OPTIONAL_HEADER,31)
      999. $IMAGE_DIRECTORY_ENTRY_RESOURCE = 2
      1000. $OutPtr = $DataDirectory + ($IMAGE_DIRECTORY_ENTRY_RESOURCE) * 8
      1001. $IMAGE_DATA_DIRECTORY = CRE_IMAGE_DATA_DIR($OutPtr)
      1002. DllStructSetData($IMAGE_DATA_DIRECTORY,"Size",$NewVirtualSize)
      1003. $PIMAGE_DATA_DIRECTORY = DllStructGetPtr($IMAGE_DATA_DIRECTORY)
      1004. $Size = DllStructGetSize($IMAGE_DATA_DIRECTORY)
      1005. RtlMoveMemory($OutPtr,$PIMAGE_DATA_DIRECTORY,$Size)
      1006. $OldSizeOfImage = DllStructGetData($IMAGE_OPTIONAL_HEADER,"SizeOfImage")
      1007. $NewSizeOfImage = $OldSizeOfImage - ROUND_UP($OldSizeOfRawData,$SectionAlignment) _
      1008. + ROUND_UP($NewSizeOfRawData,$SectionAlignment)
      1009. DllStructSetData($IMAGE_OPTIONAL_HEADER,"SizeOfImage",$NewSizeOfImage)
      1010. $AddressOfEntryPoint = DllStructGetData($IMAGE_OPTIONAL_HEADER,"AddressOfEntryPoint")
      1011. $BaseOfCode = DllStructGetData($IMAGE_OPTIONAL_HEADER,"BaseOfCode")
      1012. $BaseOfData = DllStructGetData($IMAGE_OPTIONAL_HEADER,"BaseOfData")
      1013. If $AddressOfEntryPoint > $VirtualAddress Then
      1014. $AddressOfEntryPoint += $NewVirtualSize - $OldVirtualSize
      1015. DllStructSetData($IMAGE_OPTIONAL_HEADER,"AddressOfEntryPoint",$AddressOfEntryPoint)
      1016. EndIf
      1017. If $BaseOfCode > $VirtualAddress Then
      1018. $BaseOfCode += $NewVirtualSize - $OldVirtualSize
      1019. DllStructSetData($IMAGE_OPTIONAL_HEADER,"BaseOfCode",$BaseOfCode)
      1020. EndIf
      1021. If $BaseOfData > $VirtualAddress Then
      1022. $BaseOfData += $NewVirtualSize - $OldVirtualSize
      1023. DllStructSetData($IMAGE_OPTIONAL_HEADER,"BaseOfData",$BaseOfData)
      1024. EndIf
      1025. WRITE_IMAGE_SECTION_HEADER($HFILE1,$XMovePos,$IMAGE_SECTION_HEADER)
      1026. $XMovePos += DllStructGetSize($IMAGE_SECTION_HEADER)
      1027. $NumberOfRvaAndSizes = DllStructGetData($IMAGE_OPTIONAL_HEADER,"NumberOfRvaAndSizes")
      1028. $XOldPointerToRawData = $OldPointerToRawData
      1029. $XOldSizeOfRawData = $OldSizeOfRawData
      1030. $YNewPointerToRawData = $OldPointerToRawData
      1031. $YNewSizeOfRawData = $NewSizeOfRawData
      1032. For $i = $SectIndex + 1 To $NumberOfSections
      1033. $IMAGE_SECTION_HEADER = READ_IMAGE_SECTION_HEADER($hFile,$XMovePos)
      1034. $XOldPointerToRawData = DllStructGetData($IMAGE_SECTION_HEADER,"PointerToRawData")
      1035. $XOldSizeOfRawData = DllStructGetData($IMAGE_SECTION_HEADER,"SizeOfRawData")
      1036. $YNewSizeOfRawData = $XOldSizeOfRawData
      1037. $SectionDataStruct = READ_SECTION($hFile,$XOldPointerToRawData,$XOldSizeOfRawData)
      1038. $XOldVirtualAddress = DllStructGetData($IMAGE_SECTION_HEADER,"VirtualAddress")
      1039. $BOOL = False
      1040. For $J = 0 To $NumberOfRvaAndSizes
      1041. $OutPtr = $DataDirectory + ($J * 8)
      1042. $IMAGE_DATA_DIRECTORY = CRE_IMAGE_DATA_DIR($OutPtr)
      1043. $DirOldVirtualAddress = DllStructGetData($IMAGE_DATA_DIRECTORY,"VirtualAddress")
      1044. if $XOldVirtualAddress = $DirOldVirtualAddress Then
      1045. ExitLoop
      1046. $BOOL = True
      1047. EndIf
      1048. Next
      1049. $NewVirtualAddress = $XOldVirtualAddress - _
      1050. ROUND_UP($OldSizeOfRawData,$SectionAlignment) _
      1051. + ROUND_UP($NewSizeOfRawData,$SectionAlignment)
      1052. DllStructSetData($IMAGE_SECTION_HEADER,"VirtualAddress",$NewVirtualAddress)
      1053. if ($BOOL) Then
      1054. DllStructSetData($IMAGE_DATA_DIRECTORY,"VirtualAddress",$NewVirtualAddress)
      1055. $PIMAGE_DATA_DIRECTORY = DllStructGetPtr($IMAGE_DATA_DIRECTORY)
      1056. $Size = DllStructGetSize($IMAGE_DATA_DIRECTORY)
      1057. RtlMoveMemory($OutPtr,$PIMAGE_DATA_DIRECTORY,$Size)
      1058. EndIf
      1059. $NewPointerToRawData = $XOldPointerToRawData - _
      1060. ROUND_UP($OldSizeOfRawData,$FileAlignment) _
      1061. + ROUND_UP($NewSizeOfRawData,$FileAlignment)
      1062. DllStructSetData($IMAGE_SECTION_HEADER,"PointerToRawData",$NewPointerToRawData)
      1063. $YNewPointerToRawData = $NewPointerToRawData
      1064. WRITE_IMAGE_SECTION_HEADER($HFILE1,$XMovePos,$IMAGE_SECTION_HEADER)
      1065. WRITE_SECTION($HFILE2,$NewPointerToRawData,$SectionDataStruct)
      1066. $XMovePos += DllStructGetSize($IMAGE_SECTION_HEADER)
      1067. Next
      1068. WRITE_IMAGE_OPTIONAL_HEADER($HFILE2,$IMovePos,$IMAGE_OPTIONAL_HEADER)
      1069. $RemainderFileSize = $FileSize - $XOldPointerToRawData + $XOldSizeOfRawData
      1070. $RemainderFileDataPos = $ImageSize
      1071. $RemainderFileDataStruct = READ_Data($hFile,$RemainderFileDataPos,$RemainderFileSize)
      1072. WRITE_Data($HFILE2,$YNewPointerToRawData + $YNewSizeOfRawData,$RemainderFileDataStruct)
      1073. _WinAPI_CloseHandle($hFile)
      1074. _WinAPI_CloseHandle($HFILE1)
      1075. _WinAPI_CloseHandle($HFILE2)
      1076. if ($hTempFile) Then
      1077. _WinAPI_CloseHandle($hTempFile)
      1078. $TempFile = $RtArray[0][16]
      1079. FileDelete ($TempFile)
      1080. EndIf
      1081. Return True
      1082. EndFunc
      1083. Func FileToImageArray($sFile)
      1084. Local $nBytes , $hFile , $MovePos , $ImageArray[10][2]
      1085. $FileSize = FileGetSize($sFile)
      1086. $hFile = _WinAPI_CreateFile($sFile, 2, 2)
      1087. If Not ($hFile) Then Return -1
      1088. $ImageArray[0][0] = $hFile
      1089. $ImageArray[0][1] = "File handle"
      1090. $ImageArray[1][0] = $FileSize
      1091. $ImageArray[1][1] = "File Size"
      1092. $IMAGE_DOS_HEADER = READ_IMAGE_DOS_HEADER($hFile,0)
      1093. $Size = DllStructGetSize($IMAGE_DOS_HEADER)
      1094. Local $IMAGE_DOS_SIGNATURE_MAC = 0x4D5A ;C++6 WINNT.H
      1095. Local $IMAGE_DOS_SIGNATURE = 0x5A4D ;C++6 WINNT.H
      1096. if DllStructGetData($IMAGE_DOS_HEADER,"magic") <> $IMAGE_DOS_SIGNATURE_MAC And _
      1097. DllStructGetData($IMAGE_DOS_HEADER,"magic") <> $IMAGE_DOS_SIGNATURE Then Return -2
      1098. $MovePos = DllStructGetData($IMAGE_DOS_HEADER,"lfanew")
      1099. $Signature = READ_Signature($hFile,$MovePos)
      1100. $Size = DllStructGetSize($Signature)
      1101. $IMAGE_NT_SIGNATURE_MAC = 0x00004550 ;C++6 WINNT.H
      1102. $IMAGE_NT_SIGNATURE = 0x50450000 ;C++6 WINNT.H
      1103. if DllStructGetData($Signature,"Signature") <> $IMAGE_NT_SIGNATURE_MAC And _
      1104. DllStructGetData($Signature,"Signature") <> $IMAGE_NT_SIGNATURE Then Return -3
      1105. $MovePos += $Size
      1106. $IMAGE_FILE_HEADER = READ_IMAGE_FILE_HEADER($hFile,$MovePos)
      1107. $Size = DllStructGetSize($IMAGE_FILE_HEADER)
      1108. $MovePos += $Size
      1109. $IMAGE_OPTIONAL_HEADER = READ_IMAGE_OPTIONAL_HEADER($hFile,$MovePos)
      1110. $Size = DllStructGetSize($IMAGE_OPTIONAL_HEADER)
      1111. $IMAGE_NT_OPTIONAL_HDR32_MAGIC = 0x10b ;C++6 WINNT.H
      1112. $IMAGE_NT_OPTIONAL_HDR64_MAGIC = 0x20b ;C++6 WINNT.H
      1113. if DllStructGetData($IMAGE_OPTIONAL_HEADER,"Magic") <> $IMAGE_NT_OPTIONAL_HDR32_MAGIC _
      1114. And DllStructGetData($IMAGE_OPTIONAL_HEADER,"Magic") <> $IMAGE_NT_OPTIONAL_HDR64_MAGIC _
      1115. Then Return -4
      1116. $MovePos += $Size
      1117. Local $byteData = DllStructGetPtr($IMAGE_OPTIONAL_HEADER,31)
      1118. Local $IMAGE_DIRECTORY_ENTRY_RESOURCE = 2
      1119. $byteData += ($IMAGE_DIRECTORY_ENTRY_RESOURCE) * 8
      1120. $IMAGE_DATA_DIRECTORY = CRE_IMAGE_DATA_DIR($byteData)
      1121. Local $ResDatSize = DllStructGetData($IMAGE_DATA_DIRECTORY,"Size")
      1122. Local $ResTablePos_Start = DllStructGetData($IMAGE_DATA_DIRECTORY,"VirtualAddress")
      1123. if ($ResDatSize = 0) Then Return _
      1124. MsgBox(0,"MSG","ResTable Not Find")
      1125. $ImageArray[2][0] = $ResDatSize
      1126. $ImageArray[2][1] = "ResDatSize"
      1127. $ImageArray[3][0] = $ResTablePos_Start
      1128. $ImageArray[3][1] = "ResTablePos_Start"
      1129. $NumberOfSections = DllStructGetData($IMAGE_FILE_HEADER,"NumberOfSections")
      1130. For $i = 1 To $NumberOfSections
      1131. $IMAGE_SECTION_HEADER = READ_IMAGE_SECTION_HEADER($hFile,$MovePos)
      1132. $SectPos_Start = DllStructGetData($IMAGE_SECTION_HEADER,"VirtualAddress")
      1133. $SectDatSize = DllStructGetData($IMAGE_SECTION_HEADER,"SizeOfRawData")
      1134. $PointerToRawData = DllStructGetData($IMAGE_SECTION_HEADER,"PointerToRawData")
      1135. if ($SectDatSize) Then
      1136. $StartPos_Of_ResRawData = IS_DIRECTORY_SECTION( $SectPos_Start _
      1137. ,$SectDatSize _
      1138. ,$PointerToRawData _
      1139. ,$ResTablePos_Start)
      1140. if ($StartPos_Of_ResRawData) Then
      1141. $ImageArray[4][0] = $SectPos_Start
      1142. $ImageArray[4][1] = "SectPos_Start"
      1143. $ImageArray[5][0] = $SectDatSize
      1144. $ImageArray[5][1] = "SectDatSize"
      1145. $ImageArray[6][0] = $PointerToRawData
      1146. $ImageArray[6][1] = "PointerToRawData"
      1147. $ImageArray[7][0] = $StartPos_Of_ResRawData
      1148. $ImageArray[7][1] = "StartPos_Of_ResRawData"
      1149. $SectIndex = $i
      1150. $ImageArray[8][0] = $SectIndex
      1151. $ImageArray[8][1] = "SECTION Index"
      1152. EndIf
      1153. EndIf
      1154. $MovePos += DllStructGetSize($IMAGE_SECTION_HEADER)
      1155. Next
      1156. $ImageSize = $PointerToRawData + $SectDatSize
      1157. $ImageArray[9][0] = $ImageSize
      1158. $ImageArray[9][1] = "Image Size"
      1159. Return $ImageArray
      1160. EndFunc
      1161. Func CRE_IMAGE_SECTION_HEADER($BytePtr = 0)
      1162. Local $IMAGE_SIZEOF_SHORT_NAME = 8
      1163. $Tag = _ ;// IMAGE_SECTION_HEADER C++6 WINNT.H without union
      1164. "byte Name[' & $IMAGE_SIZEOF_SHORT_NAME & '];" & _
      1165. "dword Misc;" & _
      1166. "dword VirtualAddress;" & _
      1167. "dword SizeOfRawData;" & _
      1168. "dword PointerToRawData;" & _
      1169. "dword PointerToRelocations;" & _
      1170. "dword PointerToLinenumbers;" & _
      1171. "ushort NumberOfRelocations;" & _
      1172. "ushort NumberOfLinenumbers;" & _
      1173. "dword Characteristics"
      1174. if ($BytePtr) Then _
      1175. Return MRtlMoveMemory($Tag,$BytePtr,40)
      1176. ;reading the IMAGE_SECTION_HEADER
      1177. Return DllStructCreate($Tag) ;Create
      1178. EndFunc
      1179. Func CRE_IMAGE_DATA_DIR($BytePtr = 0)
      1180. Local $Tag = _ ;// IMAGE_DATA_DIRECTORY C++6 WINNT.H
      1181. "dword VirtualAddress;" & _
      1182. "dword Size"
      1183. if ($BytePtr) Then _
      1184. Return MRtlMoveMemory($Tag,$BytePtr,8)
      1185. Return DllStructCreate($Tag) ;Create
      1186. EndFunc
      1187. Func CRE_IMAGE_OPTIONAL_HEADER($BytePtr = 0)
      1188. Local $Tag = _ ;// IMAGE_OPTIONAL_HEADER C++6 WINNT.H
      1189. "ushort Magic;" & _
      1190. "ubyte MajorLinkerVersion;" & _
      1191. "ubyte MinorLinkerVersion;" & _
      1192. "dword SizeOfCode;" & _
      1193. "dword SizeOfInitializedData;" & _
      1194. "dword SizeOfUninitializedData;" & _
      1195. "dword AddressOfEntryPoint;" & _
      1196. "dword BaseOfCode;" & _
      1197. "dword BaseOfData;" & _
      1198. "dword ImageBase;" & _
      1199. "dword SectionAlignment;" & _
      1200. "dword FileAlignment;" & _
      1201. "ushort MajorOperatingSystemVersion;" & _
      1202. "ushort MinorOperatingSystemVersion;" & _
      1203. "ushort MajorImageVersion;" & _
      1204. "ushort MinorImageVersion;" & _
      1205. "ushort MajorSubsystemVersion;" & _
      1206. "ushort MinorSubsystemVersion;" & _
      1207. "dword Win32VersionValue;" & _
      1208. "dword SizeOfImage;" & _
      1209. "dword SizeOfHeaders;" & _
      1210. "dword CheckSum;" & _
      1211. "ushort Subsystem;" & _
      1212. "ushort DllCharacteristics;" & _
      1213. "dword SizeOfStackReserve;" & _
      1214. "dword SizeOfStackCommit;" & _
      1215. "dword SizeOfHeapReserve;" & _
      1216. "dword SizeOfHeapCommit;" & _
      1217. "dword LoaderFlags;" & _
      1218. "dword NumberOfRvaAndSizes;" & _
      1219. "byte byteData[128]"
      1220. ; 128 ==> sizeof(IMAGE_DATA_DIRECTORY) * IMAGE_NUMBEROF_DIRECTORY_ENTRIES
      1221. if ($BytePtr) Then _
      1222. Return MRtlMoveMemory($Tag,$BytePtr,224)
      1223. Return DllStructCreate($Tag) ;Create
      1224. EndFunc
      1225. Func CRE_IMAGE_FILE_HEADER ($BytePtr = 0)
      1226. $Tag = _ ;//File header format C++6 WINNT.H
      1227. "ushort Machine;" & _
      1228. "ushort NumberOfSections;" & _
      1229. "dword TimeDateStamp;" & _
      1230. "dword PointerToSymbolTable;" & _
      1231. "dword NumberOfSymbols;" & _
      1232. "ushort SizeOfOptionalHeader;" & _
      1233. "ushort Characteristics"
      1234. if ($BytePtr) Then _
      1235. Return MRtlMoveMemory($Tag,$BytePtr,20) ;reading the File header format
      1236. Return DllStructCreate($Tag) ;Create
      1237. EndFunc
      1238. Func CRE_IMAGE_DOS_HEADER($BytePtr = 0)
      1239. $Tag = _ ;// DOS .EXE header C++6 WINNT.H
      1240. "ushort magic;" & _ ;// Magic number
      1241. "ushort cblp;" & _ ;// Bytes on last page of file
      1242. "ushort cp;" & _ ;// Pages in file
      1243. "ushort crlc;" & _ ;// Relocations
      1244. "ushort cparhdr;" & _ ;// Size of header in paragraphs
      1245. "ushort minalloc;" & _ ;// Minimum extra paragraphs needed
      1246. "ushort maxalloc;" & _ ;// Maximum extra paragraphs needed
      1247. "ushort ss;" & _ ;// Initial (relative) SS value
      1248. "ushort sp;" & _ ;// Initial SP value
      1249. "ushort csum;" & _ ;// Checksum
      1250. "ushort ip;" & _ ;// Initial IP value
      1251. "ushort cs;" & _ ;// Initial (relative) CS value
      1252. "ushort lfarlc;" & _ ;// File address of relocation table
      1253. "ushort ovno;" & _ ;// Overlay number
      1254. "ushort res[4];" & _ ;// Reserved words
      1255. "ushort oemid;" & _ ;// OEM identifier (for e_oeminfo)
      1256. "ushort oeminfo;" & _ ;// OEM information; e_oemid specific
      1257. "ushort res2[10];" & _ ;// Reserved words
      1258. "dword lfanew" ;// File address of new e
      1259. if ($BytePtr) Then _
      1260. Return MRtlMoveMemory($Tag,$BytePtr,64) ;reading the dos header
      1261. Return DllStructCreate($Tag) ;Create
      1262. EndFunc
      1263. Func CRE_IMAGE_RES_DIR($BytePtr = 0 , $Entries = 0)
      1264. $Tag = _
      1265. "dword Characteristics;" & _
      1266. "dword TimeDateStamp;" & _
      1267. "ushort MajorVersion;" & _
      1268. "ushort MinorVersion;" & _
      1269. "ushort NumberOfNamedEntries;" & _
      1270. "ushort NumberOfIdEntries"
      1271. if ($BytePtr) Then
      1272. $Struct = DllStructCreate($Tag,$BytePtr)
      1273. $Entries = DllStructGetData($Struct,"NumberOfIdEntries") _
      1274. + DllStructGetData($Struct,"NumberOfNamedEntries")
      1275. $Tag &= ";byte byteData[' & $Entries * 8 & ']"
      1276. ;Entries * Sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY)
      1277. Return DllStructCreate($Tag,$BytePtr) ;Create
      1278. Else
      1279. if $Entries = 0 Then Return DllStructCreate($Tag) ;Create
      1280. $Tag &= ";byte byteData[' & $Entries * 8 & ']"
      1281. ;Entries * Sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY)
      1282. Return DllStructCreate($Tag) ;Create
      1283. EndIf
      1284. EndFunc
      1285. Func CRE_IMAGE_RES_ENT($BytePtr = 0)
      1286. $Tag = _ ;C++6 WINNT.H without union
      1287. "DWORD Name;" & _
      1288. "DWORD OffsetToData"
      1289. if ($BytePtr) Then Return DllStructCreate($Tag,$BytePtr)
      1290. Return DllStructCreate($Tag) ;Create
      1291. EndFunc
      1292. Func CRE_IMAGE_RES_DAT($BytePtr = 0)
      1293. $Tag = _
      1294. "DWORD OffsetToData;" & _
      1295. "DWORD Size;" & _
      1296. "DWORD CodePage;" & _
      1297. "DWORD Reserved"
      1298. if ($BytePtr) Then Return DllStructCreate($Tag,$BytePtr)
      1299. Return DllStructCreate($Tag) ;Create
      1300. EndFunc
      1301. Func CRE_IMAGE_RES_DIR_STRING_U($BytePtr = 0,$Length = 0)
      1302. Local $FILENAME_MAX = 260
      1303. if $Length = 0 Then $Length = $FILENAME_MAX
      1304. $Tag = "ushort Length;wchar NameString['& $Length & ']";C++6 WINNT.H
      1305. if ($BytePtr) Then Return DllStructCreate($Tag,$BytePtr)
      1306. Return DllStructCreate($Tag) ;Create
      1307. EndFunc
      1308. Func ReadStringName($Name,$hFile,$StartPos_Of_ResRawData)
      1309. Local $nBytes
      1310. $NameOffset = NameOffset($Name)
      1311. $MovePos = $StartPos_Of_ResRawData + $NameOffset
      1312. _WinAPI_SetFilePointer($hFile,$MovePos)
      1313. $IMAGE_RESOURCE_DIR_STRING_U = CRE_IMAGE_RES_DIR_STRING_U()
      1314. $PIMAGE_RESOURCE_DIR_STRING_U = DllStructGetPtr($IMAGE_RESOURCE_DIR_STRING_U)
      1315. $Size = DllStructGetSize($IMAGE_RESOURCE_DIR_STRING_U)
      1316. _WinAPI_ReadFile($hFile,$PIMAGE_RESOURCE_DIR_STRING_U,$Size,$nBytes)
      1317. $Length = DllStructGetData($IMAGE_RESOURCE_DIR_STRING_U,"Length")
      1318. $NameString = DllStructGetData($IMAGE_RESOURCE_DIR_STRING_U,"NameString")
      1319. Return StringLeft($NameString, $Length)
      1320. EndFunc
      1321. Func WRITE_StringName($hFile,$MovePos,$IMAGE_RESOURCE_DIR_STRING_U)
      1322. Local $nBytes
      1323. _WinAPI_SetFilePointer($hFile,$MovePos)
      1324. $Size = DllStructGetSize($IMAGE_RESOURCE_DIR_STRING_U)
      1325. $PIMAGE_RESOURCE_DIR_STRING_U = DllStructGetPtr($IMAGE_RESOURCE_DIR_STRING_U)
      1326. Return _WinAPI_WriteFile($hFile,$PIMAGE_RESOURCE_DIR_STRING_U,$Size,$nBytes)
      1327. EndFunc
      1328. Func READ_SECTION($hFile,$MovePos,$Size)
      1329. Local $nBytes
      1330. _WinAPI_SetFilePointer($hFile,$MovePos)
      1331. $byteStruct = DllStructCreate("byte[' & $Size & ']")
      1332. $byteStructPtr = DllStructGetPtr($byteStruct)
      1333. _WinAPI_ReadFile($hFile,$byteStructPtr,$Size,$nBytes)
      1334. Return $byteStruct
      1335. EndFunc
      1336. Func WRITE_SECTION($hFile,$MovePos,$byteStruct)
      1337. Local $nBytes
      1338. _WinAPI_SetFilePointer($hFile,$MovePos)
      1339. $Size = DllStructGetSize($byteStruct)
      1340. $byteStructPtr = DllStructGetPtr($byteStruct)
      1341. _WinAPI_WriteFile($hFile,$byteStructPtr,$Size,$nBytes)
      1342. EndFunc
      1343. Func READ_Data($hFile,$MovePos,$Size)
      1344. Local $nBytes
      1345. _WinAPI_SetFilePointer($hFile,$MovePos)
      1346. $byteStruct = DllStructCreate("char[' & $Size & ']")
      1347. $byteStructPtr = DllStructGetPtr($byteStruct)
      1348. _WinAPI_ReadFile($hFile,$byteStructPtr,$Size,$nBytes)
      1349. Return $byteStruct
      1350. EndFunc
      1351. Func WRITE_Data($hFile,$MovePos,$byteStruct)
      1352. Local $nBytes
      1353. _WinAPI_SetFilePointer($hFile,$MovePos)
      1354. $Size = DllStructGetSize($byteStruct)
      1355. $byteStructPtr = DllStructGetPtr($byteStruct)
      1356. _WinAPI_WriteFile($hFile,$byteStructPtr,$Size,$nBytes)
      1357. EndFunc
      1358. Func READ_IMAGE_DOS_HEADER($hFile,$MovePos)
      1359. Local $nBytes
      1360. _WinAPI_SetFilePointer($hFile,$MovePos)
      1361. $IMAGE_DOS_HEADER = CRE_IMAGE_DOS_HEADER()
      1362. $Size = DllStructGetSize($IMAGE_DOS_HEADER)
      1363. $PIMAGE_DOS_HEADER = DllStructGetPtr($IMAGE_DOS_HEADER)
      1364. _WinAPI_ReadFile($hFile,$PIMAGE_DOS_HEADER,$Size,$nBytes)
      1365. Return $IMAGE_DOS_HEADER
      1366. EndFunc
      1367. Func WRITE_IMAGE_DOS_HEADER($hFile,$MovePos,$IMAGE_DOS_HEADER)
      1368. Local $nBytes
      1369. _WinAPI_SetFilePointer($hFile,$MovePos)
      1370. $Size = DllStructGetSize($IMAGE_DOS_HEADER)
      1371. $PIMAGE_DOS_HEADER = DllStructGetPtr($IMAGE_DOS_HEADER)
      1372. Return _WinAPI_WriteFile($hFile,$PIMAGE_DOS_HEADER,$Size,$nBytes)
      1373. EndFunc
      1374. Func READ_Signature($hFile,$MovePos)
      1375. Local $nBytes
      1376. _WinAPI_SetFilePointer($hFile,$MovePos)
      1377. $Tag_Signature = "dword Signature"
      1378. $Signature = DllStructCreate($Tag_Signature)
      1379. $PSignature = DllStructGetPtr($Signature)
      1380. $Size = DllStructGetSize($Signature)
      1381. _WinAPI_ReadFile($hFile,$PSignature,$Size,$nBytes)
      1382. Return $Signature
      1383. EndFunc
      1384. Func WRITE_Signature($hFile,$MovePos,$Signature)
      1385. Local $nBytes
      1386. _WinAPI_SetFilePointer($hFile,$MovePos)
      1387. $Size = DllStructGetSize($Signature)
      1388. $PSignature = DllStructGetPtr($Signature)
      1389. Return _WinAPI_WriteFile($hFile,$PSignature,$Size,$nBytes)
      1390. EndFunc
      1391. Func READ_IMAGE_FILE_HEADER($hFile,$MovePos)
      1392. Local $nBytes
      1393. _WinAPI_SetFilePointer($hFile,$MovePos)
      1394. $IMAGE_FILE_HEADER = CRE_IMAGE_FILE_HEADER()
      1395. $Size = DllStructGetSize($IMAGE_FILE_HEADER)
      1396. $PIMAGE_FILE_HEADER = DllStructGetPtr($IMAGE_FILE_HEADER)
      1397. _WinAPI_ReadFile($hFile,$PIMAGE_FILE_HEADER,$Size,$nBytes)
      1398. Return $IMAGE_FILE_HEADER
      1399. EndFunc
      1400. Func WRITE_IMAGE_FILE_HEADER($hFile,$MovePos,$IMAGE_FILE_HEADER)
      1401. Local $nBytes
      1402. _WinAPI_SetFilePointer($hFile,$MovePos)
      1403. $Size = DllStructGetSize($IMAGE_FILE_HEADER)
      1404. $PIMAGE_FILE_HEADER = DllStructGetPtr($IMAGE_FILE_HEADER)
      1405. Return _WinAPI_WriteFile($hFile,$PIMAGE_FILE_HEADER,$Size,$nBytes)
      1406. EndFunc
      1407. Func READ_IMAGE_OPTIONAL_HEADER($hFile,$MovePos)
      1408. Local $nBytes
      1409. _WinAPI_SetFilePointer($hFile,$MovePos)
      1410. $IMAGE_OPTIONAL_HEADER = CRE_IMAGE_OPTIONAL_HEADER()
      1411. $Size = DllStructGetSize($IMAGE_OPTIONAL_HEADER)
      1412. $PIMAGE_OPTIONAL_HEADER = DllStructGetPtr($IMAGE_OPTIONAL_HEADER)
      1413. _WinAPI_ReadFile($hFile,$PIMAGE_OPTIONAL_HEADER,$Size,$nBytes)
      1414. Return $IMAGE_OPTIONAL_HEADER
      1415. EndFunc
      1416. Func WRITE_IMAGE_OPTIONAL_HEADER($hFile,$MovePos,$IMAGE_OPTIONAL_HEADER)
      1417. Local $nBytes
      1418. _WinAPI_SetFilePointer($hFile,$MovePos)
      1419. $Size = DllStructGetSize($IMAGE_OPTIONAL_HEADER)
      1420. $PIMAGE_OPTIONAL_HEADER = DllStructGetPtr($IMAGE_OPTIONAL_HEADER)
      1421. Return _WinAPI_WriteFile($hFile,$PIMAGE_OPTIONAL_HEADER,$Size,$nBytes)
      1422. EndFunc
      1423. Func READ_IMAGE_SECTION_HEADER($hFile,$MovePos)
      1424. Local $nBytes
      1425. _WinAPI_SetFilePointer($hFile,$MovePos)
      1426. $IMAGE_SECTION_HEADER = CRE_IMAGE_SECTION_HEADER()
      1427. $Size = DllStructGetSize($IMAGE_SECTION_HEADER)
      1428. $PIMAGE_SECTION_HEADER = DllStructGetPtr($IMAGE_SECTION_HEADER)
      1429. _WinAPI_ReadFile($hFile,$PIMAGE_SECTION_HEADER,$Size,$nBytes)
      1430. Return $IMAGE_SECTION_HEADER
      1431. EndFunc
      1432. Func WRITE_IMAGE_SECTION_HEADER($hFile,$MovePos,$IMAGE_SECTION_HEADER)
      1433. Local $nBytes
      1434. if $MovePos <> 0 Then _WinAPI_SetFilePointer($hFile,$MovePos)
      1435. $Size = DllStructGetSize($IMAGE_SECTION_HEADER)
      1436. $PIMAGE_SECTION_HEADER = DllStructGetPtr($IMAGE_SECTION_HEADER)
      1437. Return _WinAPI_WriteFile($hFile,$PIMAGE_SECTION_HEADER,$Size,$nBytes)
      1438. EndFunc
      1439. Func READ_IMAGE_RES_DIR($hFile,$StartPos_Of_ResRawData , $OffsetToDirectory)
      1440. Local $nBytes
      1441. $MovePos = $StartPos_Of_ResRawData + $OffsetToDirectory
      1442. _WinAPI_SetFilePointer($hFile,$MovePos)
      1443. $IMAGE_RESOURCE_DIRECTORY = CRE_IMAGE_RES_DIR()
      1444. $PIMAGE_RESOURCE_DIRECTORY = DllStructGetPtr($IMAGE_RESOURCE_DIRECTORY)
      1445. $ISize = DllStructGetSize($IMAGE_RESOURCE_DIRECTORY)
      1446. _WinAPI_ReadFile($hFile,$PIMAGE_RESOURCE_DIRECTORY,$ISize,$nBytes)
      1447. Return $IMAGE_RESOURCE_DIRECTORY
      1448. EndFunc
      1449. Func WRITE_IMAGE_RES_DIR($hFile,$MovePos,$IMAGE_RESOURCE_DIRECTORY)
      1450. Local $nBytes
      1451. _WinAPI_SetFilePointer($hFile,$MovePos)
      1452. $Size = DllStructGetSize($IMAGE_RESOURCE_DIRECTORY)
      1453. $PIMAGE_RESOURCE_DIRECTORY = DllStructGetPtr($IMAGE_RESOURCE_DIRECTORY)
      1454. Return _WinAPI_WriteFile($hFile,$PIMAGE_RESOURCE_DIRECTORY,$Size,$nBytes)
      1455. EndFunc
      1456. Func READ_IMAGE_RES_ENT($hFile,$StartPos_Of_ResRawData ,$OffsetToDirectory)
      1457. Local $nBytes
      1458. $MovePos = $StartPos_Of_ResRawData + $OffsetToDirectory
      1459. _WinAPI_SetFilePointer($hFile,$MovePos)
      1460. $IMAGE_RESOURCE_DIRECTORY_ENTRY = CRE_IMAGE_RES_ENT()
      1461. $PIMAGE_RESOURCE_DIRECTORY_ENTRY = DllStructGetPtr($IMAGE_RESOURCE_DIRECTORY_ENTRY)
      1462. $ISize = DllStructGetSize($IMAGE_RESOURCE_DIRECTORY_ENTRY)
      1463. _WinAPI_ReadFile($hFile,$PIMAGE_RESOURCE_DIRECTORY_ENTRY,$ISize,$nBytes)
      1464. Return $IMAGE_RESOURCE_DIRECTORY_ENTRY
      1465. EndFunc
      1466. Func WRITE_IMAGE_RES_EN($hFile,$MovePos,$IMAGE_RESOURCE_DIRECTORY_ENTRY)
      1467. Local $nBytes
      1468. _WinAPI_SetFilePointer($hFile,$MovePos)
      1469. $Size = DllStructGetSize($IMAGE_RESOURCE_DIRECTORY_ENTRY)
      1470. $PIMAGE_RESOURCE_DIRECTORY_ENTRY = DllStructGetPtr($IMAGE_RESOURCE_DIRECTORY_ENTRY)
      1471. Return _WinAPI_WriteFile($hFile,$PIMAGE_RESOURCE_DIRECTORY_ENTRY,$Size,$nBytes)
      1472. EndFunc
      1473. Func READ_IMAGE_RES_DAT($hFile,$StartPos_Of_ResRawData , $OffsetToDirectory)
      1474. Local $nBytes
      1475. $MovePos = $StartPos_Of_ResRawData + $OffsetToDirectory
      1476. _WinAPI_SetFilePointer($hFile,$MovePos)
      1477. $IMAGE_RESOURCE_DATA_ENTRY = CRE_IMAGE_RES_DAT()
      1478. $PIMAGE_RESOURCE_DATA_ENTRY = DllStructGetPtr($IMAGE_RESOURCE_DATA_ENTRY)
      1479. $ISize = DllStructGetSize($IMAGE_RESOURCE_DATA_ENTRY)
      1480. _WinAPI_ReadFile($hFile,$PIMAGE_RESOURCE_DATA_ENTRY,$ISize,$nBytes)
      1481. Return $IMAGE_RESOURCE_DATA_ENTRY
      1482. EndFunc
      1483. Func WRITE_IMAGE_RES_DAT($hFile,$MovePos,$IMAGE_RESOURCE_DATA_ENTRY)
      1484. Local $nBytes
      1485. _WinAPI_SetFilePointer($hFile,$MovePos)
      1486. $Size = DllStructGetSize($IMAGE_RESOURCE_DATA_ENTRY)
      1487. $PIMAGE_RESOURCE_DATA_ENTRY = DllStructGetPtr($IMAGE_RESOURCE_DATA_ENTRY)
      1488. Return _WinAPI_WriteFile($hFile,$PIMAGE_RESOURCE_DATA_ENTRY,$Size,$nBytes)
      1489. EndFunc
      1490. Func OffsetToDirectory($RESOURCE_DWORD_OffsetToData)
      1491. Local $MAXLONG = 0x7fffffff ;C++6 WINNT.H
      1492. Return int(BitAND(int($RESOURCE_DWORD_OffsetToData),int($MAXLONG))) ;;Return OffsetToDirectory
      1493. EndFunc
      1494. Func NameOffset($RESOURCE_DWORD_Name)
      1495. Local $MAXLONG = 0x7fffffff ;C++6 WINNT.H
      1496. Return int(BitAND(int($RESOURCE_DWORD_Name),int($MAXLONG))) ;Return NameOffset
      1497. EndFunc
      1498. Func DataIsDirectory($RESOURCE_DWORD_OffsetToData)
      1499. Local $IMAGE_RESOURCE_DATA_IS_DIRECTORY = 0x80000000 ;C++6 WINNT.H
      1500. Return int(BitAND(int($RESOURCE_DWORD_OffsetToData) , int($IMAGE_RESOURCE_DATA_IS_DIRECTORY))) <> 0 ;Return BOOL
      1501. EndFunc
      1502. Func NameIsString($RESOURCE_DWORD_Name)
      1503. Local $IMAGE_RESOURCE_NAME_IS_STRING = 0x80000000 ;C++6 WINNT.H
      1504. Return int(BitAND(int($RESOURCE_DWORD_Name) , int($IMAGE_RESOURCE_NAME_IS_STRING))) <> 0 ;Return BOOL
      1505. EndFunc
      1506. Func IS_DIRECTORY_SECTION($SECTION_VirtualAddress _
      1507. ,$SECTION_SizeOfRawData _
      1508. ,$SECTION_PointerToRawData _
      1509. ,$DIRECTORY_VirtualAddress)
      1510. $SectPos_Start = $SECTION_VirtualAddress ; SECTION Pos Start
      1511. $SectDatSize = $SECTION_SizeOfRawData ; SECTION Pos Size
      1512. $SectPos_End = $SectPos_Start + $SectDatSize ; SECTION Pos End
      1513. $DirData_Pos_Start = $DIRECTORY_VirtualAddress ; DIRECTORY Pos Start
      1514. $PointerToRawData = $SECTION_PointerToRawData ;SECTION PointerToRawData
      1515. if ($SectPos_Start <= $DirData_Pos_Start) And ($DirData_Pos_Start <= $SectPos_End) Then
      1516. Return (($DirData_Pos_Start - $SectPos_Start) + $PointerToRawData) ;Return Start Pos Of DIRECTORY In RawData
      1517. Else
      1518. Return 0 ;Return 0
      1519. EndIf
      1520. EndFunc
      1521. Func GetFirstOffsetToData($TypeEntries)
      1522. Local $MAXLONG = 0x7fffffff
      1523. $FirstOffsetToDirectory = $TypeEntries * 8 + 16
      1524. $FirstOffsetToData = int($MAXLONG) + $FirstOffsetToDirectory + 1
      1525. Return $FirstOffsetToData
      1526. EndFunc
      1527. Func ROUND_UP($number, $alignment)
      1528. Return int(BitAND((($number) + (($alignment) - 1)) , _
      1529. (BitNOT(($alignment) - 1))))
      1530. EndFunc
      1531. Func RtlMoveMemory($sourcePtr,$destPtr,$MovePos)
      1532. DllCall("Kernel32.dll","none","RtlMoveMemory","ptr",$sourcePtr,"ptr",$destPtr,"dword",$MovePos)
      1533. EndFunc
      1534. Func MRtlMoveMemory($Tag_Struct,$Ptr,$MovePos)
      1535. $Struct = DllStructCreate($Tag_Struct)
      1536. $StructPtr = DllStructGetPtr($Struct)
      1537. DllCall("Kernel32.dll","none","RtlMoveMemory","ptr",$StructPtr,"ptr",$Ptr,"dword",$MovePos)
      1538. Return $Struct
      1539. EndFunc
      1540. Func WINAPIOpenFile($lpFileName,$uStyle)
      1541. $Tag_OFSTRUCT = _
      1542. "byte cBytes;" & _
      1543. "byte fFixedDisk;" & _
      1544. "ushort nErrCode;" & _
      1545. "ushort Reserved1;" & _
      1546. "ushort Reserved2;" & _
      1547. "char szPathName[260]"
      1548. $OFSTRUCT = DllStructCreate($Tag_OFSTRUCT)
      1549. $lpReOpenBuff = DllStructGetPtr($OFSTRUCT)
      1550. $HFILE = DllCall("Kernel32.dll","hwnd","OpenFile","str",$lpFileName,"ptr",$lpReOpenBuff,"long",$uStyle)
      1551. if Not @error Then Return $HFILE[0]
      1552. Return 0
      1553. EndFunc
      عرض الكل
      UpdateResource.au3

      PHP كود المصدر

      1. #Include "AutoitResHacker.au3"
      2. #Include <Array.au3>
      3. $ImageArray = BeginUpdateResource("ComPile_No_UPX.exe","OutFile.exe")
      4. $Tex = ""
      5. For $i = 100 To 130
      6. $Tex &= $i
      7. $Struct = DllStructCreate("char[' & StringLen($Tex) & ']")
      8. DllStructGetData($Struct,$Tex)
      9. $Data_Size = DllStructGetSize($Struct)
      10. $Data_Ptr = DllStructGetPtr($Struct)
      11. $ImageArray = UpdateResource($ImageArray,$i,"ResName",$i,$Data_Ptr,$Data_Size)
      12. Next
      13. $Tex = ""
      14. For $i = 130 To 160
      15. $Tex &= $i
      16. $Struct = DllStructCreate("char[' & StringLen($Tex) & ']")
      17. DllStructGetData($Struct,$Tex)
      18. $Data_Size = DllStructGetSize($Struct)
      19. $Data_Ptr = DllStructGetPtr($Struct)
      20. $ImageArray = UpdateResource($ImageArray,"ResType",$i,$i,$Data_Ptr,$Data_Size)
      21. Next
      22. $Tex = ""
      23. For $i = 160 To 190
      24. $Tex &= $i
      25. $Struct = DllStructCreate("char[' & StringLen($Tex) & ']")
      26. DllStructGetData($Struct,$Tex)
      27. $Data_Size = DllStructGetSize($Struct)
      28. $Data_Ptr = DllStructGetPtr($Struct)
      29. $ImageArray = UpdateResource($ImageArray,160,160,$i,$Data_Ptr,$Data_Size)
      30. Next
      31. EndUpdateResource($ImageArray)
      32. $ListArray = ResourceList("OutFile.exe")
      33. _ArrayDisplay($ListArray,"OutFile.exe")
      عرض الكل
      GetResource.au3

      PHP كود المصدر

      1. #Include "AutoitResHacker.au3"
      2. #include <GUIConstant***.au3>
      3. #include <WindowsConstants.au3>
      4. #include <ButtonConstants.au3>
      5. #include <StaticConstants.au3>
      6. Dim $SS_REALSIZEIMAGE = 0x00000800 , $RT_BITMAP = 2
      7. FileUpdateResource("ComPile_No_UPX.exe","AutoitImage.PNG","PNG","Autoit",0,"OutFile3.exe")
      8. $RtArray = LoadImageFromFreeResourc("OutFile3.exe","PNG","Autoit",0)
      9. $HBITMAP = $RtArray[1][1]
      10. $hGUI = GUICreate(" My GUI Bitmap", $RtArray[1][4] + 20 , $RtArray[1][5] + 20)
      11. $Pic1 = GUICtrlCreateLabel("", 10, 10,$RtArray[1][4], $RtArray[1][5],$WS_BORDER + $SS_CENTERIMAGE + $SS_REALSIZEIMAGE)
      12. STATIC_SETBITMAP($Pic1,$HBITMAP)
      13. GUISetState()
      14. While 1
      15. $msg = GUIGetMsg()
      16. If $msg = $GUI_EVENT_CLOSE Then ExitLoop
      17. WEnd
      18. GUIDelete()
      19. Exit
      20. Func LoadImageFromFreeResourc($ExeFile_DllFile , _
      21. $ResType,$ResName,$ResLang,$GDIPlus_ShutDown = True)
      22. ; $GDIP_IMAGETYPE_BITMAP - Bitmap types: BMP, PNG, GIF, JPEG, TIFF, ICO, EXIF [Return HBITMAP Handle AND imageobject[Bitmap Handle]]
      23. ;$GDIP_IMAGETYPE_METAFILE - Metafile types: EMF, WMF [Return HENHMETAFILE Handle (AND\OR) imageobject]
      24. ;$GDIP_IMAGETYPE_UNKNOWN [Return new object]
      25. Local $FindResource = FindResourceExW($ExeFile_DllFile,$ResType,$ResName,$ResLang)
      26. if $FindResource == 0 Then Return -1
      27. Local $SizeofResource = SizeofResource($FindResource)
      28. if $SizeofResource == 0 Then Return -2
      29. Local $LoadResource = LoadResource($FindResource)
      30. if $LoadResource == 0 Then Return -2
      31. Local $LockResource = LockResource($LoadResource)
      32. if $LockResource == 0 Then Return -3
      33. FindRes_CloseHandle($FindResource)
      34. Local $uFlags = 0x0002 , $dwBytes = $SizeofResource
      35. Local $hMemory = DllCall("Kernel32.dll","hwnd","GlobalAlloc","long",$uFlags,"long",$dwBytes)
      36. if @error Then
      37. Return -4
      38. Else
      39. $hMemory = $hMemory[0]
      40. if $hMemory = 0 Then Return -4
      41. EndIf
      42. Local $hLock = DllCall("Kernel32.dll","ptr","GlobalLock","hwnd",$hMemory)
      43. if @error Then
      44. Return -5
      45. Else
      46. $hLock = $hLock[0]
      47. if $hLock = 0 Then Return -5
      48. EndIf
      49. Local $Destination = $hLock , $Source = $LockResource, $Length = $SizeofResource
      50. DllCall("Kernel32.dll","none","RtlMoveMemory","ptr",$Destination,"ptr",$Source,"long",$Length)
      51. if @error Then
      52. Return -6
      53. EndIf
      54. Local $fDeleteOnRelease = True , $Status , $ppstm , $Error
      55. Local $Error = DllCall("Ole32.dll","int","CreateStreamOnHGlobal","ptr",$hLock ,"int",$fDeleteOnRelease,"ptr*",0)
      56. if @error Then
      57. Return -7
      58. Else
      59. if Not ($Error[0] = 0) Then Return -7
      60. $ppstm = $Error[3]
      61. EndIf
      62. Local $gdiplusOpen = DllOpen("gdiplus.dll")
      63. Local $ImageType = 0 , $ImageWidth = 0 ,$ImageHeight = 0 , $struct_GdiplusStartupInput , $Input , $LPInput , $VOID _
      64. , $LPVOID_token , $Status , $HBITMAP , $HENHMETAFILE , $GdiPlus_Dll_Hwnd , $GdiPlus_Token
      65. $struct_GdiplusStartupInput = _
      66. "int GdiplusVersion;" & _
      67. "int DebugEventCallback;" & _
      68. "int SuppressBackgroundThread;" & _
      69. "int Suppres***ternalCodecs;"
      70. $Input = DllStructCreate($struct_GdiplusStartupInput)
      71. DllStructSetData($Input,"GdiplusVersion",1)
      72. DllStructSetData($Input,"DebugEventCallback",0)
      73. DllStructSetData($Input,"SuppressBackgroundThread",0)
      74. DllStructSetData($Input,"Suppres***ternalCodecs",0)
      75. $LPInput = DllStructGetPtr($Input)
      76. $VOID = DllStructCreate("int")
      77. $LPVOID_token = DllStructGetPtr($VOID)
      78. $Status = DllCall($gdiplusOpen,"int","GdiplusStartup","ptr",$LPVOID_token,"ptr",$LPInput,"ptr",0)
      79. if @error Then
      80. Return -8
      81. Else
      82. if Not ($Status[0] = 0) Then Return -8
      83. $LPVOID_token = $Status[1]
      84. EndIf
      85. Local $stream = $ppstm , $image = 0
      86. $Status = DllCall($gdiplusOpen,"int","GdipLoadImageFromStream","ptr",$stream,"int*",$image)
      87. if @error Then
      88. Return -9
      89. Else
      90. if Not ($Status[0] = 0) Then Return -9
      91. $image = $Status[2]
      92. EndIf
      93. $Status = DllCall($gdiplusOpen,"int","GdipGetImageWidth","hwnd",$image,"int*",0)
      94. if Not @error Then
      95. if $Status[0] = 0 Then $ImageWidth = $Status[2]
      96. EndIf
      97. $Status = DllCall($gdiplusOpen,"int","GdipGetImageHeight","hwnd",$image,"int*",0)
      98. if Not @error Then
      99. if $Status[0] = 0 Then $ImageHeight = $Status[2]
      100. EndIf
      101. $Status = DllCall($gdiplusOpen,"int","GdipGetImageType","hwnd",$image,"int*",0)
      102. if Not @error Then
      103. Local $Case = $Status[2]
      104. Select
      105. Case $Case = 0
      106. $ImageType = "ImageTypeUnknown"
      107. Case $Case = 1
      108. $ImageType = "ImageTypeBitmap"
      109. $Status = DllCall($gdiplusOpen, "int", "GdipCreateHBITMAPFromBitmap", "hwnd", $image, "int*", 0, "int", 0)
      110. if Not @error Then
      111. if ($Status[0] = 0) Then $HBITMAP = $Status[2]
      112. EndIf
      113. Case $Case = 2
      114. $ImageType = "ImageTypeMetafile"
      115. Local $metafile = $image
      116. $Status = DllCall($gdiplusOpen,"int","GdipGetHemfFromMetafile","hwnd",$metafile,"int*",0)
      117. if Not @error Then
      118. if ($Status[0] = 0) Then $HENHMETAFILE = $Status[2]
      119. EndIf
      120. EndSelect
      121. EndIf
      122. if $GDIPlus_ShutDown = True Then
      123. DllCall($gdiplusOpen,"int","GdiplusShutdown","ptr",$LPVOID_token)
      124. DllClose($gdiplusOpen)
      125. $GdiPlus_Dll_Hwnd = 0
      126. $GdiPlus_Token = 0
      127. Else
      128. $GdiPlus_Dll_Hwnd = $gdiplusOpen
      129. $GdiPlus_Token = $LPVOID_token
      130. EndIf
      131. Dim $RtArray[2][8]
      132. $RtArray[0][0] = "imageobject"
      133. $RtArray[0][1] = "HBITMAP"
      134. $RtArray[0][2] = "HENHMETAFILE"
      135. $RtArray[0][3] = "ImageType"
      136. $RtArray[0][4] = "ImageWidth"
      137. $RtArray[0][5] = "ImageHeight"
      138. $RtArray[0][6] = "GdiPlus Dll Hwnd "
      139. $RtArray[0][7] = "GdiPlus Token"
      140. $RtArray[1][0] = $image
      141. $RtArray[1][1] = $HBITMAP
      142. $RtArray[1][2] = $HENHMETAFILE
      143. $RtArray[1][3] = $ImageType
      144. $RtArray[1][4] = $ImageWidth
      145. $RtArray[1][5] = $ImageHeight
      146. $RtArray[1][6] = $GdiPlus_Dll_Hwnd
      147. $RtArray[1][7] = $GdiPlus_Token
      148. return $RtArray
      149. EndFunc
      150. Func FileUpdateResource($ExeFile_DllFile,$FileIn,$ResType,$ResName,$ResLang,$OutFile = "OutFile.exe")
      151. Local $nBytes ,$tSize ,$DataStruct ,$hFile , $tBuffer
      152. $hFile = _WinAPI_CreateFile($FileIn, 2,2)
      153. if Not $hFile Then Return -1
      154. $tSize = FileGetSize($FileIn) + 1
      155. $DataStruct = DllStructCreate("char[' & $tSize & ']")
      156. _WinAPI_ReadFile($hFile, DllStructGetPtr($DataStruct), $tSize, $nBytes)
      157. if @error Then
      158. _WinAPI_CloseHandle($hFile)
      159. return -2
      160. EndIf
      161. _WinAPI_CloseHandle($hFile)
      162. $ImageArray = BeginUpdateResource($ExeFile_DllFile,$OutFile)
      163. if Not IsArray($ImageArray) Then Return -3
      164. $Data_Size = DllStructGetSize($DataStruct)
      165. $Data_Ptr = DllStructGetPtr($DataStruct)
      166. $ImageArray = UpdateResource($ImageArray,$ResType,$ResName,$ResLang,$Data_Ptr,$Data_Size)
      167. if Not IsArray($ImageArray) Then Return -4
      168. Return EndUpdateResource($ImageArray)
      169. EndFunc
      170. Func STATIC_SETBITMAP($hWnd,$HandleImage)
      171. Local $GWL_STYLE = (-16) , $SS_BITMAP = 0x0000000E , $SS_ICON = 0x00000003 ,$STM_SETIMAGE = 0x0172
      172. If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
      173. if Not BitAND(_WinAPI_GetWindowLong($hWnd, $GWL_STYLE), $SS_BITMAP) = $SS_BITMAP Then
      174. _WinAPI_SetWindowLong($hWnd, $GWL_STYLE, _WinAPI_GetWindowLong($hWnd, $GWL_STYLE) + $SS_BITMAP )
      175. ElseIf BitAND(_WinAPI_GetWindowLong($hWnd, $GWL_STYLE), $SS_ICON) = $SS_ICON Then
      176. _WinAPI_SetWindowLong($hWnd, $GWL_STYLE, _WinAPI_GetWindowLong($hWnd, $GWL_STYLE) - $SS_ICON)
      177. EndIf
      178. Return _SendMessage($hWnd, $STM_SETIMAGE, 0, $HandleImage)
      179. EndFunc
      عرض الكل