Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
2 / 2 / 0
Регистрация: 02.01.2016
Сообщений: 82
Записей в блоге: 2
1

RegReplaceKey из приложения сервиса (от Locsl system)

30.09.2017, 19:22. Показов 776. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени.
Нижеприведенный код работает при запуске приложения от имени администратора,
а также из приложения, запущенного через планировщик от имени пользователя "система".
Если же ту же программу запустить из сервиса, работающего под учеткой "Local system",
то Reg.ReplaceKey не отрабатывает, возвращая false.
Если заменить на API-шную RegReplaceKey, то возвращает 5 (отказано в доступе).
По идее, привилегии бэкап и ресторе должны быть, и даже MSDN запрещает их получать,
но я всё равно пробовал )
Что винде не нравится?

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function RegOffReplace(const HiveName: string; const HiveFile: string): boolean;
 const
 KEY_WOW64_64KEY = $0100;
var
 Reg: TRegistry;
 bakup: string;
 PatchedFile: string;
begin
 Result:= false;
 PatchedFile:= HiveFile;
 bakup:= PatchedFile+'.bakup';
 Reg:=TRegistry.Create(KEY_ALL_ACCESS);
 Reg.RootKey:=HKEY_LOCAL_MACHINE;
 Reg.Access := KEY_WOW64_64KEY or KEY_ALL_ACCESS;
 if Reg.ReplaceKey(HiveName,PatchedFile,bakup) then Result:= true;
 CopyFile(PChar(PatchedFile),PChar(PatchedFile+'.test'), false); // Для проверки, работает
end;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.09.2017, 19:22
Ответы с готовыми решениями:

RegReplaceKey выдает ошибку
Доброго времени суток всем. Возникла проблема с RegReplaceKey. сохраняю один из подключей ветки...

Запуск приложения из сервиса
Добрый день! Проблема: Есть сервис работающий под SYSTEM, из данного сервиса требуется вызывать...

Запуск приложения из сервиса
Добрый день. Создал свой первый сервис, пытаюсь вызвать из него приложение. Код сервиса...

Запуск приложения из windows сервиса
Здравствуйте! Помогите решить следующую проблему: Написал винд. сервис, который при наступлении...

4
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,135
Записей в блоге: 3
01.10.2017, 07:56 2
Цитата Сообщение от AVolkof Посмотреть сообщение
код работает при запуске приложения от имени администратора, а также из приложения, запущенного через планировщик от имени пользователя "система".
Цитата Сообщение от AVolkof Посмотреть сообщение
Если же ту же программу запустить из сервиса, работающего под учеткой "Local system",
то RegReplaceKey, то возвращает 5 (отказано в доступе).
Цитата Сообщение от AVolkof Посмотреть сообщение
Что винде не нравится?
ты сам ответил на свой вопрос

ЗЫ ты хочешь весь реестр забекапить? зачем?
0
2 / 2 / 0
Регистрация: 02.01.2016
Сообщений: 82
Записей в блоге: 2
01.10.2017, 08:53  [ТС] 3
С бэкапом проблем нет. Иногда возникает проблема с правкой реестра.
Например, Baidu- образные зверьки хорошо себя защищают. Или остатки некорректно
удаленного антивируса (драйвер) убрать нужно.
Я могу выгружать реестр, править его "напрямую", по смещениям в файле менять dword-ы ,
бинарные данные и строки (не меняя длины). А вот с Replace - проблема.
Всякие бесплатные авасты и прочие 360Total тупо не дают ничего делать,
молча запуская мою программу в песочнице. А меня это бесит.
Пытаюсь использовать HiJacking, написал DLL, системная служба её подхватывает, без проблем
запускает мой вспомогательный файл, пишет в "труднодоступные" ключи реестра, а вот на RegReplace
обламывается. Я не могу понять причину.
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
01.10.2017, 09:20 4
Цитата Сообщение от AVolkof Посмотреть сообщение
По идее, привилегии бэкап и ресторе должны быть
У LocalSystem есть эти привилегии, но они по умолчанию отключены.
Чтобы функция RegReplaceKey работала корректно, привилегии сначала нужно включить.

Цитата Сообщение от AVolkof Посмотреть сообщение
Всякие бесплатные авасты и прочие 360Total тупо не дают ничего делать,
молча запуская мою программу в песочнице. А меня это бесит.
Пытаюсь использовать HiJacking, написал DLL, системная служба её подхватывает, без проблем
запускает мой вспомогательный файл, пишет в "труднодоступные" ключи реестра, а вот на RegReplace
обламывается. Я не могу понять причину.
А причина может быть в том, что у антивирусов и прочих программ могут быть установлены
перехватчики реестра - CmRegisterCallback(Ex) и с этим ты ничего не сделаешь.
0
2 / 2 / 0
Регистрация: 02.01.2016
Сообщений: 82
Записей в блоге: 2
01.10.2017, 09:31  [ТС] 5
Привилегии включены.
Ведь код работает, если запускаю "мышкой" "от имени администратора".
Что до перехвата, то тестирую на своей машине, с "касперским", а он не мешает.
Хотел попробовать работать из "доверенного" процесса. Это может сработать,
а может и нет. Но, пока это вообще не работает, если в контексте Local system.
И где написано про такие ограничения я найти не могу.
0
01.10.2017, 09:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.10.2017, 09:31
Помогаю со студенческими работами здесь

OnTouchListener вне приложения (из сервиса)
Здравствуйте. Вопрос такой как слушать нажатия по экрану вне запущенного приложения например из...

Запуск приложения и сервиса после ребута
Реализовал запуск приложения и сервиса (фоном) после ребута устройства. Но как обычно в зоопарке...

Перезагрузка сервиса после выгрузки приложения из памяти
Привет, Есть сервис, запускается из активити, примерно так: startService(new Intent(this,...

Как после старта сервиса сообщить init-процессу об успешном/безуспешном запуске сервиса?
Нужно при после старта сервиса сообщить init-процессу о статусе запуска сервиса, т.е. успешно или с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru