2011-10-19 42 views
1

我试图将一个组添加到一个邮箱(在C#中)。我正在使用CDOEXM,DirectoryServices.AccountManagement调用和失败的混合。这是我的代码:在Exchange邮箱上设置ACL

// userDe is a DirectoryEntry 
IExchangeMailbox exMb = (IExchangeMailbox)userDe.NativeObject; 
IADsSecurityDescriptor securityDescriptor = (IADsSecurityDescriptor)exMb.MailboxRights; 
IADsAccessControlList acl = (IADsAccessControlList)securityDescriptor.DiscretionaryAcl; 
AccessControlEntry ace = new AccessControlEntry(); 

// groupName - I have successfully created the group earlier 
ace.Trustee = groupName; 
acl.AddAce(ace); 
securityDescriptor.DiscretionaryAcl = acl; 
exMb.MailboxRights = securityDescriptor; 

// How do I save it? 
exMb.CommitChanges() etc etc 
...or userDe.Properties["ntSecurityDescriptor"] = securityDescriptor; 

不知道下一步该怎么做,一切我尝试编译错误或InvalidCastException的结果。

请帮

+0

在哪行中出现编译错误会失败? InvalidCastException在哪里被抛出? –

+0

我回答了一个类似的问题[读取/写入Active Directory中的对象的安全属性(权限工作方式相同)C#](http://stackoverflow.com/q/6251126/608772)。 – JPBlanc

+0

Henning,根据我使用的代码的不同,我得到各种错误。我现在已经尝试了一些。我认为一些很好的例子是我需要的,并且早些时候找不到很多例子(特别是CDOEXM的东西)。然而,JPBlanc,谢谢我看看你的例子,我想我现在更了解一些,所以当我明天上班时,我会根据你的例子尝试一些事情。如果你们中的任何一位能为我指出一些好的文档,那将是一个额外的奖励。谢谢你们的回复,感谢。 – Richard

回答

0

明白了相当多的痛苦(整数值,我莫名其妙地设置对应枚举API中的值,但我不能让他们的工作)之后。变量userDe是一个DirectoryEntry。

  IExchangeMailbox exMb = (IExchangeMailbox)userDe.NativeObject; 
      IADsSecurityDescriptor securityDescriptor = (IADsSecurityDescriptor)exMb.MailboxRights; 
      IADsAccessControlList acl = (IADsAccessControlList)securityDescriptor.DiscretionaryAcl; 
      AccessControlEntry ace = new AccessControlEntry(); 
      ace.Trustee = groupName; 
      ace.AccessMask = 1; 
      ace.AceFlags = 2; 
      ace.AceType = 0; 

      acl.AddAce(ace); 
      securityDescriptor.DiscretionaryAcl = acl; 
      IADsUser iadsUser = (IADsUser)userDe.NativeObject; 
      iadsUser.Put("msExchMailboxSecurityDescriptor", securityDescriptor); 

      iadsUser.SetInfo();