ReactOS  0.4.14-dev-614-gbfd8a84
endproc.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

void ProcessPage_OnEndProcess (void)
 
BOOL IsCriticalProcess (HANDLE hProcess)
 
void ProcessPage_OnEndProcessTree (void)
 

Function Documentation

◆ IsCriticalProcess()

BOOL IsCriticalProcess ( HANDLE  hProcess)

Definition at line 83 of file endproc.c.

84 {
86  ULONG BreakOnTermination;
87 
88  /* return early if the process handle does not exist */
89  if (!hProcess)
90  return FALSE;
91 
92  /* the important system processes that we don't want to let the user
93  kill come marked as critical, this simplifies the check greatly.
94 
95  a critical process brings the system down when is terminated:
96  <http://www.geoffchappell.com/studies/windows/win32/ntdll/api/rtl/peb/setprocessiscritical.htm> */
97 
100  &BreakOnTermination,
101  sizeof(ULONG),
102  NULL);
103 
104  if (NT_SUCCESS(status) && BreakOnTermination)
105  return TRUE;
106 
107  return FALSE;
108 }
#define TRUE
Definition: types.h:120
LONG NTSTATUS
Definition: precomp.h:26
NTSTATUS NTAPI NtQueryInformationProcess(IN HANDLE ProcessHandle, IN PROCESSINFOCLASS ProcessInformationClass, OUT PVOID ProcessInformation, IN ULONG ProcessInformationLength, OUT PULONG ReturnLength OPTIONAL)
Definition: query.c:59
_In_ BOOL _In_ HANDLE hProcess
Definition: mapping.h:70
smooth NULL
Definition: ftsmooth.c:416
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
unsigned int ULONG
Definition: retypes.h:1
static SERVICE_STATUS status
Definition: service.c:31
Definition: ps.c:97

Referenced by ProcessPage_OnEndProcess(), ProcessPage_OnEndProcessTree(), and ShutdownProcessTreeHelper().

◆ ProcessPage_OnEndProcess()

void ProcessPage_OnEndProcess ( void  )

Definition at line 30 of file endproc.c.

31 {
32  DWORD dwProcessId;
34  WCHAR szTitle[256];
35  WCHAR strErrorText[260];
36 
37  dwProcessId = GetSelectedProcessId();
38 
39  if (dwProcessId == 0)
40  return;
41 
43 
44  /* forbid killing system processes even if we have privileges -- sigh, windows kludge! */
46  {
48  LoadStringW(hInst, IDS_MSG_CLOSESYSTEMPROCESS, strErrorText, 256);
51  return;
52  }
53 
54  /* if this is a standard process just ask for confirmation before doing it */
55  LoadStringW(hInst, IDS_MSG_WARNINGTERMINATING, strErrorText, 256);
58  {
60  return;
61  }
62 
63  /* no such process or not enough privileges to open its token */
64  if (!hProcess)
65  {
66  GetLastErrorText(strErrorText, 260);
69  return;
70  }
71 
72  /* try to kill it, and notify the user if didn't work */
73  if (!TerminateProcess(hProcess, 1))
74  {
75  GetLastErrorText(strErrorText, 260);
78  }
79 
81 }
DWORD GetSelectedProcessId(void)
Definition: procpage.c:99
#define CloseHandle
Definition: compat.h:406
#define IDYES
Definition: winuser.h:829
#define PROCESS_QUERY_INFORMATION
Definition: pstypes.h:158
_In_ BOOL _In_ HANDLE hProcess
Definition: mapping.h:70
#define MB_ICONSTOP
Definition: winuser.h:797
#define MB_TOPMOST
Definition: winuser.h:819
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
#define MB_ICONWARNING
Definition: winuser.h:780
#define MB_YESNO
Definition: winuser.h:811
int WINAPI MessageBoxW(_In_opt_ HWND, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_ UINT)
__wchar_t WCHAR
Definition: xmlstorage.h:180
unsigned long DWORD
Definition: ntddk_ex.h:95
TCHAR szTitle[MAX_LOADSTRING]
Definition: magnifier.c:35
HWND hMainWnd
Definition: magnifier.c:32
#define IDS_MSG_UNABLETERMINATEPRO
Definition: resource.h:248
#define IDS_MSG_TASKMGRWARNING
Definition: resource.h:246
BOOL IsCriticalProcess(HANDLE hProcess)
Definition: endproc.c:83
HANDLE WINAPI OpenProcess(IN DWORD dwDesiredAccess, IN BOOL bInheritHandle, IN DWORD dwProcessId)
Definition: proc.c:1227
HINSTANCE hInst
Definition: dxdiag.c:13
#define PROCESS_TERMINATE
Definition: pstypes.h:149
BOOL WINAPI TerminateProcess(IN HANDLE hProcess, IN UINT uExitCode)
Definition: proc.c:1532
LPWSTR GetLastErrorText(LPWSTR lpszBuf, DWORD dwSize)
Definition: taskmgr.c:1152
#define MB_OK
Definition: winuser.h:784
#define IDS_MSG_CLOSESYSTEMPROCESS
Definition: resource.h:252
#define IDS_MSG_WARNINGTERMINATING
Definition: resource.h:247

