AdjustTokenPrivileges

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

  1. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    Помогите с кодом пожалуйста?, не палучаеца выставить привелегии , программа не перезагружает Windows :dntknw:

    Код (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'
     
  2. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    Код (Text):
    1. invoke wsprintfA,ErrorCode,Fmt,0
    замените уже на
    Код (Text):
    1. cinvoke wsprintfA,ErrorCode,Fmt,0
     
  3. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    Спасибо огромное а что делает это макрос и чем они отличаются , invoke от cinvoka , ни когда не работал с ним.
     
  4. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    cinvoke это тот же самый invoke, но выполняет некоторые дополнительные действия, а именно - подчищает стек после вызова. Это необходимо после вызова функций, определённых как __cdecl. В WinAPI как __cdecl определены лишь функции, вызываемые с переменным числом аргументов, какой и является wsprintf. Загляните в отладчик.
     
  5. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.615
    Адрес:
    Russia
    fragment
    или добавьте явно
    Код (Text):
    1.  add esp,4*3
    после обычного инвока