Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
16.04.2019, 17:34
|
|||
---|---|---|---|
Проверить наличие нескольких dwAccessMask в целевом Ace.Mask |
|||
#18+
Ну вот такой стандартный код, ляпал такие штуки не задумываясь: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
(логика взята из примера из SDK, но там логически не предполагается что добавляемая dwAccessMask может быть комбинацией из двух и более (AccessMask1 Or AccessMask2), т.е. по их логике либо одно либо другое, но не скопом) Вот проверямые права Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
Допустим 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.
Смысл, если в Dacl в Security Descriptor уже есть Ace, содержащий ВСЕ права которые я добавляю (для указанного pSID="Пользователь/группа"), то все OK и ничего менять не надо, если хоть одного "права" нет, то я их добавляю. Верхний код работает неверно (если хоть "одно право" есть, то ничего, в том числе отсутствующие права добавлять не надо). ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=20&tablet=1&tid=1398988]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
144ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 276ms |
total: | 505ms |
0 / 0 |