powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проверить наличие нескольких dwAccessMask в целевом Ace.Mask
1 сообщений из 1, страница 1 из 1
Проверить наличие нескольких dwAccessMask в целевом Ace.Mask
    #39802319
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот такой стандартный код, ляпал такие штуки не задумываясь:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
      If (EqualSid(pAceSid, pSID)) Then
        If (Ace.Mask And dwAccessMask) Then 'dwAccessMask присутствует в Ace.Mask
          If (bDeny And (Ace.Header.AceType) = ACCESS_DENIED_ACE_TYPE) Or _
           ((bDeny = False) And (Ace.Header.AceType) = ACCESS_ALLOWED_ACE_TYPE) Then
            'found one
            Debug.Print("        Found Duplicate ACE")
            Return True
          End If
        End If
      End If


(логика взята из примера из SDK, но там логически не предполагается что добавляемая dwAccessMask может быть комбинацией из двух и более (AccessMask1 Or AccessMask2), т.е. по их логике либо одно либо другое, но не скопом)

Вот проверямые права
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
  Public Enum ACCESS_RIGHTS_ENUM
    AccessMask1= 1
    AccessMask2= 2
    AccessMask3= 4
    AccessMask4= 8
    AccessMask5= 16
...
  End Enum



Допустим 8 -присутствует в Ace.Mask ; 16-отсутствует
Ace.Mask And 8 даст True
Ace.Mask And 16 даст False
А вот теперь "глюк", если я добавляю/проверяю "комбинацию"
Ace.Mask And (8 Or 16) даст опять True, хотя надо получить False (16 то отсутствует)

Вывел MsgBox
Ace.Mask And 8 даст 8
Ace.Mask And 16 даст 0
Ace.Mask And (8 Or 16) даст 8

Т.е. мне нужно получить False если хотя бы что-то одно отсутствует.

Правильно ли я понимаю, что код надо поменять вот так?

Код: vbnet
1.
       If ((Ace.Mask And dwAccessMask) = dwAccessMask) Then 'dwAccessMask присутствует в Ace.Mask



Смысл, если в Dacl в Security Descriptor уже есть Ace, содержащий ВСЕ права которые я добавляю (для указанного pSID="Пользователь/группа"), то все OK и ничего менять не надо, если хоть одного "права" нет, то я их добавляю.
Верхний код работает неверно (если хоть "одно право" есть, то ничего, в том числе отсутствующие права добавлять не надо).
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проверить наличие нескольких dwAccessMask в целевом Ace.Mask
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]