网络安全 频道

创建高权限进程的方法

写这个初衷是为了让 Windows 任务管理器可以结束掉一些服务和僵死进程,用 pslist/pskill 之类工具无法获得象任务管理器那样丰富的信息,还得来回切换,麻烦的很。最初想写个驱动监视任务管理器运行,使用 SYSTEM 进程 TOKEN 替换来达到目的。

后来觉得通用性不好,就改用了这种方法。此方法还可使Regedit查看、编辑 SAM 等注册表键,何乐而不为。






// wssrun taskmgr.exe 

// wssrun regedit.exe 

// 





#include 

#include 

#include 

#include 

#include 

#include 

#include 



#pragma comment(lib,"Shlwapi.lib") 





///////////////////////////////////////////////////////////////// 

// 函数类型 :自定义工具函数 

// 函数模块 : 

//////////////////////////////////////////////////////////////// 

// 功能 :提升当前进程权限 

// 注意 : 

///////////////////////////////////////////////////////////////// 

// 作者 : sinister 

// 发布版本 : 1.00.00 

// 发布日期 : 2006.2.09 

///////////////////////////////////////////////////////////////// 

// 重   大   修   改   历   史 

//////////////////////////////////////////////////////////////// 

// 修改者 : 

// 修改日期 : 

// 修改内容 : 

///////////////////////////////////////////////////////////////// 



BOOL 

EnableDebugPriv( LPCTSTR szPrivilege ) 

{ 

HANDLE hToken; 

LUID sedebugnameValue; 

TOKEN_PRIVILEGES tkp; 



if ( !OpenProcessToken( GetCurrentProcess(), 

                TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, 

                &hToken ) ) 

{ 

  return FALSE; 

} 

if ( !LookupPrivilegeValue( NULL, szPrivilege, &sedebugnameValue ) ) 

{ 

  CloseHandle( hToken ); 

  return FALSE; 

} 



tkp.PrivilegeCount = 1; 

tkp.Privileges[0].Luid = sedebugnameValue; 

tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 



if ( !AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) ) 

{ 

  CloseHandle( hToken ); 

  return FALSE; 

} 



return TRUE; 

} 



///////////////////////////////////////////////////////////////// 

// 函数类型 :自定义工具函数 

// 函数模块 : 

0
相关文章