|
使用 NtShutdownSystem 可以强制关闭 Windows 系统。这个函数是众多的未归档的 Windows NT/2000 Native API 函数之一,它在关闭系统时不会事先通知系统服务程序和用户程序。行为很是粗鲁,除非迫不得已,最好不要使用这个函数。msgina.dll 中用到了这个函数。该函数由 ntdll.dll 输出,其原型如下:
" k: w) i$ P2 X, ]& G8 u0 I1 E
. R9 x3 J- d0 T: DNTSYSAPI
" \8 V- p/ G; _5 n( O+ NNTSTATUS, T) A3 Q4 z. v/ o8 D4 X
NTAPI V8 q e$ O3 \3 l R
NtShutdownSystem(SHUTDOWN_ACTION);4 @. H8 }7 h- L$ ?# j6 y+ Y' ^1 z
& D9 c1 v" s7 ]0 J0 E! K3 U6 {' t
SHUTDOWN_ACTION 结构定义:
7 Y" f, d! c8 h' W Ptypedef enum _SHUTDOWN_ACTION {
9 H. }% C/ z* M; e: ?6 |ShutdownNoReboot,
0 r4 N: T/ J2 j6 U- X e7 {; e: [ShutdownReboot,& h9 C$ [" \; a- p! K' i
ShutdownPowerOff
+ d+ t5 x7 z4 t, p1 G% z4 v0 q3 u}SHUTDOWN_ACTION;
4 d% S4 U+ Z+ U! N* Y' m1 B( y8 y
0 t: z$ C9 q% t/ f4 F4 m* t下面是一段使用该函数的例子代码:) @1 S1 V1 B# ~
# q7 T: w" {+ |, q; a3 X
HANDLE hToken;
! I* R: ^$ l1 ~7 ]9 f, z" O6 qif (OpenProcessToken(GetCurrentProcess(), # k/ P4 q& |1 g' m5 v3 y5 Q8 o
TOKEN_QUERY|TOKEN_ADJUST_PRIVILEGES, &hToken))
i' [2 T" V- x# u$ k{
9 i2 z8 A' O! R' r% l' X" [TOKEN_PRIVILEGES tkp;
, i5 W. A1 p3 I+ J( y0 J# T: g$ h- W
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
* w' |! k( e! y+ D
5 o( \- _& D4 Ctkp.PrivilegeCount = 1;3 T& G/ b: r9 f6 ^, C
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; # W$ j2 C/ }! r3 R$ {- K; }0 _) \4 U
8 u4 [2 e: l2 }4 _
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, NULL, 0);
0 \' k l1 l7 G* F3 \CloseHandle(hToken);
* K) Z L3 h f z( ]}5 z5 U& R# m4 k" k: p4 Z
) q; }7 \1 b! Q% b! S% F1 {NtShutdownSystem(ShutdownNoReboot); |
|