更改安全对象上的访问安全性
打印机、服务、注册表项、DCOM 应用程序和 WMI 命名空间是安全对象。 对安全对象的访问权限受 安全描述符的保护,该描述符指定有权访问的用户。 从 Windows Vista 开始,许多安全对象具有获取或设置安全描述符的方法。 使用适当的权限,可以在安全对象上读取或更改安全描述符。 使用这些方法,可以控制哪些用户帐户或组有权访问打印机、服务、WMI 命名空间或其他对象。 有关安全描述符及其在 WMI 中使用的详细信息,请参阅 访问 WMI 安全对象。
本主题讨论了以下部分:
对象和安全描述符方法
以下列表包含安全对象必须允许读取或更改安全描述符的方法:
WMI 命名空间
提供程序可以建立仅允许某些组访问 WMI 命名空间中的数据的安全性。 命名空间安全性由 __SystemSecurity 类上的方法控制。 从 Windows Vista 开始,GetSecurityDescriptor 和 SetSecurityDescriptor 方法返回并写入__SecurityDescriptor对象。 有关详细信息,请参阅 设置命名空间安全描述符。
注册表项
从 Windows Vista 开始,你可以保护注册表项,以便未经授权的用户无法更改它们。 StdRegProv 类具有 GetSecurityDescriptor 和 SetSecurityDescriptor 方法。 这些方法返回和写入 Win32_SecurityDescriptor 对象。
打印机
从 Windows Vista 开始,可以使用 GetSecurityDescriptor 和 SetSecurityDescriptor 方法保护对 Win32_Printer 类实例的访问。 这些方法返回和写入 Win32_SecurityDescriptor 对象。
服务
从 Windows Vista 开始,可以使用 GetSecurityDescriptor 和 SetSecurityDescriptor 方法保护对 Win32_Service 类实例的访问。 这些方法返回和写入 Win32_SecurityDescriptor 对象。
DCOM 应用程序
DCOM 应用程序实例有多个安全描述符。 从 Windows Vista 开始,使用Win32_DCOMApplicationSetting类的方法获取或更改各种安全描述符。 安全描述符作为 Win32_SecurityDescriptor 类的实例返回。
若要获取或更改配置权限,请调用 GetConfigurationSecurityDescriptor 或 SetConfigurationSecurityDescriptor 方法。
若要获取或更改访问权限,请调用 GetAccessSecurityDescriptor 或 SetAccessSecurityDescriptor 方法。
若要获取或更改启动和激活权限,请调用 GetLaunchSecurityDescriptor 或 SetLaunchSecurityDescriptor 方法,
文件
GetSecurityDescriptor 和 SetSecurityDescriptor 方法位于 Win32_LogicalFileSecuritySetting 类中,而不是在 CIM_DataFile 类中。
共享
GetSecurityDescriptor 和 SetSecurityDescriptor 方法位于 Win32_LogicalShareSecuritySetting 类中,而不是在 Win32_Share 类中。
注意
在对 SetSecurityDescriptor 方法的调用中未指定新的安全访问控制列表 (SACL) 时,目标安全对象上的安全描述符 SACL 设置为 NULL,以便上一个 SACL 设置不会持久保存。
在安全描述符格式之间转换
安全描述符是通常必须在 C++ 中创建和更改的复杂二进制字节数组。 使用 Get 方法之一获取安全描述符后, Win32_SecurityDescriptorHelper 类提供了将安全描述符转换为 安全描述符定义语言 (SDDL) 或 Win32_SecurityDescriptor 实例的方法。
可以在 Win32_SecurityDescriptor 实例或 SDDL 中更轻松地操作 访问控制 列表 (ACL) 。 有关 WMI 中安全描述符的结构和使用的详细信息,请参阅 WMI 安全描述符对象。
在 C++ 或 C# 中,使用转换函数将二进制安全描述符转换为 安全描述符定义语言 (SDDL) 。 若要在 C++ 应用程序中修改安全描述符值,请使用 ConvertSecurityDescriptorToStringSecurityDescriptor 和 ConvertStringSecurityDescriptorToSecurityDescriptor。
安全问题
建议谨慎地更改安全描述符,以便对象的安全性不会受到损害。 请注意,访问控制条目的顺序 (ACE) 在自由裁量访问控制列表中 (DACL) 可能会影响访问安全性。 有关详细信息,请参阅 DACL 中的 ACE 顺序。
相关主题