У меня есть приложение-служба, которому необходимо получить доступ к кусту реестра пользователя, чтобы получить лицензию, необходимую для запуска приложения из службы. Как мне это сделать?Получить доступ к кусту реестра HKEY_CURRENT_USER другого пользователя, чем текущий
ответ
Вы можете сделать это более чистым способом с необработанными API-вызовами полностью, но если вы являетесь Windows n00b, как я, скорее всего, у вас есть функциональность, подобная классу TRegistry, для доступа к ключам и значениям один раз ты внутри.
Вот небольшой класс расширения для TRegistry я сделал, чтобы получить доступ HKCU другого пользователя:
unit HKCURegistry_;
interface
uses Registry, Windows, SysUtils;
type
THKCURegistry = class(TRegistry)
private
Function Reg_OpenCurrentUser : Integer;
Function ImpersonateUser(const User, PW : String) : boolean;
public
Function OpenUserRegHive(const User, PW : String) : integer;
Function Revert : boolean;
end;
implementation
function THKCURegistry.ImpersonateUser(const User, PW: String): boolean;
var
TokenHandle : THandle;
begin
Result := LogonUser(pChar(User), pChar(''), pChar(PW), LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, TokenHandle);
if Result then
Result := ImpersonateLoggedOnUser(TokenHandle);
end;
function THKCURegistry.Reg_OpenCurrentUser: Integer;
var
key : HKEY;
begin
Result := RegOpenCurrentUser(KEY_READ, &key);
self.SetCurrentKey(key);
end;
function THKCURegistry.OpenUserRegHive(const User, PW: String): integer;
begin
if ImpersonateUser(User, PW) then begin
Result := Reg_OpenCurrentUser;
end else raise Exception.Create('Unable to log on user ' + User + ' with password ' + PW);
end;
function THKCURegistry.Revert: boolean;
begin
Result := RevertToSelf;
end;
end.
Класс наследует TRegistry и не перегружает ни функциональности BaseClass. OpenUserRegHive является родителем плаката класса, он олицетворяет другого пользователя и предоставляет доступ к его/ее узлу реестра HKCU. Возвратный вызов сбрасывает олицетворение, остальное - вес тяги TRegistry.
Откуда вы получите пароль? –
Вы можете прочитать из HKEY_USERS \ SID
function GetCurrentUserSID:String;
var
objSWbemLocator : OLEVariant;
objWMIService : OLEVariant;
objWbemObjectSet: OLEVariant;
oEnum : IEnumvariant;
oWmiObject : OLEVariant;
iValue : LongWord;
SDummy : AnsiString;
Begin
objSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
objWMIService := objSWbemLocator.ConnectServer('localhost','root\cimv2', '','');
objWbemObjectSet:= objWMIService.ExecQuery('SELECT * FROM Win32_Account','WQL',0);
oEnum := IUnknown(objWbemObjectSet._NewEnum) as IEnumVariant;
{'Name','Domain','SID', Status}
while oEnum.Next(1, oWmiObject, iValue) = 0 do
begin
SDummy:=VarStrNull(oWmiObject.Properties_.Item('SID').Value);
//SDummy:= SDummy + VarStrNull(oWmiObject.Properties_.Item('Domain').Value);
//SDummy:= SDummy + VarStrNull(oWmiObject.Properties_.Item('Status').Value);
oWmiObject:=Unassigned;
end;
Result:= SDummy;
End;
Пожалуйста, объясните свой код немного, чтобы мы могли понять вашу логику. – Shawn
- 1. Доступ к HKEY_CURRENT_USER через Preferences в Java
- 2. Как получить доступ к частям реестра другого пользователя в win XP
- 3. Удаление HKEY_CURRENT_USER Записи реестра (удалить)
- 4. записи реестра HKEY_CURRENT_USER вместо HKEY_USERS
- 5. Удалить значение HKEY_CURRENT_USER при отключении пользователя
- 6. Как получить доступ к данным другого пользователя?
- 7. Перенаправление реестра не бывает для HKEY_CURRENT_USER
- 8. Хранение информации о лицензировании в HKEY_CURRENT_USER Отделение реестра в C#
- 9. System.UnauthorizedAccessException Доступ к разделу реестра
- 10. Доступ к реестра Windows
- 11. Олицетворение для получения пользователя HKEY_CURRENT_USER не работает?
- 12. Получить текущий идентификатор пользователя
- 13. Чтение HKEY_CURRENT_USER под IIS
- 14. Доступ к разделу реестра «HKEY_CURRENT_USER \ Software \ Policies \ Microsoft \ office \ 15.0 \ outlook» отрицается
- 15. доступ к ключу реестра запрещен (ABCpdf)
- 16. GAS - Доступ к календарю для другого пользователя
- 17. Доступ к файлам пользователя с другого аккаунта
- 18. Доступ запрещен для реестра
- 19. Прочитайте текущий реестр пользователя и данные профиля из службы Windows
- 20. Метеор: как получить доступ к данным другого пользователя?
- 21. Изменение реестра другого пользователя через командные файлы
- 22. Не удается записать в HKEY_CURRENT_USER раздел реестра на C#
- 23. Получить текущий идентификатор пользователя
- 24. Не удалось получить доступ к реестру с использованием расширения пользователя
- 25. Сравнение HKEY_USER и HKEY_CURRENT_USER
- 26. Как изменить конкретный параметр реестра для другого пользователя в PowerShell
- 27. Как уничтожить сеанс другого, чем текущий пользователь в asp.net
- 28. Доступ к разделу реестра «Глобальный» отрицается
- 29. Как получить доступ к DAL другого модуля?
- 30. Доступ к объекту реестра в приложении Silverlight
содержание _HKEY_CURRENT_USER_ создается во время входа пользователя (это не постоянные). Если вы хотите, чтобы постоянное значение попыталось получить его из _HKEY_LOCAL_MACHINE_ или _HKEY_USERS \% USER_SID% _. – CristiFati
Почему учетная запись службы не может быть лицензирована для приложения напрямую? –