计算机锁定状态下执行关机、注销任务
-
来至 footsetp
// xp+sp2下测试成功
program Portscan;
{$APPTYPE CONSOLE}
uses
sysutils,
windows;
function SetPrivilege(PrivilegeName: String; Enable: Boolean): Boolean;
var
NewState, PreviousState: TTokenPrivileges;
token: THandle;
dwRetLen: DWord;
begin
Result := False;
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, token);
NewState.PrivilegeCount := 1;
if LookupPrivilegeValue(nil, PChar(PrivilegeName),NewState.Privileges[0].LUID) then
begin
if Enable then
NewState.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
else
NewState.Privileges[0].Attributes := 0;
dwRetLen := 0;
Result := AdjustTokenPrivileges(token,False, NewState, SizeOf(PreviousState),PreviousState, dwRetLen);
end;
CloseHandle(token);
end;
begin
SetPrivilege(SeShutdownPrivilege, True);
Sleep(6000); // 这里延迟是为了测试之用,运行后来得及锁定计算机
ExitWindowsEx($0c,0); // 关机
// 注销
// ExitWindowsEx($4,0);
end .
试了很多很多关机软件都不能在计算机锁定的状态下执行关机操作,
最近看到一款 "关机酷XP"的就能在这样的环境下执行关键/注销的
操作,于是简单的分析了下,发现作者只是用ExitWindowsEx 这个API
就实现了,本以为很复杂啊..-_-|. 昨天晚上看了点delphi,手痒,试着
用delphi写了下,还真能用..只是不知道delphi如何实现C那样接受命
令行参数呢?用GetCommandline的话,在delphi操作字符串还真不熟练,
故此就写成这样.. -
TAGS:
- 作者:管理员 时间:2009-4-28 来源:网络 人气: