AdjustTokenPrivileges: ERROR_NOACCESS

Тема в разделе "WASM.WIN32", создана пользователем Twister, 29 июл 2006.

  1. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Я или переработал, или дао меня покинуло - запоролся на такой ерунде... Вообщем, пытаюсь подрубить привилегии отладчика, но функция AdjustTokenPrivileges выдает ноль. GetLastError пишет ERROR_NOACCESS. Может кто нибудь посмотрит свежим взором на этот код и ткнет меня носом в то место, где у меня скривились руки (сразу оговорюсь - в системе я с правами админа)...
    Код (Text):
    1. EnableDebugPrivileges PROC
    2.     LOCAL   hToken: DWORD
    3.     LOCAL   SeDebugNameValue: LUID
    4.     LOCAL   tkp: TOKEN_PRIVILEGES
    5.    
    6.     invoke  GetCurrentProcess
    7.     xchg    eax,ebx
    8.     invoke  OpenProcessToken,ebx,TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY,addr hToken
    9.     test    eax,eax
    10.     jz  exit_EnableDebugPrivileges
    11.     invoke  LookupPrivilegeValue,NULL,offset @SeDebugPrivilege,addr SeDebugNameValue
    12.     .IF eax == 0
    13.         invoke  CloseHandle,hToken
    14.         xor eax,eax
    15.         ret
    16.     .ENDIF
    17.     mov dword ptr[tkp].PrivilegeCount,1
    18.     push    SeDebugNameValue.LowPart
    19.     pop dword ptr[tkp].Privileges(0).Luid.LowPart
    20.     push    SeDebugNameValue.HighPart
    21.     pop dword ptr[tkp].Privileges(0).Luid.HighPart
    22.     mov dword ptr[tkp].Privileges(0).Attributes,SE_PRIVILEGE_ENABLED
    23.     invoke  AdjustTokenPrivileges,hToken,FALSE,addr tkp,SizeOf tkp,addr tkp,NULL
    24.     ret
    25. exit_EnableDebugPrivileges:
    26.     xor eax,eax
    27.     ret
    28. EnableDebugPrivileges ENDP
     
  2. BUGOR

    BUGOR New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2005
    Сообщения:
    44
    Не помню где взял, но вариант рабочий, сравнивай:)

    Код (Text):
    1. EnableDebugPrivilege proc
    2.     local hTokenNew:HANDLE
    3.     local tkpNew:TOKEN_PRIVILEGES
    4.    
    5.     invoke GetCurrentProcess
    6.     mov ecx,eax
    7.     invoke OpenProcessToken,ecx,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,addr hTokenNew
    8.     .if eax != 0
    9.       invoke LookupPrivilegeValue,0, $CT0("SeDebugPrivilege"),addr tkpNew.Privileges.Luid
    10.       .if eax != 0
    11.         mov tkpNew.PrivilegeCount,1
    12.         mov tkpNew.Privileges.Attributes,SE_PRIVILEGE_ENABLED
    13.         invoke AdjustTokenPrivileges,hTokenNew,0,addr tkpNew,0,0,0
    14.         .if eax != 0
    15.           invoke GetLastError
    16.           .if eax == ERROR_SUCCESS
    17.             mov eax,1
    18.           .else
    19.             xor eax,eax
    20.           .endif
    21.         .endif
    22.       .endif
    23.       push eax
    24.       invoke CloseHandle,hTokenNew
    25.       pop eax
    26.     .endif
    27.     ret
    28. EnableDebugPrivilege endp
     
  3. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Спасибо, буду сравнивать...
     
  4. AksakaL

    AksakaL New Member

    Публикаций:
    0
    Регистрация:
    29 ноя 2006
    Сообщения:
    18
    Я свой рабочий вариант выкидывать не буду(и 1 хватит ^_^) только хотел заметить что не надо дергать GetCurrentProcess
    проще в OpenProcessToken в первом параметре передать -1 (=InvaliDHandle по-моему) он поумолчанию из текущего процесса Token дергнет (так и быстрее и меньше занимает)
     
  5. S79

    S79 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2008
    Сообщения:
    20
    Twister
    Код (Text):
    1. Вообщем, пытаюсь подрубить привилегии отладчика, но функция AdjustTokenPrivileges выдает ноль. GetLastError пишет ERROR_NOACCESS
    У меня аналогичная ситуация, не пойму в чем проблема.
    Если разобрались напишите пожалуйста, где ошибка
     
  6. S79

    S79 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2008
    Сообщения:
    20
    Вот код, сложно ошибиться
    Код (Text):
    1.     invoke OpenProcessToken,-1,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,offset hToken
    2.     .IF eax !=0
    3.         invoke LookupPrivilegeValue,NULL,offset szPriv,offset tpNew.Privileges.Luid
    4.         .IF eax !=0
    5.             mov tpNew.PrivilegeCount,1
    6.             mov tpNew.Privileges.Attributes,SE_PRIVILEGE_ENABLED
    7.             invoke AdjustTokenPrivileges,hToken,0,offset tpNew,0,NULL,NULL
    8.         .ENDIF
    9.     .ENDIF
    10. invoke CloseHandle,hToken
     
  7. S79

    S79 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2008
    Сообщения:
    20
    Спасибо проблема решена гугл помог
     
  8. zxcc

    zxcc New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2006
    Сообщения:
    172
    S79
    Подскажи как решил проблему.