设备对象的 SDDL

安全描述符定义语言(SDDL)用于表示安全描述符。 设备对象的安全性可由 放置在 INF 文件中 或传递给 IoCreateDeviceSecure 的 SDDL 字符串指定。 安全描述符定义语言已完整记录在 Microsoft Windows SDK 文档中。

虽然 INF 文件支持整个 SDDL 范围,但 IoCreateDeviceSecure 例程仅支持一部分语言。 此处定义了此子集。

设备对象的 SDDL 字符串的格式为“D:P”,后跟一个或多个表达式,其格式为“(A;;Access;;;SID)”。 SID 值指定一个安全标识符,用于确定 Access 值应用于谁(例如,用户或组)。 Access 值指定 SID 允许的访问权限。 AccessSID 值如下所示。

对设备对象使用 SDDL 时,驱动程序必须链接到 Wdmsec.lib。

访问
指定一个 ACCESS_MASK 值,该值确定允许的访问。 此值可以编写为“0x十六进制”形式的十六进制值,也可以编写为表示访问权限的双字母符号代码序列。

以下代码可用于指定通用访问权限。

代码 通用访问权限

乔治亚州

GENERIC_ALL

GR

通用读取 (GENERIC_READ)

吉瓦

通用写入

GX

GENERIC_EXECUTE

以下代码可用于指定特定访问权限。

代码 特定访问权限

RC

READ_CONTROL

SD

删除

WD

WRITE_DAC

N/A (Additional context is required to provide an accurate and faithful translation.)

写入所有者

GENERIC_ALL授予上述两个表中列出的所有权限,包括更改 ACL 的能力。

SID
指定授予指定访问权限的 SID。 SID 表示帐户、别名、组、用户或计算机。

以下 SID 表示计算机上的 帐户

SID DESCRIPTION

SY

系统

表示操作系统本身,包括其用户模式的组件。

LS 系列

本地服务

本地服务的预定义帐户(也属于“已验证”和“世界”)。 此 SID 从 Windows XP 开始可用。

NS 系列

网络服务

用于网络服务的预定义帐户(同样属于“已验证”和“全局”)。 此 SID 从 Windows XP 开始可用。

以下 SID 表示计算机上的

SID DESCRIPTION

BA

管理员

计算机上的内置管理员组。

BU

内置用户组

涵盖所有本地用户帐户和域用户的组。

BG

内置来宾组

包含使用本地或域来宾帐户登录的用户的组。

以下 SID 描述了用户经过身份验证的程度。

SID(安全标识符) DESCRIPTION

澳大利亚

经过身份验证的用户

由本地计算机或域识别的任何用户。 使用 Builtin 来宾帐户登录的用户不会进行身份验证。 但是,计算机或域上具有单个帐户的来宾组成员将进行身份验证。

匿名登录用户

未使用标识(例如匿名网络会话)登录的任何用户。 使用 Builtin 来宾帐户登录的用户不会进行身份验证或匿名。 此 SID 从 Windows XP 开始可用。

以下 SID 描述了用户如何登录到计算机。

SID DESCRIPTION

IU

交互式用户

最初以交互方式登录到计算机的用户,例如本地登录和远程桌面登录。

NU

网络登录用户

远程访问计算机的用户,无需交互式桌面访问(例如文件共享或 RPC 调用)。

威腾电子

世界

在 Windows XP 之前,此 SID 涵盖每个会话,无论是经过身份验证的用户、匿名用户还是 Builtin 来宾帐户。

从 Windows XP 开始,此 SID 不包括匿名登录会话;它仅涵盖经过身份验证的用户和 Builtin 来宾帐户。

世界 SID 也不涵盖不受信任的或“受限”代码。 有关详细信息,请参阅下表中受限代码 (RC) SID 的说明。

以下这些 SID 值得特别提及。

SID DESCRIPTION

钢筋混凝土

受限代码

此 SID 用于控制不受信任的代码的访问。 针对具有 RC 的令牌的 ACL 验证涉及两个检查,一个检查与令牌的常规 SID 列表进行比对(例如包含 WD),另一个与第二个列表进行比对(通常包含 RC 和原始令牌 SID 的子集)。 仅当令牌通过这两个测试时,才授予访问权限。 因此,RC 实际上与其他 SID 结合使用。

任何指定 RC 的 ACL 还必须指定 WD。 当 RC 与 ACL 中的 WD 配对时,会描述一个包括不受信任的代码在内的所有用户的超集。

