无忧启动论坛

标题: 请教能否发个PE自动重启的软件 [打印本页]

作者: HJCH1976    时间: 2007-1-13 16:58
标题: 请教能否发个PE自动重启的软件
请教老师能否发个PE自动重启的软件
或者有什么方法?
psshutdown.exe和SHUTDOWN.EXE不行
作者: sztopms1    时间: 2007-1-13 17:10
呵呵,也是刚弄PE不久吧? 跟俺当初的思路一样的:)

wuyou目前绝大部分PE里都把shutdown需要的一些东西去掉了,直接shutdown.exe会出现“设备未就绪”的错误提示,查MS,说是winlogon.exe的问题,换了原版的winlogon,还是出错。好在各PE都有自己的命令:

用老九、毛桃系统的,用xpeinit -0关闭, xpeinit -6重启;

用Yonsm系统的,用xcmd shut关闭,xcmd shut R重启;

顺便问下各位高人:如果想用回shutdown.exe,该加哪些服务或作什么修改呢? 我曾把各exe、dll都被备齐了,还是不行。我猜想与服务有关。

哪位知道,吱个声哟!
作者: 123    时间: 2007-1-13 17:52
以前我用VC写的一个关机程序
通过调用NTDLL.DLL的“NtShutdownSystem”函数来关机的。
源码:
void CShutdownDlg::shut(int action)
{

    HINSTANCE h=LoadLibrary("ntdll.dll");
    if(!h)
    {
        MessageBox("加载'ntdll.dll'失败!");
        return;
    }

    typedef int (__stdcall *AdjustPrivilege)(int,int,int,int *);
    AdjustPrivilege SetPrivilege=NULL;
    SetPrivilege=(AdjustPrivilege)GetProcAddress(h,"RtlAdjustPrivilege");
    if(!SetPrivilege)
    {
        MessageBox("加载'RtlAdjustPrivilege'失败!");
        return;
    }

    typedef int (__stdcall *ShutdownSystem)(int);
    ShutdownSystem Shutdown=NULL;
    Shutdown=(ShutdownSystem)GetProcAddress(h,"NtShutdownSystem");
    if(!Shutdown)
    {
        MessageBox("加载'NtShutdownSystem'失败!");
        return;
    }

    const int SE_SHUTDOWN_PRIVILEGE = 19;
    const int shutdown = 0;
    const int RESTART = 1;
    const int POWEROFF = 2;
    int *a;
        a=new int;
    (*SetPrivilege)(SE_SHUTDOWN_PRIVILEGE,true,false,a);
    (*Shutdown)(action);
        delete a;
       
}
用法:调用这个函数用参数shutdown,RESTART ,POWEROFF 来表示关机还是重启。

[ 本帖最后由 123 于 2007-1-13 05:56 PM 编辑 ]

shutdown.rar

33.78 KB, 下载次数: 57, 下载积分: 无忧币 -2


作者: mahunanhai    时间: 2007-1-13 17:56
不错~学习拉!
作者: HJCH1976    时间: 2007-1-14 13:24
原帖由 sztopms1 于 2007-1-13 05:10 PM 发表
呵呵,也是刚弄PE不久吧? 跟俺当初的思路一样的:)

wuyou目前绝大部分PE里都把shutdown需要的一些东西去掉了,直接shutdown.exe会出现“设备未就绪”的错误提示,查MS,说是winlogon.exe的问题,换了原版的w ...



能否延时重启?请教高手了




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