Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Прочитать ключ HKCU из-под сервиса


Автор: djman2006 17.8.2008, 20:33
Как прочитать ключ реестра из HKCU текущего пользователя (не SYSTEM) из сервиса? Или это не возможно?
P.S. Имя текущего пользователя имеется
P.P.S. надо узнать прокси из настроек IE (HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyServer)

Автор: Virtuals 17.8.2008, 21:27
djman2006, в нашем мире все возможно... smile 
1.из сервиса подсаживаем в сессию пользователя процесс, и читаем реестр
2.напрямую подгружаем реестр пользователя к себе, из папки Documents and Settings\user и ищем все чото нужно

Автор: djman2006 17.8.2008, 21:54
Virtuals, к сожалению, первый метод я не реализую  smile 
насчет второго, пытался читать ntuser.dat, но винда не дает доступа к нему  smile

Автор: djman2006 17.8.2008, 22:19
Цитата(djman2006 @ 17.8.2008,  21:54)
Virtuals, к сожалению, первый метод я не реализую  smile 

Есть кое-какие идеи: сервис пишет в HKLM в автозагрузку путь к маленькой программе, которая при загрузке считает с HKCU данные и запишет куда-то в HKLM, откуда сервис уже может читать
Идея очень бредовая но наверное будет работать  smile

Автор: MbIcJIuBcJIyX 18.8.2008, 00:47
хорошая статья по сервисам

http://www.interface.ru/home.asp?artId=16705

немного освещается тема топика, но не сказал бы что решается smile
читать с Настройки и взаимодействие с пользователем

Автор: Virtuals 18.8.2008, 07:11
djman2006, 
Цитата

к сожалению, первый метод я не реализую   

1. это почему же?, или не знаем как? (листаем страницу до самого низу и читаем ссылки которые движек форума любезно нашел для вас smile после слов "А здесь смотрели?")
2. 
Цитата

насчет второго, пытался читать ntuser.dat, но винда не дает доступа к нему 

сказки, только что попробовал, от system подгружать куст в HCU влегкую, даже активного (залогиненого) в данный момент пользователя.

Автор: djman2006 18.8.2008, 11:47
Цитата(Virtuals @ 18.8.2008,  07:11)
сказки, только что попробовал, от system подгружать куст в HCU влегкую, даже активного (залогиненого) в данный момент пользователя.

Может я что то не так делаю ?
Код

  Reg := TRegistry.Create;
  Try
  Reg.RootKey:=HKEY_USERS;
  Reg.LoadKey('UserHive','C:\Documents and Settings\VasyaPupkin\ntuser.dat');
  Finally
    Reg.Free;
  End;

Автор: Virtuals 18.8.2008, 13:36
 smile 
цтрл+клик по LoadKey...
Код

  Result := RegLoadKey(RootKey, PChar(S), PChar(FileName)) = ERROR_SUCCESS;


стрл+ф1
Цитата

Windows NT: The calling process must have the SE_RESTORE_NAME privilege. For more information about privileges, see Privileges. 

ага, где там примерчик с перечслением привелегий,( спасибо Rouse_ )

SeRestorePrivilege - Выключена  smile но очень похоже

GetPrivileges('SeRestorePrivilege'); smile 

ура все получилось smile 

Автор: Mayk 18.8.2008, 14:57
Цитата(djman2006 @  18.8.2008,  00:33 Найти цитируемый пост)
P.S. Имя текущего пользователя имеется

я могу ошибаться, но помему в реестре есть ветка Users не то внутри
Цитата(djman2006 @  18.8.2008,  00:33 Найти цитируемый пост)
SYSTEM
 не то паралелльно с ней. И каждому юзеру соовтествует нечто типа GUID. И вообще говоря HKCU указывает на Users\{GUID}. 

Соответственно зная имя пользователя можно попробовать получить этот GUID и грузить ветку реестра из Users. 

По-моему я это наблюдал в вин2к. правда это было очень давно.

Добавлено через 1 минуту и 10 секунд
а ну собсно я похоже djman2006'а повторил 

Автор: Virtuals 18.8.2008, 16:38
Цитата

я могу ошибаться, но помему в реестре есть ветка Users не то внутриЦитата(djman2006 @  18.8.2008,  00:33 )
SYSTEM

 не то паралелльно с ней. И каждому юзеру соовтествует нечто типа GUID. И вообще говоря HKCU указывает на Users\{GUID}. 


вы правы но только отчасти, реестр пользователя неподгружен в память, пока пользователь незалогинен, (ну представте что бы творилось с компом если бы на нем прописать 10-30 пользователей, а реестр занимает метров 10 и он обязан сидеть в памяти  smile )

но решение есть (смотрите выше), это подгрузить внешний файл реестра в ветку hklm или hku. (в регедите это подгрузить куст  smile , кстати это как раз способ как править чужой внешний реестр)

ну или читать уже подгруженный реестр (если пользователь залогинился) из ветки вида HKU\S-1-5-21-1123561945-73586283-1801674531-...
(а можно совместить эти 2 способа, что даст очень интересные возможности, например контроль изменений в реестре пользователя в процессе работы) smile 

Автор: Virtuals 18.8.2008, 16:54
кстати для способа чтения из реестра по guid профиля, а так же для самовольной подгрузки думаю эта ветка будет интересна

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)