我正在windows服务上工作,我需要在windows服务模式下写入注册表HKCU密钥,但我知道这是不可能的。
HKCU\Software\Microsoft\Windows\CurrentVer\Policies\Explorer\RestrictRun
我需要写这个键,如果我不能用windows服务写这个键,没有管理员权限我怎么写这个键呢?或者这是可能的?
实际上我可以在HKLM上写这个密钥,但它在这个密钥上不起作用。
procedure CreatePolicy(AppName: string);
var
Reg: TRegistry;
Begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey
('Software\Microsoft\Windows\CurrentVersion\Policies\Explorer', True) then
Reg.WriteInteger('RestrictRun', 1);
if Reg.CreateKey('RestrictRun') then
if Reg.OpenKey('RestrictRun', True) then
Reg.WriteString(AppName, AppName);
except
Reg.CloseKey;
Reg.Free;
end;
Reg.CloseKey;
Reg.Free;
end
我的Delphi版本是XE7。
发布于 2018-08-27 03:18:28
您不需要管理员权限即可从用户自己的会话中运行的应用程序访问用户的HKEY_CURRENT_USER
配置单元的大部分部分。但是,非管理员用户对HKCU\Software\Microsoft\Windows\CurrentVersion\Policies
及其子项没有明确的写访问权限。因此,您需要管理员权限才能修改策略。
服务可以使用CreateProcessAsUser()
在特定用户的会话中运行非服务应用程序,前提是该用户已经登录。该服务可以使用WTSEnumerateSessions()
和WTSQuerySessionInformation()
来定位所需的用户会话,然后使用WTSQueryUserToken()
来获取CreateProcessAsUser()
所需的会话的用户令牌。
但是,如果服务想要直接访问用户的HKEY_CURRENT_USER
配置单元,并且该服务不是以该用户的身份运行,则该服务必须首先模拟该用户,然后它可以调用RegOpenCurrentUser()
来获取该用户的HKEY_CURRENT_USER
配置单元的HKEY
句柄。
https://stackoverflow.com/questions/52029161
复制相似问题