- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
AccessCheck 函数获取 GenericMapping 参数。这个参数有什么用呢?它不用于 DesiredAccess 参数,因为之前必须将 MapGenericMask 应用于 DesiredAccess。
它也不适用于 SecurityDescriptor 中包含的 DACL,因为我发现使用 C 程序执行此操作:
但是,此操作会失败并出现访问被拒绝错误。当我将安全描述符更改为“D:(A;;0x0001;;;ownerSID)”时,将授予访问权限。这表明 AccessCheck 未使用 GenericMapping 参数将 DACL 中的通用访问标志 (GA/GW/GR/GX) 转换为特定访问权限。为什么?我做错了什么吗?
https://msdn.microsoft.com/de-de/library/windows/desktop/aa374815(v=vs.85).aspx没有给出有关如何设置安全描述符的任何提示。
最佳答案
您几乎全部正确,但您没有考虑到当您尝试将安全描述符(SD
)分配给内核对象时 - 系统不完全“按原样”分配您的 SD
,但首先将 GenericMapping
应用于 ACE
。
每个对象 - 都关联 _OBJECT_TYPE
其中包含 _OBJECT_TYPE_INITIALIZER
这里存在 GENERIC_MAPPING GenericMapping;
和这个 GenericMapping
(对于每种类型的对象都是唯一的)用于将 ACCESS_MASK
中的通用标志转换为非通用标志.
为了测试,我使用下一个 SD
创建文件 - "D:P(A;;GA;;;WD)"(10000000 - GenericAll for S-1-1-0 EveryOne )
。然后我从创建的文件中查询 DACL - 并确实看到 001F01FF
为 S-1-1-0
但不是 10000000
.
当我使用 "D:P(A;;GX;;;WD)"(GenericExecute - 20000000 for S-1-1-0)
- 在最终文件中我查看 001200A0 代表
S-1-1-0
因此真正的内核对象在
ACCESS_MASK
中没有通用位,并且您的 DACL
的形式与您无法分配给任何对象相同。
Why is AccessCheck NOT applying GenericMapping to the DACL?
AccessCheck
假定 DACL
中的 ACCESS_MASK
已 已转换(无通用位)
我认为这是性能优化 - 更好地转换通用位一次(在对象创建或为其分配 SD
时 - 比每次有人尝试打开对象时都进行此转换)
关于GenericMapping
参数如何使用?
确实非常弱 - 仅当对象没有 DACL
(或者 PreviousMode == KernelMode
)并且您请求 MAXIMUM_ALLOWED
作为 DesiredAccess
- 系统授予您GenericMapping->GenericAll
。这是基于从 WRK
(accessck.c
)
查看源代码没有 DACL
和 MAXIMUM_ALLOWED
这种情况很少见,但在这种情况下,系统如何计算需要授予调用者哪些具体访问权限?他不询问具体的访问权限(如读/写/删除) - 而是“全部”。 so 系统并给他 GenericMapping->GenericAll
关于winapi - 为什么 AccessCheck 不将 GenericMapping 应用于 DACL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40900143/
AccessCheck 函数获取 GenericMapping 参数。这个参数有什么用呢?它不用于 DesiredAccess 参数,因为之前必须将 MapGenericMask 应用于 Desire
我是一名优秀的程序员,十分优秀!