如何查询Active Directory对象的有效权限?

Oli*_*sen 9 permissions exchange-server adsi active-directory

我正在尝试以编程方式确定当前用户是否对给定的Active Directory对象具有某些权限(特别是在这种情况下,我正在尝试确定用户是否具有另一个Exchange用户或通讯组列表对象的"代理发送"权限).

我已经想通了如何访问ntSecurityDescriptor使用ADSI属性:我可以在枚举的ACE IADsSecurityDescriptorDiscretionaryACL财产.但:

  • 如何根据该数据确定受托人是否明确允许或拒绝"发送为"许可?
  • 如果通过组成员资格间接授予权限,我该如何发现?我是否真的必须通过(递归)检查用户所属的所有组来自己解析有效权限?当然必须有一个API用于该任务......

FWIW,我使用ActiveDs.dll类型库在Delphi中编码(即本机Win32代码),因此特定于.NET的解决方案对我没有多大帮助,除非他们的源代码为我提供了如何在本机中执行相同操作的线索码.PowerShell也是如此.


在任何人开始之前:我已经知道了PR_EMS_AB_PUBLIC_DELEGATESPR_EMS_AB_PUBLIC_DELEGATES_BL_O扩展的MAPI属性.但是,这不是我追求的.这些属性引用"代表发送"-right(又名委托),而不是"发送为"权限,这是完全不同的事情.

Bri*_*ond 2

这是解释的 MSDN 文章 - http://msdn.microsoft.com/en-us/library/windows/desktop/ms675580(v=VS.85).aspx。随附的示例展示了如何调用 API。