![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| PunkRat |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 2.6.2006 Репутация: нет Всего: нет |
блин у меня от этого секьюрити уже голова отстегивается напрочь. скажите, пожалуйста, почему может не работать такой код. вот я устанавливаю право на чтение для пользователя таким макаром:
все отлично устанавливается что и видно в диалоге прав. почему тогда, когда я пытаюсь получить права у меня бит GENERIC_WRITE - пустой. получаю вот так:
Это сообщение отредактировал(а) PunkRat - 12.1.2008, 18:57 |
||||
|
|||||
| PunkRat |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 2.6.2006 Репутация: нет Всего: нет |
блин, ну почему же mask возвращается равным 2032127, т.е. все старшие биты - нулевые. в то время как я устанавливаю файлу GENERIC_WRITE перед этим, т.е. 31 бит и в свойствах файла это видно отлично ( (
|
|||
|
||||
| Pulse69 |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 138 Регистрация: 28.4.2006 Где: Хабаровск Репутация: 8 Всего: 10 |
В маске будут содержаться т.н Specific Rights для файловых объектов. Вам же именно они нужны. GENERIC_READ и GENERIC_WRITE вполне могут и не возвращатсься (точно не знаю, но, скорее всего, так и есть).
Та маска, что вы получаете (2032127) как раз содержит в себе все доступные для файловых объектов операции. Вот, на всякий случай, их список.
Если нужно проверить, есть ли право на запись в файл, необходимо использовать следующий код:
Вот и всё :-) --------------------
Ctrl+Alt+Reset |
||||
|
|||||
| PunkRat |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 2.6.2006 Репутация: нет Всего: нет |
Pulse69, голова! ) таким образом получается, что полностью ваш код, большое вам спасибо. я бы не подумал, что это младшие биты в описании ACCESS_MASK в мсдн нет их расшифровки :\ хотя видел ведь, что число меняется... ой, кажется я все-таки успеваю все дописать
|
|||
|
||||
| PunkRat |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 2.6.2006 Репутация: нет Всего: нет |
блин, вот теперь запретив какое то из свойств из программы я не могу его вновь разрешить, только из диалога свойств файла ... нипонятна, что с этим делать. сначала я думал это потому, что я, например запретив право на чтение или запись для текущего пользователя пытаюсь потом что, то менять. но когда меняю права для другой записи - все то же самое. стоит что-то запретить, как потом ничего обратно программно не вернуть. через свойства файла - пожалуйста. в этих свойствах кстати для записи присутствует два элемента, в одном проставлено разрешение для дейстивя, а в другом - запрет.
Это сообщение отредактировал(а) PunkRat - 13.1.2008, 19:13 |
|||
|
||||
| PunkRat |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 2.6.2006 Репутация: нет Всего: нет |
сделал вот как. теперь работает! правда все равно нифига не понимаю как. мне кажется, что и в том варианте реализации можно было что-то подправить, чтоб работало.
|
|||
|
||||
| Pulse69 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 138 Регистрация: 28.4.2006 Где: Хабаровск Репутация: 8 Всего: 10 |
Быть может, дело в том, что приоритет запрещения выше, чем разрешения, и если запретить какое-либо действие над файлом, его разрешение уже не даст эффекта. Для этого надо сначала удалить DENY_ACCESS-записи из ACL, а потом добавлять GRANT_ACCESS.
--------------------
Ctrl+Alt+Reset |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |