nustzhua
驱动中牛
驱动中牛
  • 注册日期2002-06-19
  • 最后登录2015-09-27
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:935回复:1

如何在系统注销的时候强制机器重起

楼主#
更多 发布于:2004-08-10 14:56
可以在程序中知道系统需要注销,可这个时候我需要reboot,于是我重载了WindowProc,
LRESULT CMainFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if (message == WM_QUERYENDSESSION)
{
if (lParam & ENDSESSION_LOGOFF)
{
//log off
OutputDebugString("lOG OFFn");
if(HIWORD(m_dwWindowsType)==OSVER_WINNT)
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
// Get a token for this process.
if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return FALSE;

// Get the LUID for the shutdown privilege.
if(!LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid))
return FALSE;

tkp.PrivilegeCount=1;  // one privilege to set    
tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;

// Get the shutdown privilege for this process.
if(!AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES)NULL,0))
return FALSE;

}
OutputDebugString("Before restartn");
if(!ExitWindowsEx(EWX_REBOOT,0))
{
DWORD  dwError=GetLastError();
char msg[128];
sprintf(msg,"Restart windows error,code is %ldn",dwError);
OutputDebugString(msg);
}
OutputDebugString("endn");
//return TRUE;
}
else
{
//restart

}
}
return CFrameWnd::WindowProc(message, wParam, lParam);
}
可是发现机器还是注销,不是重起,有谁知道怎么办么?

[编辑 -  8/10/04 by  nustzhua]
不限容量的免费邮箱 www.k65.net
freecutelei
驱动牛犊
驱动牛犊
  • 注册日期2003-11-12
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-08-10 16:12
可以在程序中知道系统需要注销

你是收到注销的消息了吧?应该返回或者取消这个消息。你是不是没做处理,直接就发了个Reboot?那样可能还是先到的Logout先做吧
游客

返回顶部