Почему в группе активных каталогов нельзя создать как groupType = Local - PullRequest
2 голосов
/ 28 июня 2019

Я не могу понять, почему не работает создание группы в активной директории как "local" для groupType.он выдает следующее исключение:

 System.DirectoryServices.DirectoryServicesCOMException (0x80072035): The server is unwilling to process the request.

, в то время как следующий пример кода:

        var parentEntry = new DirectoryEntry(ParentContainer);

        var groupToCreate = parentEntry.Children.Add(this.AttributeType + this.Name, "group");

        groupToCreate.Properties["description"].Add(this.Description);

        groupToCreate.Properties["displayName"].Add(Name);

        groupToCreate.Properties["groupType"].Add((int)GroupType.DomainLocalGroup); --> this line throws error. 


        groupToCreate.CommitChanges();

Если я перехожу из GroupType.DomainLocalGroup в GroupType.DomainGlobalGroup, все работает нормально.Может ли какой-нибудь орган дать мне знать, как избавиться от этой проблемы?

enter image description here

1 Ответ

1 голос
/ 28 июня 2019

Согласно Microsoft , вот как определяется тип перечисления группы:

  • 1 (0x00000001) Указывает группу, созданную системой.
  • 2 (0x00000002) Указывает группу с глобальной областью действия.
  • 4 (0x00000004) Указывает группу с локальной областью домена.
  • 8 (0x00000008) Указывает группу с универсальной областью действия.
  • 16 (0x00000010) Указывает группу APP_BASIC для диспетчера авторизации Windows Server.
  • 32 (0x00000020) Указывает группу APP_QUERY для диспетчера авторизации Windows Server.
  • 2147483648 (0x80000000) Указывает защитугруппа.Если этот флаг не установлен, то группа является группой рассылки.

Но это также перечисление флага - это означает, что значения можно объединять, складывая их вместе.Так что да, 0x80000004 на самом деле является допустимым значением, которое означает «локальная группа безопасности домена».(0x4 является локальной группой рассылки домена)

Но вам нужно привести к целому числу (оно не позволит вам установить его с шестнадцатеричным значением).Я удивлен, что вы получили исключение "Сервер не хочет обрабатывать запрос", потому что, когда я делаю это:

(int) 0x80000004

Я получаю эту ошибку компилятора:

CS0221: Постоянное значение «2147483652» не может быть преобразовано в «int» (используйте «unchecked» синтаксис для переопределения)

Это потому, что десятичное значение 0x80000004 равно 2147483652, которое не помещается в32-разрядное целое число.

Но вам нужно дать ему 32-разрядное целое число (вы не можете просто привести к long).Поэтому вы должны следовать предложению и использовать unchecked при приведении:

unchecked((int) 0x80000004)

, что дает десятичное значение -2147483644.

Так что ваш код долженвыглядеть так:

groupToCreate.Properties["groupType"].Add(unchecked((int) GroupType.DomainLocalGroup));
...