Я использую 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-битная проблема? разве это не похоже на целое число без знака, хранящееся как целое число со знаком?
-2147023582 - это ошибка 0x80070522 или «Клиент не имеет необходимых привилегий».
Я подозреваю, что ваш сценарий запускается с ограниченным токеном пользователя, а не с токеном администратора. Вы можете попробовать сценарий с токеном «Администратор» (например, «Запуск от имени администратора», из сеанса администратора CMD и т. Д.) И посмотреть, как он работает. Я думаю, вы обнаружите, что добились большего успеха.
у меня есть идея ... по какой-то причине пункт о привилегиях 'impersonationlevel = impersonate, (Security)' не работать с Windows 7.
Попробуйте использовать сценарий с сервером 2003 или XP и посмотрите, что произойдет !!
У меня была аналогичная проблема с резервным копированием журналов безопасности Windows сервера, и я обнаружил, что, по крайней мере на бумаге, все настроено так, как требуется. Но при использовании с Win7 он не работает и не объясняет, почему.
Насколько мне известно, обойти это невозможно.
Единственное, что мощь работа заключается в том, чтобы вызвать сценарий, открыв командную строку / командный файл CMD, используя учетную запись пользователя уровня администратора для вызова сценария vbs.
Я часами искал в Интернете об этом и не нашел ничего, что могло бы предложить, как это обойти. Положите это на M $ haft над "пользовательской" Windows.
Надеюсь это поможет!