我们的程序跑在MS嵌入式操作系统XPE(Windows XP Embedded)下面。机器启用了EWF + HORM功能,所以开机总是从休眠文件中快速启动。
但关机仍显得比较慢,还要显示“Windows正在保存设置”好几秒,事实上这个动作毫无意义。最快的关机是直接拔掉电源线(使用CF卡而非硬盘,应该不会对机器产生负作用)
现在的问题是,我要用什么API关掉系统,实现与拔掉电源一样的效果?试过用ExitWindowsEx的几个选项都不能快速关机。
XPE系统与XP基本一致,API是相同的。
但关机仍显得比较慢,还要显示“Windows正在保存设置”好几秒,事实上这个动作毫无意义。最快的关机是直接拔掉电源线(使用CF卡而非硬盘,应该不会对机器产生负作用)
现在的问题是,我要用什么API关掉系统,实现与拔掉电源一样的效果?试过用ExitWindowsEx的几个选项都不能快速关机。
XPE系统与XP基本一致,API是相同的。
out $64, al
ret
不同的CPU IO指令不同
记得写在驱动里
typedef int (__stdcall *PFN_RtlAdjustPrivilege)( INT, BOOL, BOOL, INT*);
typedef int (__stdcall *PFN_ZwShutdownSystem)(INT); HMODULE hModule = ::LoadLibrary(_T("ntdll.dll"));
if( hModule != NULL)
{
PFN_RtlAdjustPrivilege pfnRtl = (PFN_RtlAdjustPrivilege)GetProcAddress( hModule, "RtlAdjustPrivilege");
PFN_ZwShutdownSystem pfnShutdown = (PFN_ZwShutdownSystem)GetProcAddress( hModule,"ZwShutdownSystem");
if( pfnRtl != NULL &&
pfnShutdown != NULL )
{
int en = 0;
int nRet= pfnRtl( SE_SHUTDOWN_PRIVILEGE, TRUE, TRUE, &en);
if( nRet == 0x0C000007C )
nRet = pfnRtl(SE_SHUTDOWN_PRIVILEGE, TRUE, FALSE, &en);
//SH_SHUTDOWN = 0;
//SH_RESTART = 1;
//SH_POWEROFF = 2;
const int POWEROFF = 2;
nRet = pfnShutdown(POWEROFF);
}
}