__SystemSecurity 类的 GetSD 方法
GetSD 方法获取用户连接到的命名空间的安全描述符。 此方法返回二进制字节数组格式的安全描述符。 如果要编写脚本,请使用 GetSecurityDescriptor 方法。 有关详细信息,请参阅保护 WMI 命名空间和更改安全对象的访问安全性。
用户必须拥有 READ_CONTROL 权限。 默认情况下,管理员具有该权限。 安全描述符中实际被使用的只有自由访问控制列表 (DACL)。 DACL 可以同时包含继承和非继承的 ACE。 允许拒绝和允许 ACE。
如果使用 C++ 进行编程,可使用 SDDL 以及转换方法 ConvertSecurityDescriptorToStringSecurityDescriptor 和 ConvertStringSecurityDescriptorToSecurityDescriptor 来操作二进制安全描述符。
语法
HRESULT GetSD(
[out] uint8 SD[]
);
参数
-
SD [out]
-
二进制字节数组格式的安全描述符。
返回值
此方法返回指示方法调用状态的 HRESULT。 下表列出了对 GetSD 至关重要的返回值。 对于脚本和 Visual Basic 应用程序,可从 OutParameters.ReturnValue 获得结果。 有关详细信息,请参阅构造 InParameters 对象和分析 OutParameters 对象。
-
S_OK
-
方法已成功执行。
-
WBEM_E_ACCESS_DENIED
-
调用方权限不足,无法调用此方法。
-
WBEM_E_METHOD_DISABLED
-
试图在不受支持的系统上运行此方法。
备注
若要详细了解如何以编程方式或手动修改命名空间安全性的,请参阅保护 WMI 命名空间。
示例
以下脚本演示了如何使用 GetSD 来获取 Root\Cimv2 命名空间的当前安全描述符并将其更改为 DisplaySD 中显示的字节数组。
Set objServices = GetObject("winmgmts:root\cimv2")
Set CimV2 = objServices.Get("__SystemSecurity=@")
ReturnValue = Cimv2.GetSD(arrSD)
If Err <> 0 Then
WScript.Echo "Method returned error " & ReturnValue
End If
DisplaySD = "SD = {"
For I = Lbound(arrSD) To Ubound(arrSD)
DisplaySD = DisplaySD & arrSD(I)
If I <> Ubound(arrSD) Then
DisplaySD = DisplaySD & ","
End If
Next
DisplaySD = DisplaySD & "}"
WScript.Echo DisplaySD
要求
要求 | 值 |
---|---|
最低受支持的客户端 |
Windows Vista |
最低受支持的服务器 |
Windows Server 2008 |
命名空间 |
所有 WMI 命名空间 |