无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 3989|回复: 3

PE下编程关机有什么特别的要求?

[复制链接]
发表于 2009-2-20 22:29:49 | 显示全部楼层 |阅读模式
我用 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);
发表于 2009-2-20 22:51:13 | 显示全部楼层
确实很多程序在PE下面不能关机重启,XP的安装程序复制完后也重启不了,需要手动重启,不过GHOST可以重启哟,楼主可以看看.我是菜的,帮不了忙.
回复

使用道具 举报

发表于 2009-2-20 23:06:53 | 显示全部楼层
PECMD 啊,大家看看它得说明就知道了,它会拦截 ExitWindowsEx 调用的
回复

使用道具 举报

发表于 2009-2-21 01:41:22 | 显示全部楼层
老九不是有现成的吗
不用把时间花在这上面
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-3-29 05:40

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表