如何正确检查进程是否以管理权限运行?
我检查了IsUserAnAdimMSDN 中的函数 https://msdn.microsoft.com/en-us/library/windows/desktop/bb776463.aspx,但不建议这样做,因为它可能会在 Windows 的后续版本中更改或不可用。相反,建议使用CheckTokenMembership
功能。
然后我从 MSDN 的描述中查看了替代示例CheckTokenMembership
功能。然而,MSDN 中的 Stefan Ozminski 评论提到,如果满足以下条件,此示例将无法在 Windows Vista 中正常运行:UAC http://en.wikipedia.org/wiki/User_Account_Control被禁用。
最后我尝试使用MSDN上的Stefan Ozminski的代码,但它确定该进程具有管理权限,即使我在Windows 7中没有管理权限的普通用户下启动它。
这将告诉您是否正在以提升的权限运行。如果您希望它提示,您可以将清单设置为以最可能的方式运行。还有其他方法可以通过代码向 Windows 询问备用凭据。
BOOL IsElevated( ) {
BOOL fRet = FALSE;
HANDLE hToken = NULL;
if( OpenProcessToken( GetCurrentProcess( ),TOKEN_QUERY,&hToken ) ) {
TOKEN_ELEVATION Elevation;
DWORD cbSize = sizeof( TOKEN_ELEVATION );
if( GetTokenInformation( hToken, TokenElevation, &Elevation, sizeof( Elevation ), &cbSize ) ) {
fRet = Elevation.TokenIsElevated;
}
}
if( hToken ) {
CloseHandle( hToken );
}
return fRet;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)