Приветствую! Столкнулся с интересной фишкой. Простейший код вида: Код (Text): format PE GUI 4.0 include 'include\win32ax.inc' entry $ invoke UrlDownloadToFile,0,_url,_dest,0,0 or eax,eax jne error invoke MessageBox, 0, 'Download Complete!', 'Finish', MB_OK invoke ShellExecute, 0, "Open", _dest, 0, 0, SW_SHOW jmp exit error: invoke MessageBox,0,'Download Failed!','Error',MB_OK jmp exit exit: invoke ExitProcess,0 ret proc callback,handle,reason,reserved cmp [reason],DLL_PROCESS_ATTACH jnz @f invoke MessageBox,0,0,0,0 @@: ret endp data 9 dd a ; StartAddressOfRawData; dd a ; EndAddressOfRawData dd a ; AddressOfIndex dd c ; AddressOfCallBacks a dd 0 ; c dd callback ; Array Of Callbacks dd 0 ; NULL - end of Array Of Callbacks end data section '.data' data readable writeable _url db 'http://ya.ru/1.jpg',0 _dest db 'c:\1.exe',0 section '.idata' import data readable writeable library urlmon,'urlmon.dll',\ user32,'user32.dll',\ kernel32,'kernel32.dll',\ shell,'SHELL32.DLL' import kernel32,\ ExitProcess,'ExitProcess' import urlmon,\ UrlDownloadToFile,'URLDownloadToFileA' import user32,\ MessageBox,'MessageBoxA' import shell,\ ShellExecute, 'ShellExecuteA' работает отлично. А вот если вызов UrlDownloadToFile перенести в callback - то на нём всё виснет... Попробовал продебажить - вызов, как положено, переадревуется UrlDownloadToFileW, далее идёт в недра urlmon.dll и где-то там подвисает... Кто-нибудь в курсе, с чем это связано? Видимо, не учёл что-то из особенностей TLS...
возможно связано с тем, что эта функция может создавать треды, а в колбеках это делать нельзя (как и в дллмейн)