Imported Upstream version 2.4.3
This commit is contained in:
commit
26fb71b504
446 changed files with 148951 additions and 0 deletions
2
scripts/Windows/Makefile
Normal file
2
scripts/Windows/Makefile
Normal file
|
@ -0,0 +1,2 @@
|
|||
halt: halt.c
|
||||
gcc -mwindows -mno-cygwin -s -o halt.exe halt.c
|
84
scripts/Windows/halt.c
Normal file
84
scripts/Windows/halt.c
Normal file
|
@ -0,0 +1,84 @@
|
|||
/* gcc -mwindows -mno-cygwin -o halt.exe halt.c
|
||||
NAME
|
||||
halt - stopping the system
|
||||
|
||||
SYNOPSIS
|
||||
halt [-pq]
|
||||
|
||||
DESCRIPTION
|
||||
The halt utility logs off the current user, flushes the file system
|
||||
buffers to disk, stops all processes (non-responsive processes are
|
||||
only forced to stop in Windows 2000), and shuts the system down.
|
||||
|
||||
The options are as follows
|
||||
|
||||
-p Attempt to powerdown the system. If the powerdown fails, or
|
||||
the system does not support software powerdown, the system
|
||||
will halt.
|
||||
|
||||
-q Do not give processes a chance to shut down before halting or
|
||||
restarting. This option should not normally be used.
|
||||
|
||||
AUTHOR
|
||||
Ben Collver <collver@softhome.net>
|
||||
*/
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
#ifndef EWX_FORCEIFHUNG
|
||||
#define EWX_FORCEIFHUNG 0x00000010
|
||||
#endif
|
||||
|
||||
int WINAPI WinMain(
|
||||
HINSTANCE hInstance,
|
||||
HINSTANCE hPrevInstance,
|
||||
LPSTR lpCmdLine,
|
||||
int nCmdShow)
|
||||
{
|
||||
TOKEN_PRIVILEGES privileges = {1, {{{0, 0}, SE_PRIVILEGE_ENABLED}}};
|
||||
HANDLE my_token;
|
||||
UINT my_flags;
|
||||
|
||||
my_flags = EWX_SHUTDOWN | EWX_FORCEIFHUNG;
|
||||
|
||||
if (strstr(lpCmdLine, "q") != NULL) {
|
||||
my_flags |= EWX_FORCE;
|
||||
}
|
||||
|
||||
if (strstr(lpCmdLine, "p") != NULL) {
|
||||
my_flags |= EWX_POWEROFF;
|
||||
}
|
||||
|
||||
if (!LookupPrivilegeValue(
|
||||
NULL,
|
||||
SE_SHUTDOWN_NAME,
|
||||
&privileges.Privileges[0].Luid))
|
||||
{
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (!OpenProcessToken(
|
||||
GetCurrentProcess(),
|
||||
TOKEN_ADJUST_PRIVILEGES,
|
||||
&my_token))
|
||||
{
|
||||
exit(2);
|
||||
}
|
||||
|
||||
if (!AdjustTokenPrivileges(
|
||||
my_token,
|
||||
FALSE,
|
||||
&privileges,
|
||||
sizeof(TOKEN_PRIVILEGES),
|
||||
NULL,
|
||||
NULL))
|
||||
{
|
||||
exit(3);
|
||||
}
|
||||
|
||||
CloseHandle(my_token);
|
||||
if (!ExitWindowsEx(my_flags, 0)) {
|
||||
exit(4);
|
||||
}
|
||||
exit(0);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue