无忧启动论坛

标题: PE下编程关机有什么特别的要求? [打印本页]

作者: wwwzhx    时间: 2009-2-20 22:29
标题: PE下编程关机有什么特别的要求?
我用 DELPHI 在2003下写的程序应用下面代码,在XP和2003下已经可以实现重启和关闭电脑,
但是在PE下执行却失效了,没有反映,也没有报错 ,不知何故?是否精简文件的问题?

提升操作权限的函数:
procedure AdjustToken();
var
  hdlProcessHandle: Cardinal;
  hdlTokenHandle: Cardinal;
  tmpLuid: Int64;
  //tkpPrivilegeCount: Int64;
  tkp: TOKEN_PRIVILEGES;
  tkpNewButIgnored: TOKEN_PRIVILEGES;
  lBufferNeeded: Cardinal;
  Privilege: array[0..0] of _LUID_AND_ATTRIBUTES;
begin
  hdlProcessHandle := GetCurrentProcess;
  OpenProcessToken(hdlProcessHandle,
    (TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY),
    hdlTokenHandle);
  // Get the LUID for shutdown privilege.
  LookupPrivilegeValue('', 'SeShutdownPrivilege', tmpLuid);
  Privilege[0].Luid := tmpLuid;
  Privilege[0].Attributes := SE_PRIVILEGE_ENABLED;
  tkp.PrivilegeCount := 1; // One privilege to set
  tkp.Privileges[0] := Privilege[0];
  // Enable the shutdown privilege in the access token of this
  // process.
  AdjustTokenPrivileges(hdlTokenHandle,
    False,
    tkp,
    Sizeof(tkpNewButIgnored),
    tkpNewButIgnored,
    lBufferNeeded);
end;


关机代码:
  AdjustToken;
  ExitWindowsEx(EWX_SHUTDOWN or EWX_FORCE,0);

重启代码:
   AdjustToken;
   ExitWindowsEx(EWX_REBOOT OR EWX_FORCE,0);
作者: zch11230    时间: 2009-2-20 22:51
确实很多程序在PE下面不能关机重启,XP的安装程序复制完后也重启不了,需要手动重启,不过GHOST可以重启哟,楼主可以看看.我是菜的,帮不了忙.
作者: Pauly    时间: 2009-2-20 23:06
PECMD 啊,大家看看它得说明就知道了,它会拦截 ExitWindowsEx 调用的
作者: zlgs    时间: 2009-2-21 01:41
老九不是有现成的吗
不用把时间花在这上面




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3