对于UAC提权操作,一般在编译期间,如果程序有需求要提权,会在编译器里设置,vs2010比较简单,在工程属性里可以直接设置,vs2005稍微有点儿麻烦,参考这篇文章:

http://www.seanyxie.com/vs2005%E4%B8%8B%E7%A8%8B%E5%BA%8Fuac%E6%8F%90%E6%9D%83/

这里给出一段示例代码,用来提权操作,实现windows的开机,关机,重启等操作。

#include <Windows.h>
#include <tchar.h> /*
系统特权提升
@lpName:
SE_SHUTDOWN_NAME 关机,重启权限
*/
BOOL PrivilegePromote(LPCTSTR lpName) {
HANDLE hToken = NULL;
TOKEN_PRIVILEGES tkp = {0};
// 打开进程令牌
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&hToken))
{
return FALSE;
} // 查找系统权限的特权值
if (!LookupPrivilegeValue(NULL,lpName,&tkp.Privileges[0].Luid))
{
CloseHandle(hToken);
return TRUE;
} // 调整令牌特权
if(!AdjustTokenPrivileges(hToken,FALSE,&tkp,sizeof(TOKEN_PRIVILEGES),NULL,NULL)) {
CloseHandle(hToken);
return FALSE;
} return TRUE;
} /*
系统启动控制:注销,重启,关机
@dwFlags:EWX_LOGOFF | EWX_REBOOT | EWX_SHUTDOWN
@bForce:是否强制
*/
BOOL StartUpContrl(DWORD dwFlags,BOOL bForce) {
// 参数校验
if (dwFlags != EWX_LOGOFF && dwFlags != EWX_REBOOT && dwFlags != EWX_SHUTDOWN)
{
return FALSE;
} // 获取系统版本,ExitWindowsEx 在NT平台上需要提升权限
OSVERSIONINFO osvi = {0};
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
// 版本信息获取
if ( !GetVersionEx(&osvi))
{
return FALSE;
} // 是NT系统 需要进行权限提升
if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)
{
PrivilegePromote(SE_SHUTDOWN_NAME);
} dwFlags |= (bForce != FALSE)? EWX_FORCE : EWX_FORCEIFHUNG; return ExitWindowsEx(dwFlags, 0);
} int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd ) {
if (_tcscmp(lpCmdLine,_T("/r")) == 0){
StartUpContrl(EWX_REBOOT,TRUE);
} else if (_tcscmp(lpCmdLine,_T("/s")) == 0){
StartUpContrl(EWX_SHUTDOWN,TRUE);
} else if (_tcscmp(lpCmdLine,_T("/l")) == 0){
StartUpContrl(EWX_LOGOFF,TRUE);
} return 0;
}
BOOL ExitWindowsEx(
UINT uFlags, // 关闭参数
DWORD dwReserved // 系统保留,一般取0

);

参数介绍:

uFlags

指定关闭的类型。此参数必须有下列值的组合:
EWX_FORCE
强制终止进程。当此标志设置,Windows不会发送消息WM_QUERYENDSESSION和WM_ENDSESSION的消息给目前在系统中运行的程序。这可能会导致应用程序丢失数据。因此,你应该只在紧急情况下使用此标志。
EWX_LOGOFF
关闭所有进程,然后注销用户。
EWX_POWEROFF
关闭系统并关闭电源。该系统必须支持断电。
Windows要求:
Windows NT中调用进程必须有 SE_SHUTDOWN_NAME 特权。
Windows 9X中:可以直接调用。
EWX_REBOOT
关闭系统,然后重新启动系统。
Windows要求:
Windows NT中:调用进程必须有SE_SHUTDOWN_NAME特权。
Windows 9X中:可以直接调用。
EWX_SHUTDOWN
关闭系统,安全地关闭电源。所有文件缓冲区已经刷新到磁盘上,所有正在运行的进程已经停止。
Windows要求:
Windows NT中:调用进程必须有SE_SHUTDOWN_NAME特权。
Windows 9X中:可以直接调用。

dwReserved

系统保留,这参数被忽略。一般取0。
返回值
如果函数成功,返回值为非零。
如果函数失败,返回值是零。想获得更多错误信息,请调用GetLastError函数。
ExitWindowsEx函数返回后,启动了关闭。关闭或注销。
在关机或登录操作中,应用程序在允许关闭的时间具体数额内回应关机请求。如果时间到期时,Windows会显示一个对话框,允许用户强行关闭应用程序:关闭、重试,或取消关机要求。如果存在EWX_FORCE指定值,Windows会关闭应用程序而不显示该对话框。
Windows NT中:关闭或重新启动系统,调用进程必须使用AdjustTokenPrivileges函数使SE_SHUTDOWN_NAME特权。Windows 95中:安全特权,不支持或需要。

http://www.seanyxie.com/windows%E6%8F%90%E6%9D%83%E6%93%8D%E4%BD%9C%E4%BB%A5%E5%8F%8A%E7%B3%BB%E7%BB%9F%E5%BC%80%E6%9C%BA%E5%85%B3%E6%9C%BA%E9%87%8D%E5%90%AF%E4%BB%A3%E7%A0%81/

