Метод GetSecurityDescriptor класса Win32_Printer
Метод GetSecurityDescriptor возвращает дескриптор безопасности, управляющий доступом к принтеру. Дескриптор возвращается как экземпляр Win32_SecurityDescriptor. Дополнительные сведения см. в разделе Изменение безопасности доступа в защищаемых объектах.
В этом разделе используется синтаксис формата управляемого объекта (MOF). Дополнительные сведения об использовании этого метода см. в разделе Вызов метода.
Синтаксис
uint32 GetSecurityDescriptor(
[out] Win32_SecurityDescriptor Descriptor
);
Параметры
-
Дескриптор [out]
-
Дескриптор безопасности, связанный с принтером.
Возвращаемое значение
Возвращает одно из значений, перечисленных в следующем списке, или другое значение, указывающее на ошибку. Дополнительные коды ошибок см. в разделе WMI Error Constants или WbemErrorEnum. Общие значения HRESULT см. в разделе Системные коды ошибок.
-
0
-
Успешное завершение.
-
2
-
У пользователя нет доступа к запрошенной информации.
-
8
-
Неизвестный сбой.
-
9
-
Пользователь не имеет достаточных привилегий для выполнения метода .
-
21
-
Параметр, указанный в вызове метода, недопустим.
Комментарии
Экземпляр Win32_SecurityDescriptor представляет SECURITY_DESCRIPTOR_CONTROL тип данных и содержит список управления доступом на уровне пользователей (DACL) и список управления доступом системы (SACL). Дополнительные сведения см. в разделе Списки контроль доступа.
Если параметр SeSecurityPrivilege не предоставляется или не включен при получении дескриптора безопасности, то в возвращаемом дескрипторе безопасности возвращается только DACL. Дополнительные сведения см. в разделах Константы привилегий и Выполнение привилегированных операций.
Примеры
В следующем примере кода VBScript перечислены принтеры, подключенные к локальному компьютеру, и возвращается дескриптор безопасности для каждого принтера. Затем записи управления доступом (ACE) в списке управления доступом ( DACL) извлекаются, чтобы определить, какие пользователи имеют доступ к принтеру.
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 objWMIService = GetObject("winmgmts:")
Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer")
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
arrACEs = objSD.DACL
For Each objACE in arrACEs
' 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
Требования
Требование | Значение |
---|---|
Минимальная версия клиента |
Windows Vista |
Минимальная версия сервера |
Windows Server 2008 |
Пространство имен |
Root\CIMV2 |
MOF |
|
DLL |
|