Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > SeDebugPrivilege


Автор: Гость_Ring0D 1.1.2006, 13:11
С наступившим Новым Годом вас господа !
Подскажите пожалуйста : как правильно надо заполнить структуры такого вида :
tkp.PrivilegeCount := 1;
tkp.Privileges[0].Luid := SeDebugNameValue;
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;


Я хочу перевести функцию получения SeDebugPrivilege с Дельфи на ассемблер, пока вот что получилось :


.586p
.model flat, stdcall
option casemap :none

include \MASM32\INCLUDE\windows.inc
include \MASM32\INCLUDE\kernel32.inc
include \MASM32\INCLUDE\shell32.inc
include \MASM32\INCLUDE\advapi32.inc

includelib \MASM32\LIB\kernel32.lib
includelib \MASM32\LIB\shell32.lib
includelib \MASM32\LIB\advapi32.lib


.data
R TOKEN_PRIVILEGES <>
hToken dd ?
SeDebug dd ?
Se db "SeDebugPrivilege",0

.code

start:
;****************
invoke GetCurrentProcess
;****************
invoke OpenProcessToken, eax, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken
;****************
invoke LookupPrivilegeValue, 0, offset Se, SeDebug
;****************
mov R.PrivilegeCount, 1
mov R.Privileges.Luid, SeDebug
;****************
ret
end start

Автор: rsm 1.1.2006, 18:35
См. пример.
Код

;goto make

.386
.model flat, stdcall
option casemap :none  

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\advapi32.inc

includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\advapi32.lib

EnablePrivilege proto :DWORD,:DWORD

.data
    szTimePriv db "SeSystemTimePrivilege",0
    time SYSTEMTIME <0>
       
.code
start:

    invoke GetCurrentProcess
    invoke EnablePrivilege,eax,ADDR szTimePriv
    or eax,eax
    jz _exit
    ;
    invoke GetLocalTime,ADDR time    
    mov si,time.wHour
    mov time.wHour,10
    invoke SetLocalTime,ADDR time
    invoke Sleep,2000
    mov time.wHour,si
    invoke SetLocalTime,ADDR time
    ;
_exit:
    invoke ExitProcess,0

; BOOL EnablePrivilege(DWORD hProcess, DWORD szPrivilegeName)
;
; Аргументы:
;           hProcess - хэндл процесса, получающего права;
;           szPrivilegeName - название права (строка);
;
; Возвращаемое значение:
;          0 [FALSE] - права не получены;
;          1 [TRUE] - права успешно получены;
;    
EnablePrivilege proc hProcess:DWORD, szPrivilegeName:DWORD
    LOCAL hToken :DWORD
    LOCAL tpNew :TOKEN_PRIVILEGES    
    
    invoke OpenProcessToken,hProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,ADDR hToken
    .IF eax
        invoke LookupPrivilegeValue,0,szPrivilegeName,ADDR tpNew.Privileges[0].Luid
        .IF eax
            mov tpNew.PrivilegeCount,1
            mov tpNew.Privileges[0].Attributes,SE_PRIVILEGE_ENABLED
            invoke AdjustTokenPrivileges,hToken,0,ADDR tpNew,0,0,0
        .ENDIF
    .ENDIF
    ret
EnablePrivilege endp

end start

;:make
;\masm32\bin\ml.exe /c /coff priv.cmd
;\masm32\bin\link.exe /SUBSYSTEM:WINDOWS priv.obj
;del priv.obj
;pause

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)