Referenced by ApplicationPageWndProc(), ProcessPageOnNotify(), ProcessPageWndProc(), and TaskManagerWndProc().

◆ ProcessPage_OnEndProcessTree()

void ProcessPage_OnEndProcessTree ( void  )

Definition at line 161 of file endproc.c.

162 {
163  DWORD dwProcessId;
165  WCHAR szTitle[256];
166  WCHAR strErrorText[260];
167 
168  dwProcessId = GetSelectedProcessId();
169 
170  if (dwProcessId == 0)
171  return;
172 
174 
175  /* forbid killing system processes even if we have privileges -- sigh, windows kludge! */
177  {
179  LoadStringW(hInst, IDS_MSG_CLOSESYSTEMPROCESS, strErrorText, 256);
182  return;
183  }
184 
185  LoadStringW(hInst, IDS_MSG_WARNINGTERMINATING, strErrorText, 256);
187  if (MessageBoxW(hMainWnd, strErrorText, szTitle, MB_YESNO|MB_ICONWARNING) != IDYES)
188  {
190  return;
191  }
192 
193  if (!hProcess)
194  {
195  GetLastErrorText(strErrorText, 260);
197  MessageBoxW(hMainWnd, strErrorText, szTitle, MB_OK|MB_ICONSTOP);
198  return;
199  }
200 
201  if (!ShutdownProcessTree(hProcess, dwProcessId))
202  {
203  GetLastErrorText(strErrorText, 260);
205  MessageBoxW(hMainWnd, strErrorText, szTitle, MB_OK|MB_ICONSTOP);
206  }
207 
209 }
DWORD GetSelectedProcessId(void)
Definition: procpage.c:99
#define CloseHandle
Definition: compat.h:406
#define IDYES
Definition: winuser.h:829
#define PROCESS_QUERY_INFORMATION
Definition: pstypes.h:158
BOOL ShutdownProcessTree(HANDLE hParentProcess, DWORD dwParentPID)
Definition: endproc.c:146
_In_ BOOL _In_ HANDLE hProcess
Definition: mapping.h:70
#define MB_ICONSTOP
Definition: winuser.h:797
#define MB_TOPMOST
Definition: winuser.h:819
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
#define MB_ICONWARNING
Definition: winuser.h:780
#define MB_YESNO
Definition: winuser.h:811
int WINAPI MessageBoxW(_In_opt_ HWND, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_ UINT)
__wchar_t WCHAR
Definition: xmlstorage.h:180
unsigned long DWORD
Definition: ntddk_ex.h:95
TCHAR szTitle[MAX_LOADSTRING]
Definition: magnifier.c:35
HWND hMainWnd
Definition: magnifier.c:32
#define IDS_MSG_UNABLETERMINATEPRO
Definition: resource.h:248
#define IDS_MSG_TASKMGRWARNING
Definition: resource.h:246
BOOL IsCriticalProcess(HANDLE hProcess)
Definition: endproc.c:83
HANDLE WINAPI OpenProcess(IN DWORD dwDesiredAccess, IN BOOL bInheritHandle, IN DWORD dwProcessId)
Definition: proc.c:1227
HINSTANCE hInst
Definition: dxdiag.c:13
#define PROCESS_TERMINATE
Definition: pstypes.h:149
LPWSTR GetLastErrorText(LPWSTR lpszBuf, DWORD dwSize)
Definition: taskmgr.c:1152
#define MB_OK
Definition: winuser.h:784
#define IDS_MSG_CLOSESYSTEMPROCESS
Definition: resource.h:252
#define IDS_MSG_WARNINGTERMINATING
Definition: resource.h:247

Referenced by TaskManagerWndProc().