windowsAPI之OpenProcessToken,AdjustTokenPrivileges 和LookupPrivilegeValue

这三个函数主要用来提升进程的权限

1 OpenProcessToken()函数:获取进程的令牌句柄

OpenProcessToken的原型.

BOOL WINAPI OpenProcessToken(

__in HANDLE ProcessHandle,

__in DWORD DesiredAccess,

__out PHANDLE TokenHandle

);

第一个参数 进程句柄(当前进程为GetCurrentProcess()为参数)

第二个参数 访问令牌特权(可以参考msdnhttps://msdn.microsoft.com/zh-cn/library/aa374905)

第三个参数 令牌句柄 返回的参数 就是AdjustTokenPrivileges的第一个参数

2LookupPrivilegeValue()函数:

在认识这个函数之前我们需要了解一下结构体

TOKEN_PRIVILEGES结构体

typedef struct _TOKEN_PRIVILEGES

{

DWORD PrivilegeCount;

LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];

}TOKEN_PRIVILEGES;

第一个参数是个特权数组。

第二个参数是要修改的特权数目

LUID_AND_ATTRIBUTES 结构体

typedef struct _LUID_AND_ATTRIBUTES

{

LUID Luid;

DWORD Attributes;

} LUID_AND_ATTRIBUTES;

LookupPrivilegeValue的原型

BOOL WINAPI LookupPrivilegeValue(

__in_opt LPCTSTR lpSystemName,

__in LPCTSTR lpName,

__out PLUID lpLuid

);

第一个参数是系统的名字,如果为NULL,就是本地名字(这里就填NULL)

第二个参数是特权的名字,要查看详细特权,在这里写SE_DEBUG_NAME

第三个参数就可以通过指针返回一个LUID类型的Luid的标识了。 通过这个值就可以填入刚才的结构体里了。

3 AdjustTokenPrivileges()函数

BOOL WINAPI AdjustTokenPrivileges(

__in HANDLE TokenHandle,

__in BOOL DisableAllPrivileges,

__in_opt PTOKEN_PRIVILEGES NewState,

__in DWORD BufferLength,

__out_opt PTOKEN_PRIVILEGES PreviousState,

__out_opt PDWORD ReturnLength

);

第一个参数为OpenProcessToken第三个指针参数传出的句柄值

第二个参数为是否禁用所有所有的特权(这里填false)

第三个参数为新的TOKEN_PRIVILEGES的特权结构体指针

第四个参数是上面结构体的字节长度(sizeof)

第五个参数是 接受原先的特权的结构体

第六个参数也是这个结构体的字节长度的指针

最后要记得调用CloseHandle()函数

我们可以将上述函数组合为一个方法

void EenableDebugPriv()
{
    HANDLE hToken;
    TOKEN_PRIVILEGES tkp;
    OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken);
    LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);
    tkp.PrivilegeCount = 1;
    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0);
    CloseHandle( hToken );
}

这样就可以修改相关进程的权限了

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-07 06:53:05

windowsAPI之OpenProcessToken,AdjustTokenPrivileges 和LookupPrivilegeValue的相关文章

OpenProcessToken,LookupPrivilegeValue,AdjustTokenPrivileges提升进程权限

对于一些运行的程序,我们希望它们能尽可能的像操作系统能做的事情一样多,但是操作系统对于每个进程都有权限划分,那么此时我们就需要对期望中的进程进行提升权限,查看MSDN和一些其他资料之后,写了个可用于提升进程权限的函数,可被用在程序中直接调用.代码如下: //传入Privileges参数,用于取得想要获取的权限 //查看MSDN的LookupPrivilegeValue函数宏定义权限表可自行修改; BOOL GetPrivilege(TCHAR* Privileges)    {        H

程序的开机关机重启,开机启动,休眠功能delphi实现(使用AdjustTokenPrivileges提升权限)

TShutDownStatus = (sdShutDown,sdReboot,sdLogOff,sdPowerOff); procedure ShutDown(sdStatus : TShutDownStatus); var     NewState:       TTokenPrivileges;     lpLuid:         Int64;     ReturnLength:   DWord;     ToKenHandle:    Cardinal;  begin     Open

提升进程权限-OpenProcessToken等函数的用法(转载)

GetCurrentProcessID 得到当前进程的ID OpenProcessToken 得到进程的令牌句柄LookupPrivilegeValue 查询进程的权限 AdjustTokenPrivileges 判断令牌权限 要对一个任意进程(包括系统安全进程和服务进程)进行指定了写相关的访问权的OpenProcess操作,只要当前进程具有SeDeDebug权限就可以了.要是一个用户是Administrator或是被给予了相应的权限,就可以具有该权限.可是,就算我们用Administrator

OpenProcessToken令牌函数用法

>GetCurrentProcessID 得到当前进程的ID OpenProcessToken得到进程的令牌句柄LookupPrivilegeValue 查询进程的权限AdjustTokenPrivileges 调整令牌权限 要对一个任意进程(包括系统安全进程和服务进程)进行指定了写相关的访问权的OpenProcess操作,只要当前进程具有SeDeDebug权限就可以了.要是一个用户是Administrator或是被给予了相应的权限,就可以具有该权限.可是,就算我们用Administrator帐

AdjustTokenPrivileges启用权限

原文链接地址:http://blog.csdn.net/xbgprogrammer/article/details/7276760    我们有很多操作需要用到OpenProcess函数,而为了使程序有权限使用这个函数,我们经常利用AdjustTokenPrivileges提升权限(准确的说不是提升,而是将访问令牌中禁用的权限启用) BOOL SetPrivilege( HANDLE hToken, // access token handle LPCTSTR lpszPrivilege, //

C#调用windowsAPI函数

一 调用格式 C#在调用windowsAPI函数接口的时候有一套专门的调用流程 首先我们在调用API函数的时候必须引用命名空间InteropServices using System.Runtime.InteropServices; 例如我们想调用windows的kernel32.dll动态库中的接口函数中的AllocConsole()控制台函数接口 下面我们用最简单的调用形式来声明调用此函数接口(空方法,即方法体为空) [DllImport("kernel32.dll")] publ

Windows API 之 OpenProcessToken、GetTokenInformation

The following example uses the OpenProcessToken and GetTokenInformation functions to get the group memberships in an access token. The GetTokenInformation function retrieves a specified type of information about an access token. The calling process m

WindowsAPI开发常用资料

主类 子类 功能 Win32API SHGetSpecialFolderLocation 获取系统特殊文件夹路径(SHGetSpecialFolderLocation)通过 SHGetSpecialFolderLocation.SHGetPathFromIDList 函数获取常用路径 OutputDebugString 使用OutputDebugString将调试信息输出 MakeSureDirectoryPathExists MakeSureDirectoryPathExistsC/C++中判

[原创]C#应用WindowsApi实现查找(FindWindowEx)文本框(TextBox、TextEdit)。

/// <summary> /// 获取文本框控件 /// </summary> /// <param name="hwnd">文本框所在父窗口</param> /// <param name="text">文本框文本,null为搜索所有</param> /// <param name="iLevel">父窗口上第几个文本框</param> /// &