当前位置:  开发笔记 > 编程语言 > 正文

检测是否在Windows XP下以管理员权限运行

如何解决《检测是否在WindowsXP下以管理员权限运行》经验,为你挑选了3个好方法。

我试图找出如何检测用户是否在Windows XP下运行管理员权限.由于whoami命令,这在Vista/Win7中相当容易.这是Ruby中的一个片段,介绍如何在Vista下执行此操作:

注意,以下链接现在包含muteW建议的解决方案

http://gist.github.com/65931

麻烦的是,whoami不附带Windows XP,因此即使我们以管理员身份运行,上面链接的方法也会在WinXP上返回false.

那么,是否有人知道如何使用Ruby,命令行工具,批处理文件甚至第三方(需要开源,真正的)工具来检测我们是否在Windows XP下作为管理员运行?



1> Peter McEvoy..:

这将检测用户是否在提升模式下运行(例如,命令提示符为"运行方式"管理员).它依赖于您需要管理员权限才能读取LOCAL SERVICE帐户注册表项的事实:

reg query "HKU\S-1-5-19"

如果无法读取,则返回非零错误代码,如果可以,则返回零.
从XP起作用......


或者,在C/C++中:调用RegOpenKey(HKEY_USERS,"S-1-5-19",&key)并检查是否成功.

2> aks..:

如果你跑

>net localgroup administrators 

在命令shell中,您应该获取Windows XP中的管理员帐户列表.只需解析并扫描输出以检查所需的特定用户帐户.例如,要检查当前用户是否是管理员,您可以这样做 -

>net localgroup administrators | find "%USERNAME%"


这仅验证用户名是否在Admin组中 - 它不会检测当前会话是否具有管理员权限.例如,在带有UAC的Win 7上,命令提示符默认运行为非管理员,上述命令将错误地将会话报告为管理员.请参阅我的解决方案以获得更可靠的信息

3> acromm..:

Piskvor选项很好,或查看此网址 http://weseetips.com/2008/04/16/how-to-check-whether-current-user-have-administrator-privilege/

这是该页面中的代码

SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
PSID AdministratorsGroup;
// Initialize SID.
if( !AllocateAndInitializeSid( &NtAuthority,
                               2,
                               SECURITY_BUILTIN_DOMAIN_RID,
                               DOMAIN_ALIAS_RID_ADMINS,
                               0, 0, 0, 0, 0, 0,
                               &AdministratorsGroup))
{
    // Initializing SID Failed.
    return false;
}
// Check whether the token is present in admin group.
BOOL IsInAdminGroup = FALSE;
if( !CheckTokenMembership( NULL,
                           AdministratorsGroup,
                           &IsInAdminGroup ))
{
    // Error occurred.
    IsInAdminGroup = FALSE;
}
// Free SID and return.
FreeSid(AdministratorsGroup);
return IsInAdminGroup;

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有