[quoted text, click to view] > "Viviana Vc":
>> Actually I have a LSP (layered service provider) dll that is loaded by
>> all services and I noticed that for services, in my dll trying to read
>> the HKCU fails, and wasn't sure if this is a general rule for all
>> services or the behaviour depends on how the service is written ...
>> Seems that it can be different depends if the service is doing a
>> LoadUserProfile() call before my dll is used right?
After the answer of Arnaud Debaene I have done some test using the following
environment:
Windows XP SP2, Microsoft .NET Framework 1.1 SP1, a test service written in
C#
I have tried the service with Local System, Local Service, Network Service
and a custom, non-administrative user.
In all of these cases I was able to access HKCU for read and write as well.
And I'm sure that the Framework isn't using LoadUserProfile at all.
"Sten Westerback":
[quoted text, click to view] > Sure "environment" depends on what is done before your code is run. :)
>
> The default account used for Services ("LocalSystem") simply doens't
> have a user profile so no HKCU link is created to a new place in
> HKU. (I'm not fully sure but the HKCU may be linked to HKU\.DEFAULT
> by default).
>
> So either you load an suitable profile for LocalSystem (making sure the
> local account can access the file), define a normal account as the service
> account or, most properly, use keys somewhere under HKLM or most
> properly HKLM\SYSTEM\CurrentControlSet\Services\MyService\Parameters
The Local System account has a HKCU key and it is the same as
HKEY_USERS\.DEFAULT.
For more information please read my reply to Arnaud Debaene's message.
According to Platform SDK Documentation LoadUserProfile can be called only
by administrators or system. It is intendet to be used by a service if you
are using a high privileged account (eg. Local System) and want to
impersonate to a low privileged account. In this case the profile of the
impersonated account is not loaded and you have to load it using
LoadUserProfile to access HKCU for example. But you have to load it as Local
System.
I'm sure if a service is executed it has a HKCU. You problem may be caused
because the underlaying service is doing impersonation without loading the
user profile. But I cannot tell you anything else wthout the analisis of the
wole soultion...
I advise you the same as Sten to use a registry key in HKLM, the mentioned
Parametes subkey is a common solution.
Sincerely,
Kornél