【API】Windows 程序提升权限函数

BOOL EnableShutdownPrivilege()
{
HANDLE hProcess = NULL;
HANDLE hToken = NULL;
LUID uID = {0};
TOKEN_PRIVILEGES stToken_Privileges = {0};

hProcess = ::GetCurrentProcess(); //获取当前应用程序进程句柄

if(!::OpenProcessToken(hProcess,TOKEN_ADJUST_PRIVILEGES,&hToken)) //打开当前进程的访问令牌句柄(OpenProcessToken函数调用失败返回值为零)
{
return FALSE;
}
if(!::LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&uID)) //获取权限名称为"SeShutdownPrivilege"的LUID(LookupPrivilegeValue函数调用失败返回值为零)
{
return FALSE;
}
stToken_Privileges.PrivilegeCount = 1; //欲调整的权限个数
stToken_Privileges.Privileges[0].Luid = uID; //权限的LUID
stToken_Privileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; //权限的属性,SE_PRIVILEGE_ENABLED为使能该权限

if(!::AdjustTokenPrivileges(hToken,FALSE,&stToken_Privileges,sizeof stToken_Privileges,NULL,NULL)) //调整访问令牌里的指定权限(AdjustTokenPrivileges函数调用失败返回值为零)
{
return FALSE;
}

if(::GetLastError() != ERROR_SUCCESS) //查看权限是否调整成功
{
return FALSE;
}
::CloseHandle(hToken);
return TRUE;
}

原文地址:http://blog.51cto.com/383156647/2068198

时间: 2024-10-08 09:33:14

【API】Windows 程序提升权限函数的相关文章

为编写的Windows程序提升权限

1.要求以管理员身份运行 在vs工程属性中,Linker ---> Manifest File---> UAC Execution Level,选择requireAdministrator (/level='requireAdministrator')选项 2.在main函数开始时运行以下函数代码: BOOL WINAPI EnablePrivileges() { HANDLE hToken; TOKEN_PRIVILEGES tkp; if (!OpenProcessToken(GetCur

C语言Windows程序开发—MessageBox函数介绍【第01天】

(一)MessageBox函数的参数介绍: 1 int MessageBox ( 2 HWND hWnd, //弹出MessageBox对话框所属的窗口句柄 3 LPCTSTR lpText, //指向MessageBox对话框内容的字符串指针 4 LPCTSTR lpCaption, //指向MessageBox对话框标题的字符串指针 5 UINT uType //MessageBox对话框的风格 6 ) ; 函数调用示例: 1 MessageBox ( NULL, TEXT ("程序运行出错

C语言Windows程序开发—TextOut函数介绍【第02天】

(一)TextOut函数的参数介绍: 1 BOOL TextOut ( //如果函数调用成功,返回TRUE,否则,返回FALSE 2 HDC hdc, //用于显示字符串的控件ID 3 int nXStart, //字符串所在起始位置左上角(X,Y)的X坐标 4 int nYStart, //字符串所在起始位置左上角(X,Y)的Y坐标 5 LPCTSTR lpString, //显示的字符串内容 6 int cbString //字符串长度 7 ) ; 函数调用示例: 1 TextOut ( h

C语言Windows程序开发—CreateWindow函数介绍【第03天】

(一)CreateWindow函数的参数介绍: 1 HWND CreateWindow( 2 LPCTSTR lpClassName, //Windows窗口中预定义的控件结构体,包括:BUTTON(按钮),EDIT(文本框),LISTBOX(列表),MDICLIENT(子窗口),SCROLLBAR(滚动条),RICHEDIT(富文本),STATIC(静态控件): 3 LPCTSTR lpWindowName, //窗口控件中显示的内容,即Caption属性: 4 DWORD dwStyle,

第一章 Windows程序内部运行机制(4)WinMain函数

WinMain函数相当于main函数,作为Windows程序的入口函数.当WinMain结束或返回时,Windows程序结束. 一个win32应用程序,该程序创建一个窗口并在窗口中响应键盘与鼠标消息,程序的实现步骤为: 1.WinMain函数的定义:2.创建一个窗口:3.进行消息循环:4.编写窗口过程 WinMain函数的定义: int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, in

Windows程序基础——Windows应用程序的基本概念

Windows是一种应用于微型计算机的操作系统,它为应用程序提供了一个多任务运行平台,它为应用程序提供了一致性的图形化窗口和菜单. Windows应用程序都具有图形界面并由事件来驱动其运行. 图形用户界面(GUI)--与键盘和鼠标相配合 区别:普通C语言程序:主函数(系统加载)及主函数调用的函数:Windows程序主函数(系统加载)及事件处理函数(系统调用): 一个Windows应用程序是由Windows系统和程序主函数及与其相关的事件消息处理函数组成的. Windows操作系统与Windows

Windows 8提升普通管理员权限为超级管理员权限以及激活超级管理员Administrator

在Windows 8下运行某些操作时(比如删除一些文件或者更改某些系统设置时)系统会提示我们权限不够.须要Administrator账户的权限. 相信很多其它的使用者都会觉得自己当前使用的账户已经是系统中最大权限的全部者了,为什么还会来个Administrator的用户权限呢?其实,在Windows系列的操作系统上.超级管理员(也就是最大权限全部者)默认情况下都是Administrator,并且在XP.Windows 7上,刚装好系统后就有了一个账户,此账户便是超级管理员Administrato

第一章 Windows程序内部运行机制(1)API和SDK

Windows操作系统提供了各种各样的函数,以方便我们开发Windows应用程序.这些函数是Windows操作系统提供给应用程序编程的接口(Application Programming Interface)简称为API函数. MSDN可以说是为微软开发人员提供的一套帮助系统,其中包含大量的开发文档.技术文章和示例代码,学会用MSDN来进行学习,对初学者来说很重要. 什么是SDK? SDK的全称是SoftwareDevelopment Kit,中文译为软件开发包.假如我们要开发呼叫中心,在购买语

Windows应用程序运行权限设置

在Vista以后的windows版本中,有些时候需要提升编译后生成程序的权限,即希望让生成的程序以管理员身份运行.虽然在一般情况下,可以使用鼠标右键选择的方式来强行以管理员身份运行,但它并没有屏蔽普通运行方式,而且普通人通常也不会使用右键选择以管理员身份运行,所以必须在生成程序时就限定程序只能以管理员方式来运行. 先简单说一下,在Vista以后的windows版本中,微软引入了UAC机制,它的目的是防止程序对操作系统本身进行恶意篡改.要让程序以管理员身份运行,就需要在程序中引入UAC标注,也即让