Obtendo o descritor de segurança Win32_Service usando o VBScript

1

Estou usando o VbScript para recuperar o securitydescriptor de um Win32_Service. Eu estou usando o seguinte código:

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

No entanto, toda vez que eu executo, recebo a mensagem dizendo que o código resultante é -2147023582, em vez dos códigos de erro definidos em o manual .

Alguém tem alguma ideia? Estou usando o Windows 7 profissional de 64 bits.

Atualização: o número é -2147023582. Poderia ser algum tipo de problema de 64 bits? não parece um inteiro não assinado armazenado como um inteiro assinado?

    
por invictus 09.01.2011 / 13:30

2 respostas

1

-2147023582 é o erro 0x80070522 ou "Um privilégio obrigatório não é retido pelo cliente".

Suspeito que o seu script está sendo executado com um token de usuário limitado, e não com um token Adminsitrator. Você pode tentar o script de um token "Administrador" (por exemplo, "Executar como administrador", de uma sessão CMD do administrador, etc) e ver como está. Eu acho que você vai achar que você tem mais sucesso.

    
por 14.04.2011 / 19:04
0

eu tenho uma idéia ... por algum motivo, a cláusula de privilégio 'impersonationlevel = impersonate, (Security)' faz não funcionar com o Windows 7.

Tente usar o script com o servidor 2003 ou XP e veja o que acontece !!

Eu tive um problema semelhante ao fazer backup dos logs de segurança do Windows do servidor e descobri que, no papel, pelo menos, tudo é configurado conforme necessário. Mas quando usado com o Win7, não funciona e não sugere uma razão para isso.

No meu conhecimento, não há como contornar isso.

A única coisa que pode funcionar é chamar o script abrindo um arquivo de prompt / lote do CMD usando uma conta de usuário no nível de administrador para chamar o script vbs.

Procurei horas on-line sobre isso e não consegui encontrar nada para sugerir como contornar isso. Coloque-o em M $ sobre o Windows "user-ifying".

Espero que isso ajude!

    
por 14.04.2011 / 18:56

Tags