ReactOS 0.4.15-dev-6057-gd708c79
shutdown.c File Reference
#include "precomp.h"
#include <ndk/exfuncs.h>
#include <ndk/pofuncs.h>
#include <ndk/rtlfuncs.h>
Include dependency graph for shutdown.c:

Go to the source code of this file.

Functions

static BOOL EnablePrivilege (LPCWSTR lpszPrivilegeName, BOOL bEnablePrivilege)
 
VOID ShutDown_StandBy (VOID)
 
VOID ShutDown_Hibernate (VOID)
 
VOID ShutDown_PowerOff (VOID)
 
VOID ShutDown_Reboot (VOID)
 
VOID ShutDown_LogOffUser (VOID)
 
VOID ShutDown_SwitchUser (VOID)
 
VOID ShutDown_LockComputer (VOID)
 
VOID ShutDown_Disconnect (VOID)
 
VOID ShutDown_EjectComputer (VOID)
 

Function Documentation

◆ EnablePrivilege()

static BOOL EnablePrivilege ( LPCWSTR  lpszPrivilegeName,
BOOL  bEnablePrivilege 
)
static

Definition at line 34 of file shutdown.c.

35{
37 HANDLE hToken;
39
42 &hToken);
43 if (!Success) return Success;
44
46 lpszPrivilegeName,
47 &tp.Privileges[0].Luid);
48 if (!Success) goto Quit;
49
50 tp.PrivilegeCount = 1;
51 tp.Privileges[0].Attributes = (bEnablePrivilege ? SE_PRIVILEGE_ENABLED : 0);
52
54
55Quit:
56 CloseHandle(hToken);
57 return Success;
58}
#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117
BOOL WINAPI LookupPrivilegeValueW(LPCWSTR lpSystemName, LPCWSTR lpPrivilegeName, PLUID lpLuid)
Definition: misc.c:782
BOOL WINAPI AdjustTokenPrivileges(HANDLE TokenHandle, BOOL DisableAllPrivileges, PTOKEN_PRIVILEGES NewState, DWORD BufferLength, PTOKEN_PRIVILEGES PreviousState, PDWORD ReturnLength)
Definition: security.c:376
BOOL WINAPI OpenProcessToken(HANDLE ProcessHandle, DWORD DesiredAccess, PHANDLE TokenHandle)
Definition: security.c:296
#define CloseHandle
Definition: compat.h:739
#define GetCurrentProcess()
Definition: compat.h:759
_In_ uint64_t _In_ uint64_t _In_ uint64_t _In_opt_ traverse_ptr * tp
Definition: btrfs.c:2996
@ Success
Definition: eventcreate.c:712
unsigned int BOOL
Definition: ntddk_ex.h:94
#define TOKEN_ADJUST_PRIVILEGES
Definition: setypes.h:926
#define SE_PRIVILEGE_ENABLED
Definition: setypes.h:63

◆ ShutDown_Disconnect()

VOID ShutDown_Disconnect ( VOID  )

Definition at line 189 of file shutdown.c.

190{
191}

Referenced by TaskManagerWndProc().

◆ ShutDown_EjectComputer()

VOID ShutDown_EjectComputer ( VOID  )

Definition at line 194 of file shutdown.c.

195{
196}

Referenced by TaskManagerWndProc().

◆ ShutDown_Hibernate()

VOID ShutDown_Hibernate ( VOID  )

Definition at line 88 of file shutdown.c.

89{
91
93 {
95 return;
96 }
97
98#ifdef NT_INITIATE_POWERACTION_IMPLEMENTED
101 0, FALSE);
102#else
105 0);
106#endif
107
108 if (!NT_SUCCESS(Status))
110
112}
LONG NTSTATUS
Definition: precomp.h:26
static DWORD EnablePrivilege(LPCWSTR lpszPrivilegeName, BOOL bEnablePrivilege)
Definition: shutdown.c:142
#define TRUE
Definition: types.h:120
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
VOID ShowWin32Error(IN DWORD dwError)
Definition: eventvwr.c:140
Status
Definition: gdiplustypes.h:25
NTSYSAPI ULONG WINAPI RtlNtStatusToDosError(NTSTATUS)
NTSTATUS NTAPI NtInitiatePowerAction(IN POWER_ACTION SystemAction, IN SYSTEM_POWER_STATE MinSystemState, IN ULONG Flags, IN BOOLEAN Asynchronous)
Definition: power.c:766
NTSTATUS NTAPI NtSetSystemPowerState(IN POWER_ACTION SystemAction, IN SYSTEM_POWER_STATE MinSystemState, IN ULONG Flags)
Definition: power.c:992
@ PowerSystemHibernate
Definition: ntpoapi.h:40
@ PowerActionHibernate
Definition: ntpoapi.h:126
DWORD WINAPI GetLastError(void)
Definition: except.c:1040
#define SE_SHUTDOWN_NAME
Definition: winnt_old.h:384

