Я или переработал, или дао меня покинуло - запоролся на такой ерунде... Вообщем, пытаюсь подрубить привилегии отладчика, но функция AdjustTokenPrivileges выдает ноль. GetLastError пишет ERROR_NOACCESS. Может кто нибудь посмотрит свежим взором на этот код и ткнет меня носом в то место, где у меня скривились руки (сразу оговорюсь - в системе я с правами админа)... Код (Text): EnableDebugPrivileges PROC LOCAL hToken: DWORD LOCAL SeDebugNameValue: LUID LOCAL tkp: TOKEN_PRIVILEGES invoke GetCurrentProcess xchg eax,ebx invoke OpenProcessToken,ebx,TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY,addr hToken test eax,eax jz exit_EnableDebugPrivileges invoke LookupPrivilegeValue,NULL,offset @SeDebugPrivilege,addr SeDebugNameValue .IF eax == 0 invoke CloseHandle,hToken xor eax,eax ret .ENDIF mov dword ptr[tkp].PrivilegeCount,1 push SeDebugNameValue.LowPart pop dword ptr[tkp].Privileges(0).Luid.LowPart push SeDebugNameValue.HighPart pop dword ptr[tkp].Privileges(0).Luid.HighPart mov dword ptr[tkp].Privileges(0).Attributes,SE_PRIVILEGE_ENABLED invoke AdjustTokenPrivileges,hToken,FALSE,addr tkp,SizeOf tkp,addr tkp,NULL ret exit_EnableDebugPrivileges: xor eax,eax ret EnableDebugPrivileges ENDP
Не помню где взял, но вариант рабочий, сравнивай Код (Text): EnableDebugPrivilege proc local hTokenNew:HANDLE local tkpNew:TOKEN_PRIVILEGES invoke GetCurrentProcess mov ecx,eax invoke OpenProcessToken,ecx,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,addr hTokenNew .if eax != 0 invoke LookupPrivilegeValue,0, $CT0("SeDebugPrivilege"),addr tkpNew.Privileges.Luid .if eax != 0 mov tkpNew.PrivilegeCount,1 mov tkpNew.Privileges.Attributes,SE_PRIVILEGE_ENABLED invoke AdjustTokenPrivileges,hTokenNew,0,addr tkpNew,0,0,0 .if eax != 0 invoke GetLastError .if eax == ERROR_SUCCESS mov eax,1 .else xor eax,eax .endif .endif .endif push eax invoke CloseHandle,hTokenNew pop eax .endif ret EnableDebugPrivilege endp
Я свой рабочий вариант выкидывать не буду(и 1 хватит ^_^) только хотел заметить что не надо дергать GetCurrentProcess проще в OpenProcessToken в первом параметре передать -1 (=InvaliDHandle по-моему) он поумолчанию из текущего процесса Token дергнет (так и быстрее и меньше занимает)
Twister Код (Text): Вообщем, пытаюсь подрубить привилегии отладчика, но функция AdjustTokenPrivileges выдает ноль. GetLastError пишет ERROR_NOACCESS У меня аналогичная ситуация, не пойму в чем проблема. Если разобрались напишите пожалуйста, где ошибка
Вот код, сложно ошибиться Код (Text): invoke OpenProcessToken,-1,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,offset hToken .IF eax !=0 invoke LookupPrivilegeValue,NULL,offset szPriv,offset tpNew.Privileges.Luid .IF eax !=0 mov tpNew.PrivilegeCount,1 mov tpNew.Privileges.Attributes,SE_PRIVILEGE_ENABLED invoke AdjustTokenPrivileges,hToken,0,offset tpNew,0,NULL,NULL .ENDIF .ENDIF invoke CloseHandle,hToken