非受信任的代码可能是使用资源管理器中的“以其他身份运行”选项启动的代码。 默认情况下,World 不涵盖不受信任的代码。

UD

User-Mode 驱动程序

此 SID 授予对用户模式驱动程序的访问权限。 目前,此 SID 仅涵盖为 User-Mode 驱动程序框架(UMDF)编写的驱动程序。 从 Windows 8 开始,此 SID 可用。

在早期版本的 Windows 中,不能识别“UD”缩写,必须指定此 SID(S-1-5-5-84-0-0-0-0-0)的完全限定形式,以授予对 UMDF 驱动程序的访问权限。 有关详细信息,请参阅 User-Mode Driver Framework 文档中的 控制设备访问

设备对象的 SDDL 示例

本部分介绍在 Wdmsec.h 中找到的预定义 SDDL 字符串。 还可以将这些字符串用作模板,为设备对象定义新的 SDDL 字符串。

SDDL_DEVOBJ_KERNEL_ONLY

“D:P”

SDDL_DEVOBJ_KERNEL_ONLY为“空”ACL。 用户模式代码(包括作为系统运行的进程)无法打开设备。

创建 PDO 时,PnP 总线驱动程序可以使用此描述符。 然后,INF 文件可以为设备指定松散的安全设置。 通过指定此描述符,总线驱动程序将确保不会尝试在处理 INF 之前打开设备。

同样,非 WDM 驱动程序可以使用此描述符使其设备对象不可访问,直到相应的用户模式程序(如安装程序)在注册表中设置最终的安全描述符。

在所有这些情况下,默认情况下是严格的安全性,并在必要时适时放松。

SDDL_DEVOBJ_SYS_ALL

“D:P(A;;GA;;;SY)”

SDDL_DEVOBJ_SYS_ALL类似于SDDL_DEVOBJ_KERNEL_ONLY,但除了内核模式代码之外,作为系统运行的用户模式代码也允许打开设备进行任何访问。

旧驱动程序可以使用此 ACL 从严格的安全设置开始,并在运行时通过使用 SetFileSecurity 用户模式函数,将设备的访问权限开放给各个用户。 在这种情况下,服务必须作为系统运行。

SDDL_DEVOBJ_SYS_ALL_ADM_ALL

“D:P(A;;GA;;;SY)(A;;GA;;;BA)”

SDDL_DEVOBJ_SYS_ALL_ADM_ALL允许内核、系统和管理员完全控制设备。 其他用户无法访问该设备。

SDDL_DEVOBJ_SYS_ALL_ADM_RWX_WORLD_R

“D:P(A;;GA;;;SY)(A;;GRGWGX;;;BA)(A;;GR;;;WD)”

SDDL_DEVOBJ_SYS_ALL_ADM_RWX_WORLD_R允许内核和系统对设备进行全面控制。 默认情况下,管理员可以访问整个设备,但不能更改 ACL(管理员必须先控制设备)。

向所有人(世界 SID)授予读取权限。 不受信任的代码无法访问设备(不受信任的代码可能是使用资源管理器中的“运行方式”选项启动的代码。默认情况下,World 不涵盖受限代码。

另请注意,不会向普通用户授予遍历访问权限。 因此,这可能不是具有命名空间的设备的适当描述符。

SDDL_DEVOBJ_SYS_ALL_ADM_RWX_WORLD_R_RES_R

“D:P(A;;GA;;;SY)(A;;GRGWGX;;;BA)(A;;GR;;;WD)(A;;GR;;;RC)”

SDDL_DEVOBJ_SYS_ALL_ADM_RWX_WORLD_R_RES_R允许内核和系统完全控制设备。 默认情况下,管理员可以访问整个设备,但不能更改 ACL(管理员必须先控制设备)。

向所有人(世界 SID)授予读取访问权限。 此外,还允许不受信任的代码访问代码。 不受信任的代码可能是使用资源管理器中的“以...身份运行”选项启动的代码。 默认情况下,World 不涵盖受限代码。

另请注意,不会向普通用户授予遍历访问权限。 因此,这可能不是具有命名空间的设备的适当描述符。

这些 SDDL 字符串不包含任何继承修饰符。 因此,它们仅适用于设备对象,不应用于文件或注册表项。 有关使用 SDDL 指定继承的详细信息,请参阅 Microsoft Windows SDK 文档。