/* * This is free software, Under GPL2.0 * * (c) Tody 2010, FIC Inc. * All Rights Reserved * * Fast Down System for Windows NT * * Revision: 1.0 * Author: Tody * Date: 2010-08-05 */ #include <stdio.h> #include <stdlib.h> #include <windows.h> #define progname "fastdown.exe" typedef int (*NtProc)(int); int EnablePrivilage(); void usage(); void usage() { printf("(c) Tody 2010, FIC Inc./n", progname); printf("Fastdown Tool Rev: 1.0.0/n", progname); printf("Usage:/n %s <code>/n/n", progname); printf(" Code:/n/t0: Shutdown No Reboot/n"); printf("/t1: Shutdown Reboot/n"); printf("/t2: Shutdown PowerOff/n"); exit(1); } int EnablePrivilage() { HANDLE hToken; TOKEN_PRIVILEGES tkp; if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY|TOKEN_ADJUST_PRIVILEGES, &hToken)) { if(!LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid)) { return 1; /* Failure */ } tkp.PrivilegeCount = 1; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if(!AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, NULL, 0)) { return 1; /* Failure */ } CloseHandle(hToken); } else { return 1; /* Failure */ } return 0; /* Success */ } int main(int argc, char *argv[]) { NtProc NtShutdownSystem = NULL; int retval = 0; HINSTANCE h = LoadLibrary("ntdll.dll"); /* Load ntdll.dll file */ if (h == NULL) { printf("LoadLibrary() Fail!/n"); return 1; } if (argc<2 || argv[1][0]>'2' || argv[1][0]<'0') { usage(); } NtShutdownSystem = (NtProc)GetProcAddress(h, "NtShutdownSystem"); /* Get Proc Address of function */ if (NtShutdownSystem == NULL) { printf("Get NtShutdownSystem Address Fail!/n"); return 1; } retval = EnablePrivilage(); /* Enable Shutdown Privilage */ if (retval) { printf("EnablePrivilage() Fail!/n"); return 1; } printf("Windows is shutting down..."); NtShutdownSystem(atoi(argv[1])); /* Call Shutdown Function */ printf("Error: %d %d", GetLastError(),atoi(argv[1])); /* Debug info. */ FreeLibrary(h); getchar(); return 0; }