Làm th nào đ tt máy/khi đng máy ?
1/2
LÀM TH NÀO TT MÁY / KHI NG LI MÁY ?
Vn Chí Nam
Khoa Công ngh Thông tin, H KHTN TP.HCM
(
vcnam@fit.hcmuns.edu.vn )
Phiên bn cp nht ngày 18/04/2005
Trong môi trng Windows, lp trình viên hoàn toàn có th tt máy (Shutdown,
PowerOff), khi đng li máy (Restart) hoc thoát khi ngi dùng hin hành
(LogOff) ch thông qua các đon code trong chng trình.
Bài vit này gii thiu cách thc hin các chc nng nh vy :
HÀM EXITWINDOWSEX
Khai báo
BOOL ExitWindowsEx( UINT uFlags, DWORD dwReason );
Din gii
Hàm ExitWindowsEx có 2 tham s :
uFlags : thông báo kiu “thoát khi” Windows mun thc hin. uFlags gm có
các tham s : EWX_LOGOFF, EWX_REBOOT, EWX_POWEROFF,
EWX_SHUTDOWN và hai tham s tùy chn : EWX_FORCE,
EWX_FORCEIFHUNG. Nhóm tham s đu tiên (4 tham s) cho phép chn la cách
thc thi, trong đó hai tham s EWX_POWEROFF, EWX_SHUTDOWN có cách thc
hin tng đng vic chn chc nng Shutdown trên HH Windows, đim khác bit
gia hai tham s này nm ch tt ngun hay không tt ngun (EWX_POWEROFF
cho phép tt ngun trong khi EWX_SHUTDOWN thì không!). Nhóm tham s th hai
(2 tham s) cho phép ch
n la kiu “ép buc” thoát khi Windows; EWX_FORCE
dùng “bin pháp mnh” đi vi các chng trình (có ngha là không cn hi ngi s
dng cn thoát hay không) còn EWX_FORCEIFHUNG thì “nh nhàng hn” (ch đi
s đng ý ca ngi dùng).
dwReason : không áp dng trên các h điu hành Windows 2000, Windows
NT, Windows Me/98/95.
Làm th nào đ tt máy/khi đng máy ?
2/2
CÀI T
Lu ý
Trong cài đt, cn lu ý trng hp phi khi đng máy li (Restart / Reboot)
hoc tt máy hn (PowerOff / Shutdown). C hai trng hp này cn phi thit lp
quyn thc thi. (Vì lý do an toàn, mt s quyn trên h điu hành s không đc thc
thi công vic đó). Chính vì vy, cn phi s dng hàm AdjustTokenPriveleges đ
điu chnh quyn SE_SHUTDOWN_NAME.
Mt ví d cho trng hp tt máy (Shutdown)
BOOL MySystemShutdown()
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return( FALSE );
// Ly giá tr LUID ca quyn tt máy
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
&tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1; //
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// Ly quyn tt máy cho tin trình hin ti
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
(PTOKEN_PRIVILEGES)NULL, 0);
if (GetLastError() != ERROR_SUCCESS)
return FALSE;
// Tt máy và ép buc tt c các ng dng phi b đóng
//iu chnh các quyn khác ch này
if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0))
return FALSE;
return TRUE;
}
Có th tham kho thêm chi tit các hàm có liên quan trong MSDN.
. Làm th nào đ tt máy/ khi đng máy ?
1/2
LÀM TH NÀO TT MÁY / KHI NG LI MÁY ?
Vn Chí Nam
Khoa Công ngh Thông. nào đ tt máy/ khi đng máy ?
2/2
CÀI T
Lu ý
Trong cài đt, cn lu ý trng hp phi khi đng máy li (Restart / Reboot)
hoc tt máy hn (PowerOff