设备对象的 SDDL
安全描述符定义语言 (SDDL) 用于表示安全描述符。 设备对象的安全性可由 放置在 INF 文件中 或传递给 IoCreateDeviceSecure 的 SDDL 字符串指定。 安全描述符定义语言完整记录在Microsoft Windows SDK文档中。
虽然 INF 文件支持 SDDL 的全部范围,但 IoCreateDeviceSecure 例程仅支持语言的子集。 此子集在此处定义。
设备对象的 SDDL 字符串的格式为“D:P”,后跟一个或多个形式为“ (A;;Access;;;SID) ”。 SID 值指定一个安全标识符,用于确定 Access 值应用于谁 (例如用户或组) 。 Access 值指定 SID 允许的访问权限。 Access 和 SID 值如下所示。
注意 对设备对象使用 SDDL 时,驱动程序必须针对 Wdmsec.lib 链接。
访问
指定确定允许的访问 的ACCESS_MASK 值。 此值可以编写为“0xhex”形式的十六进制值,也可以编写为表示访问权限的双字母符号代码序列。
以下代码可用于指定一般访问权限。
代码 | 通用访问权限 |
---|---|
GA |
GENERIC_ALL |
GR |
GENERIC_READ |
GW |
GENERIC_WRITE |
Gx |
GENERIC_EXECUTE |
以下代码可用于指定特定访问权限。
代码 | 特定访问权限 |
---|---|
RC |
READ_CONTROL |
SD |
DELETE |
Wd |
WRITE_DAC |
窝 |
WRITE_OWNER |
请注意,GENERIC_ALL授予上述两个表中列出的所有权限,包括更改 ACL 的功能。
希
指定被授予指定访问权限的 SID。 SID 表示帐户、别名、组、用户或计算机。
以下 SID 表示计算机上的 帐户 。
SID | 说明 |
---|---|
SY |
系统 表示操作系统本身,包括其用户模式组件。 |
LS |
Local Service 本地服务 (的预定义帐户,该帐户也属于“经过身份验证”和“世界) ”。 此 SID 从 Windows XP 开始可用。 |
NS |
Network Service 网络服务 (的预定义帐户,该帐户也属于“经过身份验证”和“世界) ”。 此 SID 从 Windows XP 开始可用。 |
以下 SID 表示计算机上的 组 。
SID | 说明 |
---|---|
BA |
管理员 计算机上的内置管理员组。 |
BU |
内置用户组 涵盖所有本地用户帐户和域上的用户的组。 |
BG |
内置来宾组 包含使用本地或域来宾帐户登录的用户的组。 |
以下 SID 描述了对用户进行身份验证的程度。
SID | 说明 |
---|---|
AU |
经过身份验证的用户 由本地计算机或域识别的任何用户。 请注意,使用 Builtin Guest 帐户登录的用户不会进行身份验证。 但是,具有计算机或域上个人帐户的“来宾”组成员将进行身份验证。 |
AN |
匿名登录用户 任何在没有标识的情况下登录的用户,例如匿名网络会话。 请注意,使用 Builtin Guest 帐户登录的用户既未经身份验证,也不匿名。 此 SID 从 Windows XP 开始可用。 |
以下 SID 描述了用户如何登录到计算机。
SID | 说明 |
---|---|
IU |
交互式用户 最初以“交互方式”登录到计算机的用户,例如本地登录和远程桌面登录。 |
NU |
网络登录用户 在没有交互式桌面访问的情况下远程访问计算机的用户 (例如文件共享或 RPC 调用) 。 |
Wd |
World 在 Windows XP 之前,此 SID 涵盖每个会话,无论是经过身份验证的用户、匿名用户还是内置来宾帐户。 从 Windows XP 开始,此 SID 不涵盖匿名登录会话;它仅涵盖经过身份验证的用户和 Builtin Guest 帐户。 请注意,World SID 也不涵盖不受信任或“受限”代码。 有关详细信息,请参阅下表中的受限代码 (RC) SID 的说明。 |
以下 SID 值得特别提及。
SID | 说明 |
---|---|
RC |
受限代码 此 SID 用于控制不受信任的代码的访问。 针对具有 RC 的令牌的 ACL 验证包括两个检查,一个针对令牌的 SID (包含 WD(例如) )的正常列表,另一个针对第二个列表 (通常包含 RC 和一部分原始令牌 SID) 。 仅当令牌通过这两个测试时,才授予访问权限。 因此,RC 实际上与其他 SID 结合使用。 任何指定 RC 的 ACL 也必须指定 WD。 当 RC 与 ACL 中的 WD 配对时,将描述 Everyone 的超集,包括不受信任的代码。 不受信任的代码可能是使用资源管理器中的运行方式选项启动的代码。 默认情况下,World 不涵盖不受信任的代码。 |
Ud |
User-Mode驱动程序 此 SID 授予对用户模式驱动程序的访问权限。 目前,此 SID 仅涵盖为 User-Mode Driver Framework (UMDF) 编写的驱动程序。 此 SID 从Windows 8开始可用。 在无法识别“UD”缩写的早期 Windows 版本中,必须指定此 SID 的完全限定形式 (S-1-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。 用户模式代码 (包括作为系统) 运行的进程无法打开设备。
PnP 总线驱动程序可以在创建 PDO 时使用此描述符。 然后,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 (管理员必须先控制设备。)
向 (World 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 (管理员必须先控制设备。)
向 (World SID) 的每个人都提供读取访问权限。 此外,还允许不受信任的代码访问代码。 不受信任的代码可能是使用资源管理器中的运行方式选项启动的代码。 默认情况下,World 不涵盖受限代码。
另请注意,不会向普通用户授予遍历访问权限。 因此,对于具有命名空间的设备,这可能不是适当的描述符。
请注意,上述 SDDL 字符串不包含任何继承修饰符。 因此,它们仅适用于设备对象,不应用于文件或注册表项。 有关使用 SDDL 指定继承的详细信息,请参阅Microsoft Windows SDK文档。