我试图找出如何检测用户是否与在Windows XP管理员权限运行。这是很容易在Vista / Win7的感谢做的 WHOAMI 命令。下面是如何做到这一点Vista下在Ruby中的一个片段:

注意,下面的链接现包含由muteW建议的溶液

http://gist.github.com/65931

麻烦的是,WHOAMI不来与Windows XP和因此上述连接方法将总是返回false在WinXP,即使我们以管理员身份运行。

因此,没有人知道的方式来检测是否我们正在为在Windows XP管理员使用Ruby,命令行工具,批量文件,甚至是第三方运行(必须是开源的,真的)工具?

有帮助吗?

解决方案

如果用户在升高的模式下运行这将检测(例如,这是“运行方式”管理员的命令提示)。它依赖于您需要管理员权限读取本地服务帐户REG关键的事实:

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

这将返回一个非零的错误代码,如果它不能被读取,并且零如果可以。结果 从XP向上工程...

其他提示

如果您运行

>net localgroup administrators 

在命令shell中,你应该得到管理员的帐户列表在Windows XP中。简单地分析并扫描输出来检查您需要的用户帐户。对于如检查当前用户是你可以做一个系统管理员 -

>net localgroup administrators | find "%USERNAME%"

Piskvor选项其细,或检查该URL 的http:// weseetips。 COM / 2008/04/16 /如何做检查,无论-当前用户为拥有管理员特权/

这是在该网页的代码

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;

查看 CheckTokenMembership 方法。有IsUserAdmin()实现加上当该功能不返回的期望是什么,做些什么来改善它的一些其他有用的社区反馈的样本存在。

这会发现没有炮击了:

require 'win32/registry'

is_admin = false
begin
  Win32::Registry::HKEY_USERS.open('S-1-5-19') {|reg| }
  is_admin = true
rescue
end

在策略类似于彼得的,但具有更少的开销。

scroll top