|
使用 NtShutdownSystem 可以强制关闭 Windows 系统。这个函数是众多的未归档的 Windows NT/2000 Native API 函数之一,它在关闭系统时不会事先通知系统服务程序和用户程序。行为很是粗鲁,除非迫不得已,最好不要使用这个函数。msgina.dll 中用到了这个函数。该函数由 ntdll.dll 输出,其原型如下:6 x9 C p* Q; Y) B1 B
, Y( t" p2 G! g( X
NTSYSAPI# H3 b0 y) s5 N( Y
NTSTATUS
2 }5 C5 j) c P4 ]! v! p9 |+ ]NTAPI
; }) U" O- x5 p: o2 ]8 Z* oNtShutdownSystem(SHUTDOWN_ACTION);+ p$ c* o4 i/ W9 P3 g4 Q# w' b
. I, c, x- h! k0 j0 W, OSHUTDOWN_ACTION 结构定义:& n1 t3 f, x/ C. i" a: t5 {
typedef enum _SHUTDOWN_ACTION {
$ M8 x3 G% n4 N, i+ o) _8 VShutdownNoReboot,, Y7 n5 {& Y7 O9 n
ShutdownReboot,2 i2 ^0 X+ j8 ?4 f% X
ShutdownPowerOff
+ P7 {) y- h% v9 D, t9 s$ r, X}SHUTDOWN_ACTION;
! X% ^" [ J3 J9 a' _
, y" R& R2 O: {5 A' f下面是一段使用该函数的例子代码:$ ]) M" `8 X; @; y" {
w5 Z2 B: X% B4 X( Y6 e$ v! v
HANDLE hToken;
3 G# v3 V* F7 L) n( `4 k' qif (OpenProcessToken(GetCurrentProcess(), 7 K4 A& X3 r5 E
TOKEN_QUERY|TOKEN_ADJUST_PRIVILEGES, &hToken))
j5 ]: n3 M \( B4 a8 k{
2 C$ {) w+ R4 E1 |8 { F& OTOKEN_PRIVILEGES tkp;
) T* ~; g0 c4 e- R% q
4 s( o1 C ]0 P6 W( {LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
% P+ J- i' u! l$ @* M0 `1 E4 x# p+ }+ x
tkp.PrivilegeCount = 1;
9 z/ G- x* H, z, F" L t+ U* ` Qtkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
* x7 U" l/ y7 C& X, {: F1 k+ e. p0 Q z4 T6 t- H
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, NULL, 0);) h, ]2 d [5 |) D7 M! a
CloseHandle(hToken);
/ c5 k( X5 a3 G6 o2 V2 R1 L}( ^9 Q( L6 h5 l+ m( z
" }3 h% h: N! Q, m7 I" |) V& @
NtShutdownSystem(ShutdownNoReboot); |
|