Получение дескриптора безопасности Win32_Service с использованием VBScript - PullRequest
0 голосов
/ 10 января 2011

Я использую 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, а не коды ошибок, определенные инструкция .

У кого-нибудь есть идеи? Я использую 64-разрядную версию Windows 7 Professional.

Номер -2147023582. Может ли это быть какая-то 64-битная проблема? Разве это не похоже на целое число без знака, хранящееся как целое число со знаком?

(PS: не обращайте внимания на имена переменных ... Я сорвал пример с msdn).

1 Ответ

3 голосов
/ 11 января 2011

Код ошибки -2147023582 (0x80070522) означает «Требуемая привилегия не удерживается клиентом». Скорее всего, привилегии Security в прозвище WMI недостаточно, и вам нужно запустить свой скрипт от имени администратора. (По крайней мере, ваш сценарий отлично работает для меня в 64-битной Vista при запуске от имени администратора.)

...