Вопрос о том, как работают эти 2 строки кода - PullRequest
2 голосов
/ 29 января 2010

Я читаю эту статью о том, как работать с AD через C #. В середине статьи представлен код ниже.

Свойства учетной записи пользователя являются флажками. Кто-нибудь имеет какие-либо идеи, что приведенная ниже строка кода вернется для отмеченного флажка? Что если установлен более 1 флажок? Я бы подумал, что возвращаемый bool будет более интуитивным?

//Add this to the create account method

int val = (int)newUser.Properties["userAccountControl"].Value; 
 //newUser is DirectoryEntry object

Почему мы делаем логическое или ниже? Как это работает между int и вторым значением (это байт?)

 newUser.Properties["userAccountControl"].Value = val | 0x80000; 
//ADS_UF_TRUSTED_FOR_DELEGATION

Я знаю, это звучит очень наивно ...

Спасибо

Ответы [ 3 ]

1 голос
/ 29 января 2010

Свойство userAccountControl содержит двухбайтовое значение, в котором каждый отдельный бит имеет значимое значение. Если бит включен, то используется какая-либо опция - если она не включена, то опция отсутствует.

Это более компактно и более оптимизировано для пространства, чем наличие миллиарда логических значений. Кроме того, многие «старые» Win16 и Win32 API просто работают таким образом.

Битовый оператор «И» используется для проверки наличия такого единственного бита:

if (newUser.Properties ["userAccountControl"]. Значение & 0x400 == 0x400)

в этом случае устанавливается бит 0x400.

Чтобы на самом деле установить бит, вы используете побитовый оператор «ИЛИ»:

newUser.Properties ["userAccountControl"]. Value = val | 0x800

Устанавливает бит "0x800".

Это базовая логическая логическая логика, правда. Действительно, немного грязно - но .NET имеет некоторую помощь, чтобы немного упростить ситуацию (например, проверьте тип данных BitArray )

0 голосов
/ 29 января 2010

Исходя из информации, которую вы предоставляете, я бы предположил, что они используют систему типов флагов для обозначения выбранных элементов. Каждый параметр имеет определенное значение, и они суммируются, чтобы вы могли вернуться к выбранному.

Это будет доказано логическим или используется, чтобы увидеть, если определенное значение включено.

0 голосов
/ 29 января 2010

userAccountControl - это поле флага, поэтому они помещают его в int.

См. http://support.microsoft.com/kb/305144 для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...