|
Проверить наличие нескольких 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 и ничего менять не надо, если хоть одного "права" нет, то я их добавляю. Верхний код работает неверно (если хоть "одно право" есть, то ничего, в том числе отсутствующие права добавлять не надо). ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2019, 17:34 |
|
|
start [/forum/topic.php?fid=20&msg=39802319&tid=1398988]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
133ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
others: | 263ms |
total: | 478ms |
0 / 0 |