该如何使用AdjustTokenPrivileges函数获得关机权限
在使用AdjustTokenPrivileges获得权限时里面的结构类型该如何填写??
我自己写的程序问题出在;注释处,导致无法编译,请高手帮我看看。谢谢!!
注:我使用的是Win32Masm编辑环境,用 ml /c /coff X:\文件名.asm 命令编译,用
link /subsystem:windows X:\文件名.obj 命令连接。
程序如下:
.386
.model flat,stdcall
option casemap:none
; < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < <
include kernel32.inc
includelib kernel32.lib
include advapi32.inc
includelib advapi32.lib
include windows.inc
include winmm.inc
includelib winmm.lib
include user32.inc
includelib user32.lib
; < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < <
.data
szBuffer db 64 dup(?)
.data
szShutDown db ‘SeShutdownPrivilege‘,0
; < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < <
.code
AdjustTokenPrivilegesForNT proc ;获得关机权限
local @stTP1:TOKEN_PRIVILEGES
local @stLUIDUID
local @hProcessHandle
local @hTokenHandle
local @Buffer
local @stTP2:TOKEN_PRIVILEGES
invoke GetCurrentProcess
mov @hProcessHandle,eax
invoke OpenProcessToken,addr @hProcessHandle,TOKEN_ADJUST_PRIVILEGES OR TOKEN_QUERY,@hTokenHandle
invoke LookupPrivilegevalue,NULL,offset szShutDown,addr @stLUID
mov @stTP1.PrivilegeCount,1
lea eax,[@stLUID]
mov @stTP1.Privileges(0).pLuid,eax ;在汇编时总是提示pLuid未定义,请
高手指点。谢谢!!
mov eax,SE_PRIVILEGE_ENABLED
mov @stTP1.Privileges(0).Attributes,eax
invoke AdjustTokenPrivileges,addr @hTokenHandle,FALSE,addr @stTP1,sizeof @stTP2,addr @stTP2,@Buffer
ret
AdjustTokenPrivilegesForNT endp
;*****************************************************************
ShutDown proc
call AdjustTokenPrivilegesForNT
invoke ExitWindowsEx,2,0 ;2为重起
ret
ShutDown endp
; < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < <