UAC状态未读取注册表

时间:2009-12-22 15:57:27

标签: c windows uac

有一种简单的方法可以读取注册表并从那里获取UAC状态。唯一的问题是,如果您不是管理员用户或UAC是ON,那么您无法读取该特定密钥。

是否有办法(API等)让UAC状态准确而无需阅读注册表?

示例代码总是受到赞赏。 谢谢!

尔杰斯

编辑: 我开始赏金了。请你回答一下,不要告诉我如何不关心UAC状态,代码应该独立于UAC以及microsoft如何好吃。

5 个答案:

答案 0 :(得分:3)

来自互联网:

HANDLE tokenHandle; 
OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &tokenHandle); 

DWORD tokenInformationBufferLength = 0; 
TOKEN_ELEVATION_TYPE tokenElevation;
GetTokenInformation(tokenHandle, TokenElevationType, &tokenElevation, sizeof(tokenElevation), &tokenInformationBufferLength); 

答案 1 :(得分:3)

好的,建立一个ssg / comments已经说过的答案:

http://www.softblog.com/2008-02/vista-tools/

这会检查提升和UAC状态。 首先是

How can I detect if my process is running UAC-elevated or not?

已经提到过,它将测试ElevationStatus。在那之后,它 尝试启动具有提升状态的子进程,该进程将失败 如果标准用户已登录,则确定UAC状态。

不,它不使用注册表。

答案 2 :(得分:1)

我认为不是你想看的地方......但是如果注册表读取返回键上的访问失败,那实际上就是你正在寻找的答案 - 启用了UAC。

答案 3 :(得分:1)

我做了什么来解决这个问题,如果我根据API调用获得管理员权限我读取了注册表值(UAC提供了错误的管理员权限检查),如果我没有管理员权限,我试图创建一个新的HKEY_LOCAL_MACHINE \ Software中的密钥。如果成功,UAC就开启了,我删除了密钥。

答案 4 :(得分:0)

首先,您并不是真的想找到一种“绕过”操作系统安全功能的方法。即使您确实找到了可以立即使用的解决方案,Microsoft也可以(并且确实)使用Windows Update更改这些功能,并且将来会破坏您的应用程序。打击安全功能是一场艰苦的战斗,对你来说将是一个持续的头痛。虽然我很想在StackOverflow上听到更多关于你的问题:)但很可能不是你想要去的路径。

那就是说,我认为你的问题是错误的。如果您的经理不希望您解决问题,那么您的经理已接受了该问题。只需将整个应用程序标记为“必须以管理员模式运行”并完成它。用户将在应用程序启动时收到单个警告,然后应用程序将为他们运行。 Here's a link to show you how to set this option

当然,如果您的用户对自己的计算机没有管理员权限,那么您基本上没有运气。

相关问题