转自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;
}