分类: C/C++
2009-06-09 14:33:50
由于多种原因,调试器必须拥有大量的权限来完成他的工作。改变进程的特权可以通过以下三个简单的基本步骤:
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()的一个外包函数,为了便于设定调试特权。