OpenProcess调用失败,GetLastError返回5

来源:互联网 发布:战舰世界兴登堡数据 编辑:程序博客网 时间:2024/05/26 02:55

转自https://social.msdn.microsoft.com/Forums/zh-CN/20e3fc99-1d21-43b5-9bc2-03a52a721dc5/openprocess

现象:服务方式程序时,程序的创建者为SYSTEM用户;非SYSTEM用户调用OpenProcess访问该服务程序时,调用失败,GetLastError返回5,可以通过调用如下

EnableDebugPriv() ,用以下函数提权,操作即可成功。

void EnableDebugPriv() { HANDLE hToken;LUID sedebugnameValue; TOKEN_PRIVILEGES tkp; if ( ! OpenProcessToken( GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) ) {cout<<"提权失败。"<<endl;return; }if ( ! LookupPrivilegeValue( NULL, SE_DEBUG_NAME, &sedebugnameValue ) ) { CloseHandle( hToken ); cout<<"提权失败。"<<endl;return; } tkp.PrivilegeCount = 1; tkp.Privileges[0].Luid = sedebugnameValue; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if ( ! AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) ) {cout<<"提权失败。"<<endl;CloseHandle( hToken );}else cout<<"提权成功!"<<endl;}

0 0