resource data и fasm

Тема в разделе "WASM.BEGINNERS", создана пользователем fragment, 9 мар 2011.

  1. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    У меня такая проблема , прикремпил иконку файлу но на ехе она не такая качественная как была в оригенале ...
    Код (Text):
    1. format PE GUI 4.0
    2. entry Main
    3.  
    4. include 'win32a.inc'
    5.  
    6. SC_MANAGER_ALL_ACCESS   =   000F003Fh
    7. EWX_REBOOT      =   00000002h
    8. EWX_FORCE       =   00000004h
    9.  
    10. SE_PRIVILEGE_ENABLED    =   00000002h
    11. TOKEN_QUERY     =   00000008h
    12. TOKEN_ADJUST_PRIVILEGES =   00000020h
    13.  
    14. section '.data' data readable writeable
    15.  
    16.     RegValueName db 'SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System',0
    17.     RegValueKey  db 'EnableLUA',0
    18.     dwKey dd 00000000h
    19.  
    20.     hKey dd ?
    21.     hToken dd ?
    22.  
    23.     SE_SHUTDOWN_NAME db 'SeShutdownPrivilege',0
    24.  
    25.     struct LUID
    26.        LowPart  dd 0
    27.        HighPart dd 0
    28.     ends
    29.     struct LUID_AND_ATTRIBUTES
    30.        Luid       LUID
    31.        Attributes dd 0
    32.     ends
    33.  
    34.     struct TOKEN_PRIVILEGES
    35.        PrivilegeCount dd 0
    36.        Privileges LUID_AND_ATTRIBUTES
    37.     ends
    38.  
    39.     TokenPriv TOKEN_PRIVILEGES
    40.  
    41.     UnderUACMsg     db 'Пожалуйста запустите программу от имени администратора.',0
    42.     UACDisabledMsg      db 'Сохраните рабочие данные и закройте все программы, компьютер будет перезагружен!',0
    43.     Installation        db 'Installation',0
    44.  
    45. section '.code' code readable executable
    46.  
    47.   proc Main
    48.  
    49.     invoke OpenSCManagerA,NULL,NULL,SC_MANAGER_ALL_ACCESS
    50.     cmp eax,0
    51.     je .UAC
    52.  
    53.     invoke MessageBoxA,0,UACDisabledMsg,Installation,MB_OK+MB_ICONWARNING+MB_TOPMOST
    54.  
    55.     invoke GetCurrentProcess
    56.     invoke OpenProcessToken,eax,TOKEN_QUERY + TOKEN_ADJUST_PRIVILEGES,hToken
    57.  
    58.     invoke LookupPrivilegeValueA,NULL,SE_SHUTDOWN_NAME,TokenPriv.Privileges.Luid
    59.  
    60.     mov dword [TokenPriv.Privileges.Attributes],SE_PRIVILEGE_ENABLED
    61.     mov dword [TokenPriv.PrivilegeCount],1
    62.  
    63.     invoke AdjustTokenPrivileges,[hToken],FALSE,TokenPriv,0,NULL,NULL
    64.  
    65.     invoke CloseHandle,[hToken]
    66.  
    67.     invoke RegOpenKeyExA,HKEY_LOCAL_MACHINE,RegValueName,0,KEY_WRITE,hKey
    68.     invoke RegSetValueExA,[hKey],RegValueKey,0,REG_DWORD,dwKey,4
    69.     invoke RegCloseKey,[hKey]
    70.  
    71.     invoke ExitWindowsEx,EWX_REBOOT+EWX_FORCE,0
    72.     jmp exit
    73. .UAC:
    74.     invoke MessageBoxA,0,UnderUACMsg,Installation,MB_ICONWARNING+MB_TOPMOST
    75. exit:
    76.     invoke ExitProcess,0
    77.  
    78.   endp
    79.  
    80. section '.idata' import data readable
    81.  
    82.     library kernel,'KERNEL32.DLL',\
    83.         advapi,'ADVAPI32.DLL',\
    84.         user,'USER32.DLL'
    85.  
    86.     import advapi,\
    87.            RegOpenKeyExA,'RegOpenKeyExA',\
    88.            RegSetValueExA,'RegSetValueExA',\
    89.            RegCloseKey,'RegCloseKey',\
    90.            OpenProcessToken,'OpenProcessToken',\
    91.            AdjustTokenPrivileges,'AdjustTokenPrivileges',\
    92.            LookupPrivilegeValueA,'LookupPrivilegeValueA',\
    93.            OpenSCManagerA,'OpenSCManagerA'
    94.  
    95.     import kernel,\
    96.            ExitProcess,'ExitProcess',\
    97.            GetCurrentProcess,'GetCurrentProcess',\
    98.            CloseHandle,'CloseHandle',\
    99.            GetLastError,'GetLastError'
    100.  
    101.  
    102.     import user,\
    103.            ExitWindowsEx,'ExitWindowsEx',\
    104.            wsprintfA,'wsprintfA',\
    105.            MessageBoxA,'MessageBoxA'
    106.  
    107. section '.rsrc' resource data readable
    108.  
    109.     directory RT_ICON,icons,\
    110.           RT_GROUP_ICON,group_icons
    111.  
    112.     resource icons,\
    113.          1,LANG_NEUTRAL,icon_data
    114.  
    115.     resource group_icons,\
    116.          2,LANG_NEUTRAL,main_icon
    117.  
    118.     icon main_icon,icon_data,'install.ico'
    [​IMG]
     
  2. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    Почему появляется ошибка, как это исправить ?
    [​IMG]
     
  3. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    http://msdn.microsoft.com/en-us/library/dd371711.aspx
    Тут написано как исправить.
    Никакой иконки на скриншотах я не заметил, тем более в плохом качестве.
     
  4. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    Ну как же вот же она
    [​IMG]

    а фот сами файлы
    http://www.sendspace.com/file/ow5h87
     
  5. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Попробуйте распотрошить эту иконку на все её 10 составляющих и взять самую подходящую по размеру/качеству. Тут, возможно, FASM либо не все умеет добавлять в ресурсы такие "многостраничные" иконки, либо делает это неправильно.
     
  6. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    fragment, макросы фасм в самом деле не умеют обрабатывать иконки, содержащие несколько изображений разного размера. Есть простой способ – использовать .res файл, сгенерированный каким-нибудь редактором ресурсов или rc.exe (section '.rsrc' data resource from 'my.res'), есть неудобный – сохранять иконки так, чтобы в каждом исходном .ico-файле было только по одной иконке, и потом вручную собирать их в RT_GROUP_ICON, и, наконец, можно пофиксить макрос.