我要什么函数才能取得NT关机权限
好像ADJUSTTOKENPRIVLEGES()授予SE_SHUTDOWN_NAME权限但是这个函数我不会用有没有谁可以说细地说一下;
最好是有一个例子;
再说明一点:关于EXITWINDOWSEX()我会用;
我只是要怎么样才能取得权限;
谢谢了;
问题点数:28、回复次数:3Top
1 楼cnmusic(cnmusic)回复于 2001-07-01 13:18:29 得分 0
http://www.vbaccelerator.com/tips/vba0019.htm
看完了别忘了给我加分。Top
2 楼ey4s(雏鹰)回复于 2001-07-01 14:21:52 得分 0
win2k下的关机/重起代码。
#include "stdio.h"
#include "windows.h"
int main()
{
//定义重起的时候发送给所有用户的消息
LPSTR msg="Reboot Tool By Lion Hook\nhttp://www.xici.net";
//尝试用最简单的API函数重起
if(ExitWindowsEx(EWX_REBOOT, 0))return TRUE;
if(ExitWindowsEx(EWX_REBOOT ¦ EWX_FORCE, 0))return TRUE;
//因为上面的重起不成功,所以需要调整本进程的特权
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES ¦ TOKEN_QUERY, &hToken)) return FALSE;
//获取重起的特权SE_SHUTDOWN_NAME
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
//判断是NT内核还是9x内核,选择用不同的方式
if(!(GetVersion() & 0x80000000))
InitiateSystemShutdown(NULL, msg, 20, TRUE, TRUE);
else if (!ExitWindowsEx(EWX_REBOOT, 0))
if(!ExitWindowsEx(EWX_REBOOT ¦ EWX_FORCE, 0))
return FALSE;
return TRUE;
}
Top
3 楼InsideDelphi(ID)回复于 2001-07-01 18:31:17 得分 28
ft,要用ObjectPascal,而且,怎么用你这种方式!
var
VerInfo:TOSVersionInfo;
hToken:THANDLE;
tkp:TOKEN_PRIVILEGES;
Nothing:Cardinal;
begin
VerInfo.dwOSVersionInfoSize:=SizeOf(VerInfo);
GetVersionEx(VerInfo);
if VerInfo.dwPlatformId=VER_PLATFORM_WIN32_NT then
Begin
OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,hToken);
LookupPrivilegeValue(nil,'SeShutdownPrivilege',tkp.Privileges[0].Luid);
tkp.PrivilegeCount:= 1;
tkp.Privileges[0].Attributes:= SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, tkp, 0,nil, Nothing);
End;
ExitWindowsEx(//Your option here,see msdn or win32help);
end;
Top




