VC驿站黑客编程(关机,重新启动,注销)

此程序在VS2013下编译通过,假设换到编译器,大家能够稍作改动使用
#include<Windows.h>
#include<tchar.h>
#include"resource1.h"
#pragma warning(disable:4996)
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;
}
//winMain是一个win32程序的入口点,
//程序入口点:	1.console程序的入口点函数 main
//				2.win32程序的入口点函数   WinMain
//				3.dll32程序的入口点函数   DllMain
//				4.服务程序的入口点函数    ServiceMain
//				5.驱动程序入口点函数      Driver
//參数1,HINSTANCE hInstance 应用程序实例句柄
//參数2。HINSTANCE hPrevInstance前一个程序实例
//參数3。LPSTR lpCmdLine 是一个用户运行应用程序时传入的參数
//參数4,int nShowCmd假设有窗体以什么形态显示窗体,最大化,最小化
//reset window  status 又一次设置window状态

/*
C4996以前不是警告么?如今升级啦?

尝试这个
1.Project Properties > Configuration Properties > C/C++ > General > SDL checks关掉

其它方法:
2.#pragma warning(disable: 4996)
3。

/wd 4996
*/

BOOL ReSetWindow(DWORD dwFlag, BOOL bForce)
{
	//推断又一次设置的标志
	switch (dwFlag)
	{
	case EWX_LOGOFF:
	case EWX_REBOOT:
	case EWX_SHUTDOWN:
	case EWX_POWEROFF:
		break;
	default:
		return FALSE;
	}
	//获取电脑系统版本号
	OSVERSIONINFO osvi = { 0 };
	osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);

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

	DWORD highVersion;
	DWORD lowVersion;
	//获取主版本号号
	highVersion = osvi.dwMajorVersion;
	//获取次版本号号
	lowVersion = osvi.dwMinorVersion;

	DWORD plat = osvi.dwPlatformId;

	if (plat == VER_PLATFORM_WIN32_NT)
	{
		EnableShutDownPriv();
	}

	//在window中通常是占领不同的位数表示不同的值,一般通过|来获取两个或两个以上的效果
	dwFlag = bForce ?

dwFlag | EWX_FORCE : dwFlag|EWX_FORCEIFHUNG;
	ExitWindowsEx(dwFlag, 0);
}
INT_PTR CALLBACK DialogProc(
	_In_  HWND hwndDlg,
	_In_  UINT uMsg,
	_In_  WPARAM wParam,
	_In_  LPARAM lParam
	)
{
	TCHAR  tStr[20] = { 0 };
	switch (uMsg)
	{
	case WM_INITDIALOG:
	{
						  //获取窗体句柄
						  HWND hComBox = GetDlgItem(hwndDlg, IDC_COMBO1);
						  //往combobox中插入值
						  SendMessage(hComBox, CB_INSERTSTRING, 0, (LPARAM)_T("注销"));
						  SendMessage(hComBox, CB_INSERTSTRING, 1, (LPARAM)_T("重新启动"));
						  SendMessage(hComBox, CB_INSERTSTRING, 2, (LPARAM)_T("关机"));
						  //选择button
						  SendMessage(hComBox, CB_SELECTSTRING, 0, (LPARAM)_T("注销"));
						  //获取屏幕大小
						  int witdh = GetSystemMetrics(SM_CXSCREEN);
						  int height = GetSystemMetrics(SM_CYSCREEN);
						  RECT rect;
						  GetWindowRect(hwndDlg, &rect);
						  //获取对话框的大小
						  int dlgW = rect.right - rect.left;
						  int dlgH = rect.top = rect.bottom;

						  //设置窗体位置
						  SetWindowPos(hwndDlg, 0, witdh / 2 - dlgW / 2, height / 2 - dlgH / 2, dlgW, dlgH, SWP_SHOWWINDOW);

	}
		break;
	case WM_COMMAND:
	{
					   switch (wParam)
					   {
					   case IDOK:

						   GetDlgItemText(hwndDlg, IDC_COMBO1, tStr, 20);
						   if (wcscmp(tStr, _T("注销")))
						   {
							   ReSetWindow(EWX_LOGOFF, FALSE);
						   }
						   else if (wcscmp(tStr, _T("重新启动")))
						   {
							   ReSetWindow(EWX_REBOOT, FALSE);
						   }
						   else if (wcscmp(tStr, _T("关机")))
						   {
							   ReSetWindow(EWX_SHUTDOWN, FALSE);
						   }
						   break;
					   case IDCANCEL:
						   if (MessageBox(NULL,_T("是否关闭"),_T("提示"),MB_OKCANCEL)==IDOK)
						   {
							   EndDialog(hwndDlg, IDCANCEL);
						   }
						   break;
					   default:
						   break;
					   }
	}
		break;
	default:
		break;
	}
	return 0;
}

int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
	if (strcmp(lpCmdLine, "/r") == 0)
	{
		ReSetWindow(EWX_REBOOT, FALSE);
	}
	else if (strcmp(lpCmdLine,"/f")==0)
	{
		ReSetWindow(EWX_LOGOFF, FALSE);
	}
	else if (strcmp(lpCmdLine,"/s")==0)
	{
		ReSetWindow(EWX_SHUTDOWN, FALSE);
	}
	else
	{
		DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,DialogProc);
	}

	return 0;
}
时间: 2024-12-31 14:27:37

