当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++进阶与实例

C++调整进程的特权的实现方法

    通过OpenProcess(PROCESS_ALL_ACCESS,FALSE,dId)获取ID较低进程的句柄时可能会得到错误代码,这些进程都是保持系统活动的系统服务。一个普通用户进程不允许执行针对系统服务的所有操作。如果一个程序意外终止了一个系统服务,那么整个系统都将崩溃。因此,一个进程只有拥有确切的访问权限才会有适当的特权。

    由于多种原因,调试器必须拥有大量的权限来完成他的工作。改变进程的特权可以通过以下三个简单的基本步骤:

    1.   首先,必须打开进程的访问令牌(access token),使用advapi32.dll中的函数OpenProcessToken()。

    2.   如果上一步正确完成,接下来就是准备TOKEN_PRIVILEGES结构,该结构包含有关要请求的特权的信息。这个工作需要advapi32.dll中的另一个函数LookupPrivilegeValue()的帮助。特权通过名称来指定。SDK文档winnt.h定义了27中特权名称和其对应的符号名称。例如,调试权限的符号名称为:SE_DEBUG_NAME,该名称和字符串“SeDebugPrivilege”等效。

    3.   如果上一步正确完成,就可以使用进程的令牌句柄(Token Handle)来调用AdjustTokenPrivileges()函数以初始化TOKEN_PRIVILEGES结构。该函数也是advapi32.dll导出的。

    4.   如果OpenProcessToken()调用成功,要记得关闭其返回的令牌句柄(Token Handle)。w2k_dbg.dll包含一个dbgPrivilegeSet()函数,该函数合并了这几个步骤,还有w2k_dbg.dll中的另一个函数:dbgPrivilegeDebug()。此函数是dbgPrivilegeSet()的一个外包函数,为了便于设定调试特权。

 

相关内容
赞助商链接