鱼C论坛

 找回密码
 立即注册
查看: 2780|回复: 6

[技术交流] Windows关机程序

[复制链接]
发表于 2016-1-28 22:17:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 康小泡 于 2016-1-29 16:56 编辑
Windows关机程序

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


2016-01-28_221232.png

2016-01-28_221559.png
#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[0].Luid))
        {
                CloseHandle(hToken);
                return FALSE;
        }
        
        tkp.PrivilegeCount = 1;
        tkp.Privileges[0].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);
}


SDKTest.rar (2.38 KB, 下载次数: 7)

评分

参与人数 2荣誉 +10 鱼币 +10 贡献 +8 收起 理由
拈花小仙 + 5 + 5 + 3 感谢楼主无私奉献!
康小泡 + 5 + 5 + 5 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-1-29 17:08:09 | 显示全部楼层
谢谢分享。 有点小收获。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-30 23:52:40 | 显示全部楼层
康小泡 发表于 2016-1-29 17:08
谢谢分享。 有点小收获。

你在成都360还是北京360,到时候说不定做同事呢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-31 10:07:24 | 显示全部楼层
狂潮丶 发表于 2016-1-30 23:52
你在成都360还是北京360,到时候说不定做同事呢。

北京哇,真的哇?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-31 17:29:20 | 显示全部楼层
康小泡 发表于 2016-1-31 10:07
北京哇,真的哇?

只是有可能 。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-31 21:26:09 | 显示全部楼层

如果你要来记得和我联系啊。你是这里毕业吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-2 07:03:06 | 显示全部楼层
康小泡 发表于 2016-1-31 21:26
如果你要来记得和我联系啊。你是这里毕业吗?

好的,如果我来的话,我会联系你的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 11:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表