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

Cha*_*per 13 ruby windows privileges command-line

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

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

http://gist.github.com/65931

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

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

Pet*_*voy 32

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

reg query "HKU\S-1-5-19"
Run Code Online (Sandbox Code Playgroud)

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

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

aks*_*aks 11

如果你跑

>net localgroup administrators 
Run Code Online (Sandbox Code Playgroud)

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

>net localgroup administrators | find "%USERNAME%"
Run Code Online (Sandbox Code Playgroud)

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

acr*_*omm 7

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;
Run Code Online (Sandbox Code Playgroud)