windows提权操作以及系统开机关机重启代码(用到了LookupPrivilegeValue和AdjustTokenPrivileges调整进程的Token权限)的更多相关文章

  1. 「白帽黑客成长记」Windows提权基本原理(下)

    上一篇文章我们介绍了信息收集方法和WMIC,今天我们将跟随作者深入学习Windows提权基本原理的内容,希望通过这两篇文章的讲解,大家能够真正掌握这个技能. 推荐阅读:「白帽黑客成长记」Windows ...

  2. [转帖]「白帽黑客成长记」Windows提权基本原理(下)

    「白帽黑客成长记」Windows提权基本原理(下) https://www.cnblogs.com/ichunqiu/p/10968674.html 提权.. 之前还在想 为什么 我的 sqlserv ...

  3. 2017-2018-2 20155315《网络对抗技术》免考五:Windows提权

    原理 使用metasploit使目标机成功回连之后,要进一步攻击就需要提升操作权限.对于版本较低的Windows系统,在回连的时候使用getsystem提权是可以成功的,但是对于更高的系统操作就会被拒 ...

  4. 35.windows提权总结

    本文参考自冷逸大佬的博客,源地址在这里:https://lengjibo.github.io/windows%E6%8F%90%E6%9D%83%E6%80%BB%E7%BB%93/ windows提 ...

  5. Windows提权总结

    当以低权用户进去一个陌生的windows机器后,无论是提权还是后续做什么,第一步肯定要尽可能的搜集信息.知己知彼,才百战不殆. 常规信息搜集 systeminfo 查询系统信息 hostname 主机 ...

  6. Windows提权小结

    摸鱼的时候,想想内网这部分还有什么地方适合水一下,翻翻往期,开始填坑 总结一下Windows提权的部分,以后有时间再补一下Linux提权 这仍然是一篇思路总结类的随笔,具体细节内容不展开,也展开不了. ...

  7. 「白帽黑客成长记」Windows提权基本原理(上)

    我们通常认为配置得当的Windows是安全的,事实真的是这样吗?今天让我们跟随本文作者一起深入了解Windows操作系统的黑暗角落,看看是否能得到SYSTEM权限. 作者将使用不同版本的Windows ...

  8. [转帖]「白帽黑客成长记」Windows提权基本原理(上)

    「白帽黑客成长记」Windows提权基本原理(上) https://www.cnblogs.com/ichunqiu/p/10949592.html 我们通常认为配置得当的Windows是安全的,事实 ...

  9. CVE-2020-0796提权操作

    简介 最新的windows10中使用了SMBv3协议,SMBv3协议在压缩消息时,未对头部数据做任何检查,导致恶意攻击者可以直接使用,从而导致内存破坏漏洞. 该漏洞可远程进行攻击目标系统,但目前只做到 ...

随机推荐

  1. Servlet中文乱码解决方法

    程序中的输入输出都是以流的形式保存的,流中保存的实际上全都是字节文件. 字节流和字符流的区别: 在Java.io包中操作文件内容的主要有两大类:字节流.字符流,两类都分为输入和输出操作. 在字节流中输 ...

  2. C#实现Ruby的负数索引器

    public class InvertibleList<T> : List<T> { public new T this[int index] { get { ) return ...

  3. android之listView定位到指定行同时隐藏输入键盘

    帮别人该bug遇到的一个问题,记录下来. listView.setSelection(a); 这个方法可以让让你的listview定位到指定行 但是如果紧接着执行隐藏输入键盘的代码,则会有bug,这个 ...

  4. Nginx性能统计模块http_stub_status_module使用

    1.进入nginx源码目录,重新配置编译参数 ./configure --prefix=/usr/local/nginx/ --with-http_stub_status_module 2.重新编译安 ...

  5. Powerdesigner中如何生成测试数据

    设计表完成以后,我们需要生成一些测试数据,可以直接更新到数据库中,下面我们就来试试: 第一步:建立需要的Profiles测试文件,[Model]--[Test Data Profiles],如图所示: ...

  6. CEO、COO、CFO、CTO

    CEO.COO.CFO.CTO是什么意思? 网站里的各种职位: CEO(Chief executive officer)首席执行官 类似总经理.总裁,是企业的法人代表. COO(Chief opera ...

  7. css3 盒模型

    0,前言 在css2.1 之前,我们都熟知的两种盒模型,一种是w3c标准盒模型,另外一种是怪异模式下的盒模型.在css3之前我们一直使用的是标准盒模型,但是标准盒模型的宽度总是需要小心的去使用,稍有不 ...

  8. SQL多表查询中的分页,字段组合综合实例解析

    原文:http://www.jb51.net/article/28753.htm http://xuzhihong1987.blog.163.com/blog/static/2673158720098 ...

  9. hadoop_并行写操作思路

    这篇文章是关于,如何修改hadoop的src以实现在client端上传大文件到HDFS的时候, 为了提高上传的效率实现将文件划分成多个块,将块并行的写入到datanode的各个block中 的初步的想 ...

  10. 关于jQuery $.isNumeric vs. $.isNaN vs. isNaN

    在jQuery中,有几种方式可以判断一个对象是否是数字,或者可否转换为数字. 首先,jQuery.isNaN()在最新版本中已经被移除了(1.7之后),取而代之的是  jQuery.isNumeric ...