提升程序的特权(AdjustTokenPrivileges)

提升程序的特权

 

 

首先列出需要的函数

1.OpenProcessToken

2.AdjustTokenPrivileges

3. LookupPrivilegeValue

 

 

--------------------------------------------------------------

首先需要获取进程的令牌句柄

OpenProcessToken的原型.

BOOL WINAPI OpenProcessToken(
  __in          HANDLE ProcessHandle,
  __in          DWORD DesiredAccess,
  __out         PHANDLE TokenHandle
);

 

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

第二个参数 访问令牌特权

第三个参数 返回的参数 就是AdjustTokenPrivileges的第一个参数

 

例子:

HANDLE hToken;

bool retn = OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken);

if(!retn)

{

      return; //获取令牌失败。。

}

 

注:第二个参数 是令牌的权限,这个权限是要有修改权限的特权,意思就是要把你程序的权限修改得更高。

关于其他权限可以查MSDN..            所有权限可以写TOKEN_ALL_ACCESS ,去查看一个令牌特权可以用TOKEN_QUERY

这个下面函数有写。

--------------------------------------------------------------

首先先说一下使用AdjustTokenPrivileges需要的。

在这个函数中的第3和第5个参数中需要用到一个TOKEN_PRIVILEGES的结构体,在这个结构体中还有个LUID_AND_ATTRIBUTES结构体

详细说明 查看我博客的翻译分类里

 

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;

 

第一个参数是Luid是一个标志,不同的Luid代表着各种不同的特权类型

第二个参数是要这个特权干嘛,如启用这个特权(SE_PRIVILEGE_ENABLED)

 

这里的Luid的值需要用LookupPrivilegeValue来获取。

------------------------------------------------------------------------------------------

 LookupPrivilegeValue的原型

BOOL WINAPI LookupPrivilegeValue(
  __in_opt      LPCTSTR lpSystemName,
  __in          LPCTSTR lpName,
  __out         PLUID lpLuid
);

 

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

第二个参数是特权的名字,要查看详细特权,看我的博客里翻译分类里的 包含特权 的文章。(在这里写SE_DEBUG_NAME)

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

----------------------------------------------------------------------------------------------------------------------------

 

最后就可以介绍AdjustTokenPrivilege就应该没什么问题了。

它的原型为:

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)

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

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

 

在这里后两个参数不用管。

详细看我的博客翻客相关说明

MSDN里说

如果第五个参数不是NULL,在OpenProcessToken加特权时除了需要指定TOKEN_ADJUST_PRIVILEGES还必须指定TOKEN_QUERY

如果第五个参数是NULL,你不接受原先的结构体(第六个当然也是NULL), 就不用再指定附加的TOKEN_QUERY的特权了。

 

 

还要注意:

 就算这个函数返回为真,还要调用GetLastError()来检验是否完全成功。

如果返回ERROR_SUCCESS就代表修改非常成功 。。。其他的返回值 查我博客。

这个非常重要!!

还有就是Vista和Window7 里 一定要开管理员模式 才能获取成功

----------------------------------------------------

完整的例子

可以直接复制到VC 6.0里

 

 

 

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: adjusttokenprivileges是一个Windows API函数,用于修改进程或线程的访问令牌的权限。它可以用于提升或降低进程或线程的权限级别,以便执行某些操作。该函数需要管理员权限才能使用。 ### 回答2: adjusttokenprivileges是一个Windows API函数,它用于调整访问令牌的特权级别。访问令牌是在用户登录到操作系统时生成的,用于识别和授权用户权限的一种机制。 通过使用adjusttokenprivileges函数,我们可以改变访问令牌的权限级别。这在开发和管理程序和系统时非常有用,因为它允许我们对系统中的用户和资源进行更精细的控制。 该函数接受三个参数:访问令牌的句柄、是否开启或关闭特权以及传递的特权信息。通过指定访问令牌的句柄,我们可以确定要更改哪个用户或进程的权限级别。通过将特权参数设置为开启或关闭,我们可以选择是否启用或禁用特权。最后,通过特权信息参数,我们可以指定要更改的特权的详细信息。 在实际应用中,我们可以使用这个函数来管理用户的权限,例如提升普通用户的权限以执行需要管理员权限的操作。我们还可以使用它来禁用特定的特权,以确保安全性和系统稳定性。 总之,adjusttokenprivileges函数是一个强大的API函数,可以用来精确地控制和管理访问令牌的权限级别。通过使用这个函数,我们可以更好地管理系统资源,提高系统的安全性和可靠性。 ### 回答3: adjusttokenprivileges是一个Windows API函数,用于修改访问令牌的权限。访问令牌是操作系统为每个进程分配的一种数据结构,用于标识和控制进程的访问权限。调用adjusttokenprivileges函数可以修改进程的访问令牌,从而改变进程的权限。 adjusttokenprivileges函数需要两个参数:访问令牌句柄和权限调整结构体。访问令牌句柄可以使用函数opentoken来获取,而权限调整结构体包含所需修改的权限信息。 adjusttokenprivileges函数的作用是将指定的权限应用于访问令牌。权限可以是普通权限,如读取、写入等,也可以是特权权限,如在系统级别操作等。 调用adjusttokenprivileges函数后,需要使用函数getlasterror来检查是否调用成功。成功返回true,否则返回false。如果成功,还需要调用函数关闭打开的令牌句柄。 adjusttokenprivileges函数的使用场景举例:当进程需要执行操作,但当前没有足够的权限时,可以通过该函数临时提升权限,以满足操作的执行要求。但需要注意的是,修改权限可能导致安全风险,需要确保调用的正确性和安全性。 总之,adjusttokenprivileges函数是一个用于修改访问令牌权限的重要函数,可以使进程具备更高的权限,以满足更多的操作要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值