Tải bản đầy đủ (.pdf) (2 trang)

Tài liệu Visual C-020 Tắt máy khởi động máy docx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (241.45 KB, 2 trang )

Làm th nào đ tt máy/khi đng máy ?

1/2
LÀM TH NÀO  TT MÁY / KHI NG LI MÁY ?

Vn Chí Nam
Khoa Công ngh Thông tin, H KHTN TP.HCM
(
)
Phiên bn cp nht ngày 18/04/2005

Trong môi trng Windows, lp trình viên hoàn toàn có th tt máy (Shutdown,
PowerOff), khi đng li máy (Restart) hoc thoát khi ngi dùng hin hành
(LogOff) ch thông qua các đon code trong chng trình.
Bài vit này gii thiu cách thc hin các chc nng nh vy :
HÀM EXITWINDOWSEX
Khai báo
BOOL ExitWindowsEx( UINT uFlags, DWORD dwReason );
Din gii
Hàm ExitWindowsEx có 2 tham s :
uFlags : thông báo kiu “thoát khi” Windows mun thc hin. uFlags gm có
các tham s : EWX_LOGOFF, EWX_REBOOT, EWX_POWEROFF,
EWX_SHUTDOWN và hai tham s tùy chn : EWX_FORCE,
EWX_FORCEIFHUNG. Nhóm tham s đu tiên (4 tham s) cho phép chn la cách
thc thi, trong đó hai tham s EWX_POWEROFF, EWX_SHUTDOWN có cách thc
hin tng đng vic chn chc nng Shutdown trên HH Windows, đim khác bit
gia hai tham s này nm  ch tt ngun hay không tt ngun (EWX_POWEROFF
cho phép tt ngun trong khi EWX_SHUTDOWN thì không!). Nhóm tham s th hai
(2 tham s) cho phép ch
n la kiu “ép buc” thoát khi Windows; EWX_FORCE
dùng “bin pháp mnh” đi vi các chng trình (có ngha là không cn hi ngi s


dng cn thoát hay không) còn EWX_FORCEIFHUNG thì “nh nhàng hn” (ch đi
s đng ý ca ngi dùng).
dwReason : không áp dng trên các h điu hành Windows 2000, Windows
NT, Windows Me/98/95.
Làm th nào đ tt máy/khi đng máy ?

2/2
CÀI T
Lu ý
Trong cài đt, cn lu ý trng hp phi khi đng máy li (Restart / Reboot)
hoc tt máy hn (PowerOff / Shutdown). C hai trng hp này cn phi thit lp
quyn thc thi. (Vì lý do an toàn, mt s quyn trên h điu hành s không đc thc
thi công vic đó). Chính vì vy, cn phi s dng hàm AdjustTokenPriveleges đ
điu chnh quyn SE_SHUTDOWN_NAME.
Mt ví d cho trng hp tt máy (Shutdown)
BOOL MySystemShutdown()
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;

if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return( FALSE );

// Ly giá tr LUID ca quyn tt máy

LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
&tkp.Privileges[0].Luid);

tkp.PrivilegeCount = 1; //

tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

// Ly quyn tt máy cho tin trình hin ti

AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
(PTOKEN_PRIVILEGES)NULL, 0);

if (GetLastError() != ERROR_SUCCESS)
return FALSE;

// Tt máy và ép buc tt c các ng dng phi b đóng
//iu chnh các quyn khác  ch này

if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0))
return FALSE;

return TRUE;
}

Có th tham kho thêm chi tit các hàm có liên quan trong MSDN.

×