Я использую AD LDS в Windows 7 и создал локальный экземпляр с новым разделом приложений с помощью утилиты adaminstall.
Как я могу добавить существующую локальную группу Windows к роли Читатели этого раздела?
Я хочу добиться того же результата программно (на С#), который дается следующими ручными шагами:
- Запустите редактор ADSI и подключитесь к экземпляру и разделу AD LDS.
- Перейдите к CN=Readers под корневым узлом раздела.
- Дважды щелкните запись CN=Readers.
- Дважды щелкните атрибут «член».
- Выберите и добавьте существующую локальную группу Windows.
У меня уже есть следующий код С#:
public void AddReader(string partitionName, string accountName)
{
var ntAccount = new NTAccount(accountName);
var securityIdentifer = ntAccount.Translate(typeof(SecurityIdentifier));
var accountNameDN = string.Format("CN={0},CN=ForeignSecurityPrincipals,{1}", securityIdentifer.Value, partitionName);
var rootPath = string.Format("LDAP://localhost:389/CN=Readers,CN=Roles,{0}", partitionName)
var directoryEntry = new DirectoryEntry(RootPath);
directoryEntry.Properties["member"].Add(accountNameDN);
directoryEntry.CommitChanges();
}
Этот код работает только в том случае, если локальная группа хотя бы один раз была добавлена к роли Читатели с помощью ручных действий, описанных выше. Если я добавлю группу вручную, а затем удалю ее вручную, приведенный выше код можно использовать для повторного добавления группы.
Но когда я пытаюсь добавить новую локальную группу Windows, вызов CommitChanges()
в приведенном выше коде выдает DirectoryServicesCOMException
с кодом ошибки 0x8007002F
и сообщением A constraint violation occurred
.
Очевидно, что действия, выполняемые вручную, вносят некоторые изменения в существующую локальную группу Windows, что делает ее пригодной для добавления в роль читателей AD LDS. Но чего мне не хватает?
Я думаю, что должен быть лучший способ, чем мой подход с использованием классов ActiveDirectorySecurity
и ActiveDirectoryAccessRule
, но я не могу понять, как их использовать.