狂潮丶 发表于 2016-1-28 22:17:08

Windows关机程序

本帖最后由 康小泡 于 2016-1-29 16:56 编辑


Windows关机程序

使用:
1. 复制可执行文件快捷方式
2.在CmdShell下执行







#include <TCHAR.H>

#include <Windows.h>
#define EWX_FORCEIFHUNG   0x00000010

BOOL EnableShutDownPriv();
BOOL ReSetWindows(DWORD dwFlags, BOOL bForce);



int WINAPI WinMain(HINSTANCE hInstance,      // handle to current instance
                                   HINSTANCE hPrevInstance,// handle to previous instance
                                   LPSTR lpCmdLine,          // command line
                                   int nCmdShow)             // show state   
{
        if (_tcscmp(lpCmdLine, ("/r")) == 0)
        {
                ReSetWindows(EWX_REBOOT, FALSE);
        }
        else if (_tcscmp(lpCmdLine, ("/s")) == 0)
        {
                ReSetWindows(EWX_SHUTDOWN, FALSE);
        }
        else if (_tcscmp(lpCmdLine, ("/l")) == 0)
        {
                ReSetWindows(EWX_LOGOFF, FALSE);
        }

        return 0;
}


BOOL EnableShutDownPriv()
{
        HANDLE hToken = NULL;
        TOKEN_PRIVILEGES tkp = {0};
       
        //
        if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
        {
                return FALSE;
        }
       
        //
        if (!LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges.Luid))
        {
                CloseHandle(hToken);
                return FALSE;
        }
       
        tkp.PrivilegeCount = 1;
        tkp.Privileges.Attributes = SE_PRIVILEGE_ENABLED;
       
        //
        if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof(TOKEN_PRIVILEGES), NULL, NULL))
        {
                CloseHandle(hToken);
                return FALSE;
        }
       
       
        return TRUE;
}


BOOL ReSetWindows(DWORD dwFlags, BOOL bForce)
{
        // Check the parameter
        if (dwFlags != EWX_LOGOFF && dwFlags != EWX_REBOOT && dwFlags != EWX_SHUTDOWN)
        {
                return FALSE;
        }
       
        // Get the operation system version
        OSVERSIONINFO osvi = {0};
        osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);

        if (!GetVersionEx(&osvi))
        {
                return FALSE;
        }

        if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)
        {
                EnableShutDownPriv();
        }       

        if (bForce != FALSE)
        {
                dwFlags = dwFlags | EWX_FORCE;
        }
        else
        {
                dwFlags = dwFlags | EWX_FORCEIFHUNG;
        }

       
        return ExitWindowsEx(dwFlags, 0);
}





康小泡 发表于 2016-1-29 17:08:09

谢谢分享。{:10_256:} 有点小收获。

狂潮丶 发表于 2016-1-30 23:52:40

康小泡 发表于 2016-1-29 17:08
谢谢分享。 有点小收获。

你在成都360还是北京360,到时候说不定做同事呢。

康小泡 发表于 2016-1-31 10:07:24

狂潮丶 发表于 2016-1-30 23:52
你在成都360还是北京360,到时候说不定做同事呢。

北京哇,真的哇?

狂潮丶 发表于 2016-1-31 17:29:20

康小泡 发表于 2016-1-31 10:07
北京哇,真的哇?

只是有可能 。

康小泡 发表于 2016-1-31 21:26:09

狂潮丶 发表于 2016-1-31 17:29
只是有可能 。

{:10_250:}如果你要来记得和我联系啊。你是这里毕业吗?

狂潮丶 发表于 2016-2-2 07:03:06

康小泡 发表于 2016-1-31 21:26
如果你要来记得和我联系啊。你是这里毕业吗?

好的,如果我来的话,我会联系你的。
页: [1]
查看完整版本: Windows关机程序