关闭系统的函数为:
BOOL ExitWindowsEx(
UINT uFlags, // shutdown operation
DWORD dwReserved // reserved
);
该函数在User32.dll中,查一查MSDN的帮助可以知道关于该函数以及参数更详细的说明。
BOOL ExitWindowsEx(
UINT uFlags, // shutdown operation
DWORD dwReserved // reserved
);
该函数在User32.dll中,查一查MSDN的帮助可以知道关于该函数以及参数更详细的说明。
DWORD dwReserved, // reserved; must be zero
UINT uReserved // reserved; must be zero
);
BOOL ExitWindowsEx(
UINT uFlags, // shutdown operation
DWORD dwReserved // reserved
);
在MSDN上有详细的说明
void CMyDlg::SetPriviles()
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken))
MessageBox("OpenProcessToken Error !","Error");
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("AdjustTokenPrivileges Error !","Error");
return;
}
如果在Win98/95下雪儿说的就足够了,如果在NT或2000下,还有一些工作要做。
////设置权限
BOOL CExitWindowsDlg::SetPrivilige(HANDLE hToken,LPCTSTR lpszPrivilege,BOOL bEnablePrivilege)
{
TOKEN_PRIVILEGES tp;
LUID luid; if (!LookupPrivilegeValue(NULL,lpszPrivilege,&luid))
{
printf("LookupPrivilegeValue error: %u\n", GetLastError() );
return FALSE;
} tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
if (bEnablePrivilege)
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
else
tp.Privileges[0].Attributes = 0; AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(TOKEN_PRIVILEGES),(PTOKEN_PRIVILEGES) NULL,(PDWORD) NULL); if (GetLastError() != ERROR_SUCCESS)
{
printf("AdjustTokenPrivileges failed: %u\n", GetLastError() );
return FALSE;
} return TRUE;
}///// 一个退出windows button的click
void CExitWindowsDlg::OnExitWindows()
{
HANDLE hToken,hPHandle;
LPCTSTR lpszPrivilege;
BOOL bEnablePrivilege;
DWORD dwVersion,dwWindowsMajorVersion,dwWindowsMinorVersion;
CString str; dwVersion=GetVersion(); dwWindowsMajorVersion=(DWORD)(LOBYTE(LOWORD(dwVersion)));
dwWindowsMinorVersion=(DWORD)(HIBYTE(LOWORD(dwVersion))); if (dwVersion < 0x80000000) // Windows NT
{
hPHandle=GetCurrentProcess();
if(OpenProcessToken(hPHandle,TOKEN_ADJUST_PRIVILEGES/*TOKEN_ALL_ACCESS*/,&hToken)==FALSE)
{
// DWORD ErrorID;char temp[128];
// ZeroMemory(temp,128);
// ErrorID=GetLastError();
// sprintf(temp,"%d",ErrorID);
// str=temp;
str.Format("%d",GetLastError());
MessageBox("Openprocesstoken ERROR_ID:"+str,NULL,MB_OK);
}
lpszPrivilege=SE_SHUTDOWN_NAME;
bEnablePrivilege=TRUE;
SetPrivilige(hToken,lpszPrivilege,bEnablePrivilege);
} ExitWindowsEx(shutdown_type,NULL);
}