VC驿站黑客编程(关机,重新启动,注销)的相关文章

VC驿站黑客编程(关机,重启,注销)

此程序在VS2013下编译通过,如果换到其他平台,大家可以稍作修改使用 #include<Windows.h> #include<tchar.h> #include"resource1.h" #pragma warning(disable:4996) BOOL EnableShutDownPriv() { HANDLE hToken = NULL; TOKEN_PRIVILEGES tkp = {0}; //打开当前程序的权限令牌 if (!OpenProces

《C++黑客编程揭秘与防范》(第二版)

本书是<C++黑客编程揭秘与防范>的升级版,在前书的基础上新添加了一些内容,同时也删除了一些过时的内容.本书以Win32应用层下安全开发为中心,介绍Windows系统下的安全开发. 本书介绍了操作系统的相关操作,比如进程.线程.注册表等知识.当读者掌握了关于进程.线程.注册表等相关的开发知识后,就可以把一些常规的操作进程.注册表.文件等用代码进行实现,这样,一些日常的操作可与学习的编程知识相结合.除了操作的知识外,本书还介绍了关于网络应用程序的开发,了解Winsock的开发后,读者就会明白在应

如何删除Win10专业版关机按钮“注销”选项

Win10开始菜单关机按钮包括切换用户.锁定.注销.重新启动.睡眠等选项,用户由于操作太快经常点击注销选项,导致很多失误,于是就有在问能不能把注销选项删除呢?答案是可以的,下面我们来具体的操作步骤. Win10删除关机按钮"注销"选项的方法: 1.鼠标点击"开始"菜单,选择真钱麻将"运行"选项; 2.在打开的对话框中输入gpedit.msc字符命令,按确定键; 3.在打开的本地组策略编辑器中依次展开"用户配置"-"管

书评第001篇:《C++黑客编程揭秘与防范》

本书基本信息 作者:冀云(编著) 出版社:人民邮电出版社 出版时间:2012-6-1 ISBN:9787115280640 版次:1 页数:265 字数:406000 印刷时间:2012-6-1 开本:16开 纸张:胶版纸 印次:1 包装:平装 定价:39.00元   书籍封面 内容简介 <C++黑客编程揭秘与防范>旨在通过简单的语法知识及常用的系统函数编程,完成一些有特定功能的安全工具,让读者对系统知识等各方面有一个全面的了解,并且在笔者的带领下一步步完成书中的实例.本书主要内容为:第1章了

Python黑客编程基础3网络数据监听和过滤

Python黑客编程3网络数据监听和过滤 课程的实验环境如下: •      操作系统:kali Linux 2.0 •      编程工具:Wing IDE •      Python版本:2.7.9 •      涉及到的主要python模块:pypcap,dpkt,scapy,scapy-http 涉及到的几个python网络抓包和分析的模块,dpkt和scapy在kali linux 2.0 中默认已经被安装,如果你的系统中没有需要手动安装一下,下面是软件包安装的简单说明. 在kali下

今天逛VC驿站 的收获

1.C++ 如何定义一个定长字符串, 若不足位数,就补字符串"0"? eg: CString str1 = “123”;不足20位,前面补“0”,实现效果为“00000000000000000123” answer: str.Format(_T("%020s"),_T("aaa")); 2.vs2010建的单文档程序如何隐藏菜单栏? answer: 这个是MFC标准的单文档,可以哦.不知道你选的是什么类型的单文档 然后这个是Visucal Stu

VC++网络高级编程

内含<VC网络高级编程>电子书 及源码. 第一章.TCP/IP协议:第二章.Winsock网络编程接口:第二章.Visual C++与网络编程:第四章.基本网络编程技术:第五章.Telnet协议的实现:第六章.Http协议的实现:第七章.Ftp协议的实现:第八章.文件下载:第九章.UDP协议的实现: 下载地址:http://download.csdn.net/my VC++网络高级编程,布布扣,bubuko.com

Python黑客编程入门教程

我真正开始学习Python是从今年4月份看到2017年的国赛试题之后,之前虽也零星接触过,但都只是皮毛,所以对于我,必须要借助这样一些目标的驱动,才有动力或压力去深入学习下去,这也是我坚持带比赛的一个主要原因. 这套教程是在7月份暑假集训期间录制的,所以从我开始学习Python到录制教程前后也就3个多月的时间,因而教程的内容肯定是相对比较粗糙的.之所以要这么赶,主要是必须要在暑假集训期间让这批准备参加11月份省赛的同学能对Python入门,省赛要跟国赛走,而Python必定是今年省赛的重点.还有

kali linux Python 黑客编程1 开发环境初始化

kali linux Python 黑客编程1 开发环境初始化 为什么要选择Python? Python作为目前Linux系统下最流行的编程语言之一,对于安全工作者的作用可以和C++相提并论.Python提供了丰富的库供调用,丰富的第三方扩展模块.在网络应用,文本解析方面,Python编程有着其他语言无可比拟的优势.同时Python也是面向对象并且跨平台的语言,可以在linux/Unix.OSX.windows上无障碍运行. 1.1 查看PYTHON版本信息 Kali Linux默认已经安装了P