- 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/
我正在尝试制作我自己的静态类来使用 AD。我写了一个静态方法: public static void AddReadingAceForGroup(DirectoryEntry dirEntry
我尝试使用 sysinternals 中的 pipeacl 和进程资源管理器。 pipeacl 给我一个错误,sysinternals 似乎不支持命名管道的安全性。 最佳答案 我发现如果 Proces
我需要向所有人授予我正在创建的命名管道的访问权限。我知道这样做的方法是创建一个 NULL/空 DACL 并将其传递给 CreateNamedPipe。 如何创建 NULL DACL?有人告诉我,这与为
我有更改进程 DACL 的遗留 C++ 代码,我正在尝试使用 .NET 3.5 中的托管代码类。我在网上找到了代码,其中有人创建了一个 SetAclOnServices 类,该类扩展了服务的 Nati
有没有办法检查对象的 DACL 中是否已经存在 ACE? 我想使用 RtlAddAccessAllowedAce API 调用将 ACE 添加到对象,但我只想在 ACE尚不存在。 有人知道我如何检查
AccessCheck 函数获取 GenericMapping 参数。这个参数有什么用呢?它不用于 DesiredAccess 参数,因为之前必须将 MapGenericMask 应用于 Desire
将 ACE 添加到文件 ACL 后,我使用资源管理器检查了对象的权限。它给我一个关于 DACL 不是规范格式的错误,并询问我是否要重新排序。是否有任何类型的文档可以提供 DACL 的规范排序,这样我就
我有一个客户端/服务器本地进程,我希望在公共(public)只读共享内存区域中提供一些内容。我能够在服务器端成功创建安全描述符和共享内存区域,但是当我尝试访问客户端的共享内存区域时,它会失败并显示 A
我需要在 C++ 程序中授予对 Windows 上文件的访问权限。我四处浏览并从 MSDN 复制/粘贴代码并提出以下内容。据我所知,它一直在工作。 但是今天我在 MSDN 中偶然发现了一条关于使用 A
我正在创建一个具有正确(我相信)权限的用户模式进程,以允许系统访问对象,但是这似乎总是在某些系统进程上失败并显示“访问被拒绝”。 该对象是在“Global\”命名空间中创建的。有些过程成功,有些则失败
我是一名优秀的程序员,十分优秀!