|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Апр 23, 2004 21:04:40 Не, вернула как раз ERROR_SUCCESS, то бишь 0 |
|
|
Дата: Апр 23, 2004 21:27:54 Тааак, ладно, как оно обычно бывает сам не туда глянул, вот она, эта строка: 005C02D0 44 3A 28 41 3B 3B 30 78 31 66 30 66 66 66 3B 3B D:(A;;0x1f0fff;; 005C02E0 3B 42 41 29 28 41 3B 3B 30 78 31 66 30 66 66 66 ;BA)(A;;0x1f0fff 005C02F0 3B 3B 3B 53 59 29 00 ;;;SY). |
|
|
Дата: Апр 26, 2004 10:15:34 Да, насчет INVALID_HANDLE_VALUE я немножко неправду сказал. Точнее, как раз с этим значением проблем нет. Просто я был уверен, что GetCurrentThread тоже возвращает INVALID_HANDLE_VALUE, а оказалось, что нет - он возвращает (HANDLE)(-2). Так что в данном случае с "псевдо-хэндлами" все в порядке, процесс от потока отличить можно, а больше нам ничего и не надо. Теперь насчет твоей строки. A - allowed BA - built-in administrators SY - local system 0x1f0fff - максимально возможные права доступа к процессу (это я опытным путем обнаружил, делал сначала Set 0xFFFFFFFF, потом Get - получал 0x1F0FFF). Конкретно для этой строки твоя задача - привести ее к виду D:(A;;0x1f0ffe;;;BA)(A;;0x1f0ffe;;;SY)(D;;0x1;;;WD) Возможно, последняя пара скобок лишняя, но лучше на всякий случай перестраховаться :) |
|
|
Дата: Апр 26, 2004 11:24:11 [ RobinFood: это я опытным путем обнаружил, делал сначала Set 0xFFFFFFFF, потом Get - получал 0x1F0FFF. ] А можно проще :) Слей WinObjEx (cсылка на главной странице васма еще видна), тыкни два раза в \ObjectTypes\Process и смотри Valid Access. |
|
|
Дата: Апр 26, 2004 17:15:26 RobinFood Ну и как мне эту строку тогда приводить к необходимому виду, что парсить её и модифицировать или можно как-то преобразовать по другому? Что ты там говорил по поводу перевести эту строку в число, как это сделать, по какому алгоритму? |
|
|
Дата: Апр 26, 2004 17:32:07 Я думаю, парсить и модифицировать. Лично для меня это - самый простой вариант, другими я просто не пользовался. Наверняка есть и другие варианты, по идее можно воспользоваться той же SetEntriesInAcl на пару с GetExplicitEntriesFromAcl, тогда строку парсить не придется. Но, как я уже говорил, я этими методами не пользовался. Мне проще строку явно задать, и не мучиться ни с парсингом, ни с заполнением кучи структур :) |
|
|
Дата: Апр 27, 2004 03:32:35 Таак, моя строка: D:(A;;0x1f0fff;;;BA)(A;;0x1f0fff;;;SY) Ты предлагаешь: D:(A;;0x1f0ffe;;;BA)(A;;0x1f0ffe;;;SY)(D;;0x1;;;WD) Откуда взялось выделенное красным это ты типа взял это число и сделал mov eax, 1f0fffh and eax, not PROCESS_TERMINATE так? А где про это написано что нужно именно поступать так, в MSDN я что-то этого не нашёл, может линки какие знаешь? Где вобще можно почитать про эти строки? |
|
|
Дата: Апр 27, 2004 11:07:49 Да, насчет выделенного красным - именно так я и сделал. В MSDN я об этом и читал. ace strings: rights A string that indicates the access rights controlled by the ACE. This string can be a hexadecimal string representation of the access rights, such as "0x7800003F", or it can be a concatenation of the following strings. access mask - тут красиво разрисовано, какой бит для чего process access rights - а тут расписано, какие биты специфичны для процессов. |
|
|
Дата: Апр 27, 2004 13:52:32 Спасибо за ссылки.. |
|
|
Дата: Апр 29, 2004 15:26:39 · Поправил: Asterix RobinFood Продолжим..? Функция ConvertStringSecurityDescriptorToSecurityDescriptor даёт нам Pointer to a variable that receives a pointer to the converted security descriptor а передать в SetSecurityInfo нужно Pointer to the new DACL for the object как тут быть? |
|
|
Дата: Апр 29, 2004 15:39:04 Так же, как и с GetSecurityInfo :) Объявляешь pDacl DD ? В ConvertStringSecurityDescriptorToSecurityDescriptor передаешь offset pDacl, а в SetSecurityInfo - просто pDacl. Потом не забудь сделать invoke LocalFree, pDacl |
|
|
Дата: Апр 29, 2004 16:00:32 · Поправил: RobinFood Я подумал, что ты опять немного запутался с "указателями на указатели", и написал именно об этом. А там проблема совсем в другом - ConvertStringSecurityDescriptorToSecurityDescriptor возвращает указатель на SecurityDescriptor, а SetSecurityInfo принимает указатель на DACL. Чтобы получить DACL, имея SecurityDescriptor, нужно воспользоваться функцией GetSecurityDescriptorDacl. Значит, объявляешь 2 переменных pDacl DD ? pSD DD ?Сначала вызываешь ConvertStringSecurityDescriptorToSecurityDescriptor, ей передаешь offset pSD, потом вызываешь GetSecurityDescriptorDacl, ей передаешь pSD и offset pDacl, и наконец вызываешь SetSecurityInfo, ей передаешь pDacl. После чего через LocalFree освобождаешь pSD, но не освобождаешь pDacl - он освободится вместе с pSD, потому что находится структура DACL внутри структуры SECURITY_DESCRIPTOR. |
|
|
Дата: Апр 29, 2004 17:47:18 Спасибо, теперь думаю вопрос должен разрешиться :-) |
|
|
Дата: Май 11, 2004 12:23:23 RobinFood Решил вернуться к вопросу, т.к. тогда так его и не добил ;-) Дошёл значит до функции invoke GetSecurityDescriptorDacl, pSecurityDescriptor, LPBOOL lpbDaclPresent, OFFSET pDacl, LPBOOL lpbDaclDefaulted и никак не врублюсь по описанию что за параметры должны быть(выделены красным) Это поинтеры на пустую ячейку где система должна проставить флаги или это я должен установить флаги в эти ячейки и передать поинтеры в функцию?? |
|
|
Дата: Май 11, 2004 12:38:04 · Поправил: q_q Asterix В psdk указано out, т.е. ты должен зарезервировать под каждый из BOOL'ов по DWORD'у и передать в функцию их адреса, а она их заполнит. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.107 |