关于如何关机的上问题,请进...(50分)

  • 主题发起人 主题发起人 chensh
  • 开始时间 开始时间
C

chensh

Unregistered / Unconfirmed
GUEST, unregistred user!
1、在win2000下如何用程序关机和重启动,函数ExitWindowsEx 不好使。
2、在win2000下如何屏蔽Ctrl+Alt+Del 组合键。
 
2000下要实现关机首先要设置进程的权限。
在本BBS搜索一下,以前有讨论。
 
抄的:
procedure TShutDownComputer.ShutDownComputer;
const
SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
var
hToken : THandle;
tkp : TTokenPrivileges;
tkpo : TTokenPrivileges;
zero : DWORD;
begin
zero:=0;
if not OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken)
then begin
Exit;
end;

if not OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken)
then begin
Exit;
end;

if not LookupPrivilegeValue( nil, 'SeShutdownPrivilege' , tkp.Privileges[ 0 ].Luid )
then begin
Exit;
end;

tkp.PrivilegeCount := 1;
tkp.Privileges[ 0 ].Attributes := SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges( hToken, False, tkp, SizeOf( TTokenPrivileges ), tkpo, zero );

if Boolean( GetLastError() )
then begin
Exit;
end
else ExitWindowsEx( EWX_FORCE or EWX_SHUTDOWN or EWX_POWEROFF, 0);
end;
end.
 
please continue...
 
1、函数ExitWindowsEx 在WIN 2000 下可以,我用过的。我想关键是你有没有权限。

2、是不是想隐藏你的进程,利用windows的一个*.dll御截漏洞,可以实现在win9x,nt,w2k下进程的深度隐藏,
按CTRL+ALT+DEL看不到,用终极防线也看不到,
 
关于 2

这儿有测试程序,源代码。
http://www.iligia.com/chinese/documents/program/dishotkey.htm
除了 Power,Sleep没有办法,其他都能够屏蔽。
 
下面的代码我试过,可以的。
function WinExit(flags: integer): boolean;
function SetPrivilege(privilegeName: string; enable: boolean): boolean;
var tpPrev,
tp : TTokenPrivileges;
token : THandle;
dwRetLen : DWord;
begin
result := False;
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, token);
tp.PrivilegeCount := 1;
if LookupPrivilegeValue(nil, pchar(privilegeName), tp.Privileges[0].LUID) then
begin
if enable then
tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
else
tp.Privileges[0].Attributes := 0;
dwRetLen := 0;
result := AdjustTokenPrivileges(token, False, tp, SizeOf(tpPrev), tpPrev, dwRetLen);
end;
CloseHandle(token);
end;
begin
if SetPrivilege('SeShutdownPrivilege', true) then begin
ExitWindowsEx(flags, 0);
SetPrivilege('SeShutdownPrivilege', False)
end;
end;
 
后退
顶部