写这个初衷是为了让 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; } ///////////////////////////////////////////////////////////////// // 函数类型 :自定义工具函数 // 函数模块 :