用PB实现Windows2000下的自动关机

    在Windows2000中关机和在Windows98中不需要首先获得权限然后关机API才能关机以下是具体步骤:

步: 声明结构
-----------------------------------------------------------------------

需要声明 3个结:LUID, LUID_AND_ATTRIBUTES, token_privileges

LUID

long  lowpart
long  highpart




LUID_AND_ATTRIBUTES

luid  pLuid
long  Attributes




token_privileges

long  privilegecount
luid_and_attributes  privileges



第 2步: 声明外部扩展
-----------------------------------------------------------------------

FUNCTION ulong ExitWindowsEx(ulong uFlags,ulong dwReserved) LIBRARY "user32.dll"
FUNCTION ulong GetCurrentProcess LIBRARY "kernel32.dll"
FUNCTION ulong LookupPrivilegeValue(ref lpName,ref lpName,ref Luid lpLuid) LIBRARY "advapi32.dll" ALIAS FOR "LookupPrivilegeValueA"
FUNCTION ulong AdjustTokenPrivileges(ulong TokenHandle,boolean DisableAllPrivileges,ref TOKEN_PRIVILEGES NewState,ulong BufferLength,ref TOKEN_PRIVILEGES PreviousState,ref ulong ReturnLength) LIBRARY "advapi32.dll"
FUNCTION ulong OpenProcessToken(ulong ProcessHandle,ulong DesiredAccess,ref ulong TokenHandle) LIBRARY "advapi32.dll"



第 3步: 脚本

-----------------------------------------------------------------------

/*获得关机权限*/

ls_lpName,ls_lpName
ls_lpname='SeShutdownPrivilege'
ulong  lu_hdlProcessHandle,lu_hdlTokenHandle,lu_lBufferNeeded
luid lst_tmpLuid
TOKEN_PRIVILEGES lst_tkp
TOKEN_PRIVILEGES lst_tkpNewButIgnored
lu_hdlProcessHandle = GetCurrentProcess
OpenProcessToken(lu_hdlProcessHandle,40, lu_hdlTokenHandle)
LookupPrivilegeValue( ls_lpName, ls_lpname, lst_tmpLuid)
lst_tkp.PrivilegeCount = 1
lst_tkp.Privileges[1].pLuid = lst_tmpLuid
lst_tkp.Privileges[1].Attributes = 2
AdjustTokenPrivileges(lu_hdlTokenHandle, False, lst_tkp,16, lst_tkpNewButIgnored,lu_lBufferNeeded)


/*关机*/

ExitWindowsEx (9,0)


/* The End */

如果您在这篇文章里得到了些什么请给作者些鼓励:[email protected]
Tags: 

延伸阅读

最新评论

发表评论