我正在尝试找出如何检测用户是否在Windows XP下以管理员权限运行。由于 whoami 命令,这在Vista / Win7中相当容易。以下是Ruby中的一个片段,介绍如何在Vista下执行此操作:
注意,以下链接现在包含了muteW
建议的解决方案麻烦的是,whoami不附带Windows XP,因此即使我们以管理员身份运行,上面链接的方法也会在WinXP上返回false。
那么,是否有人知道如何使用Ruby,命令行工具,批处理文件甚至第三方检测我们是否在Windows XP下作为管理员运行(需要真正开源)工具?
答案 0 :(得分:32)
这将检测用户是否在提升模式下运行(例如,命令提示符为“运行方式”管理员)。它依赖于您需要管理员权限才能读取LOCAL SERVICE帐户注册码的事实:
reg query "HKU\S-1-5-19"
如果无法读取,则返回非零错误代码,如果可以,则返回零 从XP起作用......
答案 1 :(得分:11)
如果你跑
>net localgroup administrators
在命令shell中,您应该获取Windows XP中的管理员帐户列表。只需解析并扫描输出以检查所需的特定用户帐户。对于例如检查当前用户是否是您可以执行的管理员 -
>net localgroup administrators | find "%USERNAME%"
答案 2 :(得分: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;
答案 3 :(得分:2)
查看CheckTokenMembership方法。有一个IsUserAdmin()实现的示例,以及一些其他有用的社区反馈,关于该函数何时不返回预期的内容以及如何改进它。
答案 4 :(得分:2)
这将在没有炮击的情况下找到:
require 'win32/registry'
is_admin = false
begin
Win32::Registry::HKEY_USERS.open('S-1-5-19') {|reg| }
is_admin = true
rescue
end
该策略与Peter的策略相似,但开销较小。
答案 5 :(得分:1)
以下是更好的(PowerShell)方法:https://stackoverflow.com/a/16617861/863980
在一行中,你可以说(复制/粘贴在豪华中它会起作用):
(@(([ADSI]"WinNT://./Administrators,group").psbase.Invoke("Members")) | `
foreach {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)}) -contains "Administrator"
=>当用户属于Administrators组(而不是检查用户IS管理员)时返回True
(注意:反引号或严重重音`在PowerShell中转义回车符,在Ruby中它执行shell命令,比如C ++的系统(&#39;命令&#39;)..)< / p>
所以在Ruby中,你可以说(复制/粘贴irb):
def is_current_user_local_admin?
return `powershell "(@(([ADSI]'WinNT://./Administrators,group').psbase.Invoke('Members')) | foreach {$_.GetType().InvokeMember('Name', 'GetProperty', $null, $_, $null)}) -contains 'Administrator'"`.include? "True"
end
虽然不知道(甚至更好)WMI的做法。有了这个,你可以做一些事情(再次在Ruby中):
require 'win32ole'
wmi = WIN32OLE.connect('WinNT://./Administrators,group')
# don't know what should come here...