Win32_Printer 类的 GetSecurityDescriptor 方法

GetSecurityDescriptor 方法返回控制对打印机的访问的安全描述符。 描述符作为 Win32_SecurityDescriptor 实例返回。 有关详细信息,请参阅 更改安全对象的访问安全性

本主题使用托管对象格式 (MOF) 语法。 有关使用此方法的详细信息,请参阅 调用方法

语法

uint32 GetSecurityDescriptor(
  [out] Win32_SecurityDescriptor Descriptor
);

参数

描述符 [out]

与打印机关联的安全描述符。

返回值

返回以下列表中列出的值之一,或返回其他值以指示错误。 有关其他错误代码,请参阅 WMI 错误常量WbemErrorEnum。 有关常规 HRESULT 值,请参阅 系统错误代码

0

成功完成。

2

用户无权访问请求的信息。

8

未知失败。

9

用户没有足够的权限来执行方法。

21

方法调用中指定的参数无效。

备注

Win32_SecurityDescriptor 实例表示SECURITY_DESCRIPTOR_CONTROL数据类型,包含 DACL) (自由访问控制列表,以及 SACL) (系统访问控制列表。 有关详细信息,请参阅访问控制列表

如果在获取安全描述符时未授予或启用 SeSecurityPrivilege ,则在返回的安全描述符中仅返回 DACL。 有关详细信息,请参阅特权常量和执行特权操作

示例

以下 VBScript 代码示例列出了连接到本地计算机的打印机,并获取每个打印机的安全描述符。 然后,提取 ( (DACL) 的任意访问控制列表中的 ACE) 访问控制条目,以确定哪些用户有权访问打印机。

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
Win32_Printer.mof
DLL
CIMWin32.dll

另请参阅

Win32_Printer

特权常量

WMI 安全描述符对象

更改安全对象上的访问安全性