Referenced by TaskManagerWndProc().

◆ ShutDown_LockComputer()

VOID ShutDown_LockComputer ( VOID  )

Definition at line 182 of file shutdown.c.

183{
184 if (!LockWorkStation())
186}
EXTINLINE BOOL WINAPI LockWorkStation(VOID)
Definition: ntwrapper.h:82

Referenced by TaskManagerWndProc().

◆ ShutDown_LogOffUser()

VOID ShutDown_LogOffUser ( VOID  )

Definition at line 170 of file shutdown.c.

171{
172 if (!ExitWindowsEx(EWX_LOGOFF, SHTDN_REASON_MAJOR_OTHER | SHTDN_REASON_MINOR_OTHER))
174}
#define EWX_LOGOFF
Definition: winuser.h:631
BOOL WINAPI ExitWindowsEx(_In_ UINT, _In_ DWORD)

Referenced by TaskManagerWndProc().

◆ ShutDown_PowerOff()

VOID ShutDown_PowerOff ( VOID  )

Definition at line 115 of file shutdown.c.

116{
117 /* Trick: on Windows, pressing the CTRL key forces shutdown via NT API */
118 BOOL ForceShutdown = !!(GetKeyState(VK_CONTROL) & 0x8000);
119
121 {
123 return;
124 }
125
126 if (ForceShutdown)
127 {
129 if (!NT_SUCCESS(Status))
131 }
132 else
133 {
134 // The choice of EWX_SHUTDOWN or EWX_POWEROFF may be done with NtPowerInformation
135 if (!ExitWindowsEx(EWX_POWEROFF /* EWX_SHUTDOWN */, SHTDN_REASON_MAJOR_OTHER | SHTDN_REASON_MINOR_OTHER))
137 }
138
140}
@ ShutdownPowerOff
Definition: extypes.h:178
NTSTATUS NTAPI NtShutdownSystem(IN SHUTDOWN_ACTION Action)
Definition: shutdown.c:43
#define EWX_POWEROFF
Definition: winuser.h:632
#define VK_CONTROL
Definition: winuser.h:2193
SHORT WINAPI GetKeyState(_In_ int)

Referenced by TaskManagerWndProc().

◆ ShutDown_Reboot()

VOID ShutDown_Reboot ( VOID  )

Definition at line 143 of file shutdown.c.

144{
145 /* Trick: on Windows, pressing the CTRL key forces reboot via NT API */
146 BOOL ForceReboot = !!(GetKeyState(VK_CONTROL) & 0x8000);
147
149 {
151 return;
152 }
153
154 if (ForceReboot)
155 {
157 if (!NT_SUCCESS(Status))
159 }
160 else
161 {
162 if (!ExitWindowsEx(EWX_REBOOT, SHTDN_REASON_MAJOR_OTHER | SHTDN_REASON_MINOR_OTHER))
164 }
165
167}
@ ShutdownReboot
Definition: extypes.h:177
#define EWX_REBOOT
Definition: winuser.h:633

Referenced by TaskManagerWndProc().

◆ ShutDown_StandBy()

VOID ShutDown_StandBy ( VOID  )

Definition at line 61 of file shutdown.c.

62{
64
66 {
68 return;
69 }
70
71#ifdef NT_INITIATE_POWERACTION_IMPLEMENTED
74 0, FALSE);
75#else
78 0);
79#endif
80
81 if (!NT_SUCCESS(Status))
83
85}
@ PowerSystemSleeping1
Definition: ntpoapi.h:37
@ PowerActionSleep
Definition: ntpoapi.h:125

Referenced by TaskManagerWndProc().

◆ ShutDown_SwitchUser()

VOID ShutDown_SwitchUser ( VOID  )

Definition at line 177 of file shutdown.c.

178{
179}

Referenced by TaskManagerWndProc().