使用 VBScript 获取 Win32_Service 安全描述符

使用 VBScript 获取 Win32_Service 安全描述符

我正在使用 VbScript 检索 Win32_Service 的安全描述符。我正在使用以下代码:

SE_DACL_PRESENT = &h4
 ACCESS_ALLOWED_ACE_TYPE = &h0
 ACCESS_DENIED_ACE_TYPE  = &h1

 strComputer = "."
 Set objWMIService = GetObject("winmgmts:" _
  & "{impersonationLevel=impersonate, (Security)}!\\" & strComputer & "\root\cimv2")

 Set colInstalledPrinters =  objWMIService.ExecQuery _
  ("Select * from Win32_Service")

 For Each objPrinter in colInstalledPrinters
    Wscript.Echo "Name: " & objPrinter.Name 
 ' Get security descriptor for printer
  Return = objPrinter.GetSecurityDescriptor( objSD )
  If ( return <> 0 ) Then
  WScript.Echo "Could not get security descriptor: " & Return
  wscript.Quit Return
  End If
 ' Extract the security descriptor flags
  intControlFlags = objSD.ControlFlags
  If intControlFlags AND SE_DACL_PRESENT Then
 ' Get the ACE entries from security descriptor
   colACEs = objSD.DACL
  For Each objACE in colACEs
 ' Get all the trustees and determine which have access to printer
   WScript.Echo objACE.Trustee.Domain & "\" & objACE.Trustee.Name
   If objACE.AceType = ACCESS_ALLOWED_ACE_TYPE Then
    WScript.Echo vbTab & "User has access to printer"
   ElseIf objACE.AceType = ACCESS_DENIED_ACE_TYPE Then
    WScript.Echo vbTab & "User does not have access to the printer"
   End If
  Next
  Else
  WScript.Echo "No DACL found in security descriptor"
 End If
 Next

但是,每次运行它时,我都会收到一条消息,说结果代码是 -2147023582 之类的,而不是定义的错误代码 手册

有人有什么想法吗?我正在使用 Windows 7 专业版 64 位。

更新:数字是 -2147023582。这可能是某种 64 位问题吗?这看起来不像是将无符号整数存储为有符号整数吗?

答案1

-2147023582 是错误 0x80070522,或“客户端不具备所需的权限”。

我怀疑您的脚本是使用受限用户令牌而不是管理员令牌运行的。您可以尝试使用“管理员”令牌(即“以管理员身份运行”,从管理员 CMD 会话等)运行脚本,看看效果如何。我想您会发现成功率更高。

答案2

我有一个想法...出于某种原因,'impersonationlevel=impersonate,(安全)'特权条款确实不是与 Windows 7 兼容。

尝试在服务器 2003 或 XP 中使用该脚本,看看会发生什么!!

我在备份服务器 Windows 安全日志时遇到过类似的问题,发现至少在纸面上,一切都按要求配置。但在 Win7 上使用时,它不起作用,并且没有提示原因。

据我所知,没有办法解决这个问题。

唯一的事情是可能工作是通过使用管理员级别的用户帐户打开 CMD 提示符/批处理文件来调用 vbs 脚本。

我在网上搜索了好几个小时,却没能找到任何建议如何解决这个问题的方法。这要归咎于 M$haft 对 Windows 的“用户化”。

希望这可以帮助!

相关内容