OVH Cloud OVH Cloud

WNetAddConnection2 et LocalSystem

3 réponses
Avatar
frederic.viollet
Bonjour,

J'ai un petit souci avec l'utilisation de WNetAddConnection2 dans un
service tournant en tant que LocalSystem...
Voici la situation:
J'ai un serveur que j'appellerais "machineA" sur lequel j'ai activé le
compte Invité sans mot de passe. Je partage alors un répertoire de
machineA. J'appelle ce point de montage "montageA".
Sur une station que j'appellerais "machineB", j'ai un service qui
tourne en tant que LocalSystem.
Je souhaiterais que le service puisse monter la ressource
\\machineA\montageA. J'utilise pour celà la fonction
WNetAddConnection2 que j'appelle avec les paramètres suivants:

NETRESOURCE NetResource;

NetResource.dwType = RESOURCETYPE_ANY;
NetResource.lpLocalName = NULL;
NetResource.lpRemoteName = "\\\\machineA\\montageA";
NetResource.lpProvider = NULL;

ret = WNetAddConnection2(
&NetResource,
NULL,
NULL,
0);

Le problème, c'est que le WNetAddConnection2 me renvoie
systématiquement l'erreur ERROR_ACCESS_DENIED lorsqu'elle est appelée
par le Service alors que si je me log sur machineB en tant que "Toto"
et que j'execute la même séquence de code (en tant que Toto donc), ça
marche très bien...

Quelqu'un aurait-il une idée??

Merci d'avance...

Fred

3 réponses

Avatar
Remi Thomas
"Fred" wrote
Bonjour,

J'ai un petit souci avec l'utilisation de WNetAddConnection2 dans un
service tournant en tant que LocalSystem...
Voici la situation:
J'ai un serveur que j'appellerais "machineA" sur lequel j'ai activé le
compte Invité sans mot de passe. Je partage alors un répertoire de
machineA. J'appelle ce point de montage "montageA".
Sur une station que j'appellerais "machineB", j'ai un service qui
tourne en tant que LocalSystem.
Je souhaiterais que le service puisse monter la ressource
machineAmontageA. J'utilise pour celà la fonction
WNetAddConnection2 que j'appelle avec les paramètres suivants:

NETRESOURCE NetResource;

NetResource.dwType = RESOURCETYPE_ANY;
NetResource.lpLocalName = NULL;
NetResource.lpRemoteName = "\machineAmontageA";
NetResource.lpProvider = NULL;

ret = WNetAddConnection2(
&NetResource,
NULL,
NULL,
0);

Le problème, c'est que le WNetAddConnection2 me renvoie
systématiquement l'erreur ERROR_ACCESS_DENIED lorsqu'elle est appelée
par le Service alors que si je me log sur machineB en tant que "Toto"
et que j'execute la même séquence de code (en tant que Toto donc), ça
marche très bien...

Quelqu'un aurait-il une idée??

Merci d'avance...

Fred



LocalSystem ne peut pas faire de réseau.
Il faut transformer ton service pour qu'il tourne sous un compte
utilisateur.

Rémi
Avatar
Arnaud Debaene
Fred wrote:
Bonjour,

J'ai un petit souci avec l'utilisation de WNetAddConnection2 dans un
service tournant en tant que LocalSystem...



C'est normal et voulu : le compte System n'a pas accès aux ressources
réseau. La solution consiste à faire tourner ton service sous un compte
dédié qui dispose des droits adéquats, ou bien, alors d'impersonnifier un
tel compte dans le code de ton service (typiquement, si ton service accède à
cette ressource réseau suite à une requête client, il est de bon ton que le
service impersonnifie le client en question).

Arnaud
Avatar
Fred
Arnaud Debaene a écrit :
Fred wrote:

Bonjour,

J'ai un petit souci avec l'utilisation de WNetAddConnection2 dans un
service tournant en tant que LocalSystem...




C'est normal et voulu : le compte System n'a pas accès aux ressources
réseau. La solution consiste à faire tourner ton service sous un compte
dédié qui dispose des droits adéquats, ou bien, alors d'impersonnifier un
tel compte dans le code de ton service (typiquement, si ton service accède à
cette ressource réseau suite à une requête client, il est de bon ton que le
service impersonnifie le client en question).

Arnaud





Tout d'abord, merci pour vos réponses...
En fait, le service en question execute des setup (qui peuvent se
trouver sur le montage réseau) pour maintenir la machine à jour, et
c'est pour ça que j'avais utilisé le compte LocalSystem. J'ai besoin que
le Service ait toujours le droit d'installer des composants sur la
machine...
Existe-t-il un compte qui aurait les droits d'installation et accès au
réseau?

Merci encore.

Fred