win95与win2000的关机与重启

王朝vc·作者佚名  2006-01-08
宽屏版  字体: |||超大  

VOID ShutDownProcess ( VOID ) //关机程序

{

if ( IsWindows9x() ) {

ExitWindowsEx( EWX_SHUTDOWN | EWX_FORCE, 0);

}

else {

HANDLE hToken;

TOKEN_PRIVILEGES tkp;

if ( !OpenProcessToken(GetCurrentProcess(),

TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))

{

MessageBox ( NULL , "无法关机",CLASSNAME,MB_OK);

return ;

}

LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,

&tkp.Privileges[0].Luid);

tkp.PrivilegeCount = 1;

tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,

(PTOKEN_PRIVILEGES)NULL, 0);

if (GetLastError() != ERROR_SUCCESS) {

MessageBox ( NULL , "无法关机",CLASSNAME,MB_OK);

}

if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0)) {

MessageBox ( NULL , "无法关机",CLASSNAME,MB_OK);

}

}

}

VOID RebootProcess ( VOID ) //重启程序

{

if ( IsWindows9x() ) {

ExitWindowsEx( EWX_REBOOT | EWX_FORCE, 0);

}

else {

HANDLE hToken;

TOKEN_PRIVILEGES tkp;

if ( !OpenProcessToken(GetCurrentProcess(),

TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))

{

MessageBox ( NULL , "无法关机",CLASSNAME,MB_OK);

return ;

}

LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,

&tkp.Privileges[0].Luid);

tkp.PrivilegeCount = 1;

tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,

(PTOKEN_PRIVILEGES)NULL, 0);

if (GetLastError() != ERROR_SUCCESS) {

MessageBox ( NULL , "无法关机",CLASSNAME,MB_OK);

}

if (!ExitWindowsEx(EWX_REBOOT | EWX_FORCE, 0)) {

MessageBox ( NULL , "无法关机",CLASSNAME,MB_OK);

}

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有