作者:six_L 此贴贴于2020-6-9 19:46:24,已被阅读95次/回复0 
invoke    AdjustToken,CStr("SeDebugPrivilege")
xLUID_AND_ATTRIBUTES STRUCT
    LowPart            DWORD      ?
    HighPart        DWORD      ?
    attributes        DWORD      ?
xLUID_AND_ATTRIBUTES ENDS
;---------------------------------------------
xTOKEN_PRIVILEGES STRUCT
    privilegecount        DWORD      ?
    theluid            xLUID_AND_ATTRIBUTES   <?>
xTOKEN_PRIVILEGES ENDS

AdjustToken proc lpszPrivilege:QWORD
    LOCAL hProcessHandle:QWORD
    LOCAL hToken:QWORD
    LOCAL sedebugnameValue:xLUID_AND_ATTRIBUTES
    LOCAL tkp:xTOKEN_PRIVILEGES
    
    invoke GetCurrentProcess       ; get the current process handle
    mov hProcessHandle,rax
    invoke OpenProcessToken,hProcessHandle,TOKEN_ADJUST_PRIVILEGES OR TOKEN_QUERY,ADDR hToken
    .if rax==0
        invoke    ErrorMessage,CStr("OpenProcessToken")
        mov    rax,FALSE
        ret
    .endif

    invoke LookupPrivilegeValue,NULL,lpszPrivilege,ADDR sedebugnameValue
    .if rax==0
        invoke    ErrorMessage,CStr("LookupPrivilegeValue")
        invoke    CloseHandle,hToken
        mov    rax,FALSE
        ret
    .endif
    
    lea rax, sedebugnameValue               ; address of sedebugnameValue into rax

    ; Contents of sedebugnameValue into ecx:edx
    mov ecx, (xLUID_AND_ATTRIBUTES PTR [rax]).LowPart
    mov edx, (xLUID_AND_ATTRIBUTES PTR [rax]).HighPart

    lea rax, tkp                   ; address of tkp into rax
    
    mov (xTOKEN_PRIVILEGES PTR [rax]).privilegecount, 1
    mov (xTOKEN_PRIVILEGES PTR [rax]).theluid.LowPart, ecx
    mov (xTOKEN_PRIVILEGES PTR [rax]).theluid.HighPart, edx
    mov (xTOKEN_PRIVILEGES PTR [rax]).theluid.attributes, SE_PRIVILEGE_ENABLED

    invoke AdjustTokenPrivileges,hToken,FALSE, addr tkp, sizeof tkp, NULL, NULL
    .if rax==0
        invoke    ErrorMessage,CStr("AdjustTokenPrivileges")
        invoke    CloseHandle,hToken
        mov    rax,FALSE
        ret
    .else
        ;invoke    SetDlgItemText,hWinMain,IDC_OUTPUT,CStr("AdjustToken is OK!")
    .endif
    
    mov    rax,TRUE
    ret

AdjustToken endp