Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Donner les super pouvoirs à un service windows HELP!!!!!!!

12 réponses
Avatar
Vincent
Bonjour,

Cela fait presque 2 semaines que je rame sur un problème.

J'ai crée un service windows qui surveille les clés USB insérée sur un PC
pour des raisons de sécurité, pour que sur ce PC ne soient utilisée
que des lés USB bien identifée.

Quand une personne insere une clé USB, si la clé n'a pas le numréo qui va
bien, le service windows deconnecte automatiquement la clé.

Elas, le service windows n'arrive pas à deconnecter la clé ( problème de
droit semble t'il ?)
Toutefois le même programme dans une appli ( lancè avec le compte de
l'utilisateur ) arrive parfaitement à déconnecter la clé.

Comment donner tous les pouvoirs à mon service ? Que fais t'on ds ces cas là
normalement ?

Le service windows peut il prendre les droits de l'utilisateur ?
Il ne faut pas que l'utilisateur puisse stopper le service .....

Je cherche des exemples précis, car j'ai lu pas mal de truc sur internet ,
mais rien n'est clair ....

Merci d'avance

Vincent

10 réponses

1 2
Avatar
Paul Bacelar
Moi, je tenterais la dll injection.

C'est le fait de charger automatiquement une dll dès le lancement d'un
programme.

Ta dll aura donc les droits de l'utilisateur du programme.

La dll injection, c'est ajouter un chemin qui va bien dans

HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsNTCurrentVersionWindowsAppInit_DLLs
--
Paul Bacelar
MVP VC++


"Vincent" wrote in message
news:%23v2U8uE%
Bonjour,

Cela fait presque 2 semaines que je rame sur un problème.

J'ai crée un service windows qui surveille les clés USB insérée sur un PC
pour des raisons de sécurité, pour que sur ce PC ne soient utilisée
que des lés USB bien identifée.

Quand une personne insere une clé USB, si la clé n'a pas le numréo qui va
bien, le service windows deconnecte automatiquement la clé.

Elas, le service windows n'arrive pas à deconnecter la clé ( problème de
droit semble t'il ?)
Toutefois le même programme dans une appli ( lancè avec le compte de
l'utilisateur ) arrive parfaitement à déconnecter la clé.

Comment donner tous les pouvoirs à mon service ? Que fais t'on ds ces cas
là normalement ?

Le service windows peut il prendre les droits de l'utilisateur ?
Il ne faut pas que l'utilisateur puisse stopper le service .....

Je cherche des exemples précis, car j'ai lu pas mal de truc sur internet ,
mais rien n'est clair ....

Merci d'avance

Vincent



Avatar
Vincent
Merci pour tes reponses,
Elas je n'ai pas bien compris.
Pourquoi ne peut on pas donner des droits supérieur à un service windows ?
La dll injection ?

Merci

Vincent


"Paul Bacelar" a écrit dans le message
de news: uZ8iGhH%
Moi, je tenterais la dll injection.

C'est le fait de charger automatiquement une dll dès le lancement d'un
programme.

Ta dll aura donc les droits de l'utilisateur du programme.

La dll injection, c'est ajouter un chemin qui va bien dans

HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsNTCurrentVersionWindowsAppInit_DLLs
--
Paul Bacelar
MVP VC++


"Vincent" wrote in message
news:%23v2U8uE%
Bonjour,

Cela fait presque 2 semaines que je rame sur un problème.

J'ai crée un service windows qui surveille les clés USB insérée sur un PC
pour des raisons de sécurité, pour que sur ce PC ne soient utilisée
que des lés USB bien identifée.

Quand une personne insere une clé USB, si la clé n'a pas le numréo qui va
bien, le service windows deconnecte automatiquement la clé.

Elas, le service windows n'arrive pas à deconnecter la clé ( problème de
droit semble t'il ?)
Toutefois le même programme dans une appli ( lancè avec le compte de
l'utilisateur ) arrive parfaitement à déconnecter la clé.

Comment donner tous les pouvoirs à mon service ? Que fais t'on ds ces cas
là normalement ?

Le service windows peut il prendre les droits de l'utilisateur ?
Il ne faut pas que l'utilisateur puisse stopper le service .....

Je cherche des exemples précis, car j'ai lu pas mal de truc sur internet
, mais rien n'est clair ....

Merci d'avance

Vincent







Avatar
Arnaud Debaene
"Vincent" a écrit dans le message de news:
%23v2U8uE%
Bonjour,

Cela fait presque 2 semaines que je rame sur un problème.

J'ai crée un service windows qui surveille les clés USB insérée sur un PC
pour des raisons de sécurité, pour que sur ce PC ne soient utilisée
que des lés USB bien identifée.

Quand une personne insere une clé USB, si la clé n'a pas le numréo qui va
bien, le service windows deconnecte automatiquement la clé.

Elas, le service windows n'arrive pas à deconnecter la clé ( problème de
droit semble t'il ?)



Ca m'étonnerait beaucoup : Un service tournant sous le compte system a plus
de droits que tout les utilisateurs, administrateurs compris.

Tu utilises quelle API pour déconnecter ta clé, et quel est le code d'erreur
en retour?

Arnaud
MVP - VC
Avatar
Vincent
Le service ne semble pas avoir tous les droits !

j'utilise CM_Request_Device_Eject

Je n'ai plus l'erreur en tête, je te l'indique dès que possible, si tu as
une idée ..... je suis preneur

Vincent


"Arnaud Debaene" a écrit dans le message de
news: %23TRu4UM%

"Vincent" a écrit dans le message de news:
%23v2U8uE%
Bonjour,

Cela fait presque 2 semaines que je rame sur un problème.

J'ai crée un service windows qui surveille les clés USB insérée sur un PC
pour des raisons de sécurité, pour que sur ce PC ne soient utilisée
que des lés USB bien identifée.

Quand une personne insere une clé USB, si la clé n'a pas le numréo qui va
bien, le service windows deconnecte automatiquement la clé.

Elas, le service windows n'arrive pas à deconnecter la clé ( problème de
droit semble t'il ?)



Ca m'étonnerait beaucoup : Un service tournant sous le compte system a
plus de droits que tout les utilisateurs, administrateurs compris.

Tu utilises quelle API pour déconnecter ta clé, et quel est le code
d'erreur en retour?

Arnaud
MVP - VC




Avatar
didier
Vincent a écrit :
Le service ne semble pas avoir tous les droits !

j'utilise CM_Request_Device_Eject

Je n'ai plus l'erreur en tête, je te l'indique dès que possible, si tu as
une idée ..... je suis preneur

Vincent


"Arnaud Debaene" a écrit dans le message de
news: %23TRu4UM%

"Vincent" a écrit dans le message de news:
%23v2U8uE%

Bonjour,

Cela fait presque 2 semaines que je rame sur un problème.

J'ai crée un service windows qui surveille les clés USB insérée sur un PC
pour des raisons de sécurité, pour que sur ce PC ne soient utilisée
que des lés USB bien identifée.

Quand une personne insere une clé USB, si la clé n'a pas le numréo qui va
bien, le service windows deconnecte automatiquement la clé.

Elas, le service windows n'arrive pas à deconnecter la clé ( problème de
droit semble t'il ?)



Ca m'étonnerait beaucoup : Un service tournant sous le compte system a
plus de droits que tout les utilisateurs, administrateurs compris.

Tu utilises quelle API pour déconnecter ta clé, et quel est le code
d'erreur en retour?

Arnaud
MVP - VC









L'exeption levée par CM_Request_Device_Eject est : ordinateur distant
non disponible .... !!! ????

Je suis sous windows 2000, en fait un service windows lance un
programme. C'est ce programme qui effectue le CM_Request_Device_Eject

Si je lance directement le programme, je n'ai aucun problème.

Vincent
Avatar
Paul Bacelar
Faire une Dll injection via la base de registre, c'est mettre le chemin vers
une dll dans la clé
HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsNTCurrentVersionWindowsAppInit_DLLs



Si une dll est ajoutée à cette clé, alors elle sera chargée dans tous les
processus. Si tu mets des statiques dans la dll, leurs constructeurs seront
automatiquement appelés, le point d'entré DllMain sera lui aussi appelé dès
le chargement.

Si tu crées une dll qui vérifie la clé USB est valide, tu pourras éjecter la
clé dans le contexte du programme qui a découvert la clé.

Tu n'auras donc plus besoin de services et les seuls utilisateurs qui auront
le droit de désactiver cette fonctionnalité seront ceux qui auront les
droits sur la clé de registre ci-dessus.
--
Paul Bacelar
MVP VC++


"Vincent" wrote in message
news:uygiC4H%

Merci pour tes reponses,
Elas je n'ai pas bien compris.
Pourquoi ne peut on pas donner des droits supérieur à un service windows ?
La dll injection ?

Merci

Vincent


"Paul Bacelar" a écrit dans le message
de news: uZ8iGhH%
Moi, je tenterais la dll injection.

C'est le fait de charger automatiquement une dll dès le lancement d'un
programme.

Ta dll aura donc les droits de l'utilisateur du programme.

La dll injection, c'est ajouter un chemin qui va bien dans

HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsNTCurrentVersionWindowsAppInit_DLLs
--
Paul Bacelar
MVP VC++


"Vincent" wrote in message
news:%23v2U8uE%
Bonjour,

Cela fait presque 2 semaines que je rame sur un problème.

J'ai crée un service windows qui surveille les clés USB insérée sur un
PC pour des raisons de sécurité, pour que sur ce PC ne soient utilisée
que des lés USB bien identifée.

Quand une personne insere une clé USB, si la clé n'a pas le numréo qui
va bien, le service windows deconnecte automatiquement la clé.

Elas, le service windows n'arrive pas à deconnecter la clé ( problème de
droit semble t'il ?)
Toutefois le même programme dans une appli ( lancè avec le compte de
l'utilisateur ) arrive parfaitement à déconnecter la clé.

Comment donner tous les pouvoirs à mon service ? Que fais t'on ds ces
cas là normalement ?

Le service windows peut il prendre les droits de l'utilisateur ?
Il ne faut pas que l'utilisateur puisse stopper le service .....

Je cherche des exemples précis, car j'ai lu pas mal de truc sur internet
, mais rien n'est clair ....

Merci d'avance

Vincent











Avatar
Arnaud Debaene
"Vincent" a écrit dans le message de news:
euhIvkM%

Le service ne semble pas avoir tous les droits !

j'utilise CM_Request_Device_Eject

Je n'ai plus l'erreur en tête, je te l'indique dès que possible, si tu as
une idée ..... je suis preneur



Comme d'abitude, la réponse est dans la doc si on prend la peine de la lire
;-)

Je cite
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/DevInst_r/hh/DevInst_r/cfgmgrfn_2c8cc2aa-56fe-4ab3-8063-0db0dcbc3098.xml.asp :
"If the device's CM_DEVCAP_DOCKDEVICE capability is not set (the device is
not a "dock" device), and if the calling process is either not interactive
or is running in a multi-user environment in a session not attached to the
physical console (such as a remote Terminal Services session), callers of
this function must have SeLoadDriverPrivilege."

C'est exactement ton cas de figure : Comme tu es dans un service, tu ne
tournes pas dans le cadre de la console physique, donc il faut que tu
actives le privilège SeLoadDriverPrivilege : Appelles AdjustTokenPrivileges
avant pour te donner les droits adéquats.
Pour une très bonne discussion sur les mécanismes des privilèges et comment
les manipuler depuis .NET, voire
http://msdn.microsoft.com/msdnmag/issues/05/03/TokenPrivileges/

Arnaud
MVP - VC
Avatar
Vincent
Merci pour ces infos, j'avais déjà visité ton 1er lien, mais je n'avais pas
vu ce passage ( mon anglais est approximatif ).
Il me faut surtout trouver comment actives le privilège
SeLoadDriverPrivilege ( les exemples sont rares )
Je vais fouiller

Encore merci

Vincent


"Arnaud Debaene" a écrit dans le message de
news: uSNOpxS%

"Vincent" a écrit dans le message de news:
euhIvkM%

Le service ne semble pas avoir tous les droits !

j'utilise CM_Request_Device_Eject

Je n'ai plus l'erreur en tête, je te l'indique dès que possible, si tu as
une idée ..... je suis preneur



Comme d'abitude, la réponse est dans la doc si on prend la peine de la
lire ;-)

Je cite
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/DevInst_r/hh/DevInst_r/cfgmgrfn_2c8cc2aa-56fe-4ab3-8063-0db0dcbc3098.xml.asp :
"If the device's CM_DEVCAP_DOCKDEVICE capability is not set (the device is
not a "dock" device), and if the calling process is either not interactive
or is running in a multi-user environment in a session not attached to the
physical console (such as a remote Terminal Services session), callers of
this function must have SeLoadDriverPrivilege."

C'est exactement ton cas de figure : Comme tu es dans un service, tu ne
tournes pas dans le cadre de la console physique, donc il faut que tu
actives le privilège SeLoadDriverPrivilege : Appelles
AdjustTokenPrivileges avant pour te donner les droits adéquats.
Pour une très bonne discussion sur les mécanismes des privilèges et
comment les manipuler depuis .NET, voire
http://msdn.microsoft.com/msdnmag/issues/05/03/TokenPrivileges/

Arnaud
MVP - VC




Avatar
Vincent
J'ai activé SeLoadDriverPrivilege et même SeUndock .... rien n'y fait
j'ai toujours le message : ordinateur distant non disponible ça m'intrigue.

J'ai testé le changement de user, quand le service lance le serveur, par
programme je donne le login et mot de passe
avec lesquels la session est ouverte ..... et miracle la clé est éjectée

Y a bien un truc ??? je vais pas abandonner ce projet !

ordinateur distant non disponible : y a forcement une raison, faut passer
un contexte ???

......

help

Merci
Vincent

ps : le coté positif est que j'apprend plein de truc, y a que mon chef qui
fait la gueule



"Vincent" a écrit dans le message de news:
%23MDQ1%23T%
Merci pour ces infos, j'avais déjà visité ton 1er lien, mais je n'avais
pas vu ce passage ( mon anglais est approximatif ).
Il me faut surtout trouver comment actives le privilège
SeLoadDriverPrivilege ( les exemples sont rares )
Je vais fouiller

Encore merci

Vincent


"Arnaud Debaene" a écrit dans le message de
news: uSNOpxS%

"Vincent" a écrit dans le message de
news: euhIvkM%

Le service ne semble pas avoir tous les droits !

j'utilise CM_Request_Device_Eject

Je n'ai plus l'erreur en tête, je te l'indique dès que possible, si tu
as une idée ..... je suis preneur



Comme d'abitude, la réponse est dans la doc si on prend la peine de la
lire ;-)

Je cite
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/DevInst_r/hh/DevInst_r/cfgmgrfn_2c8cc2aa-56fe-4ab3-8063-0db0dcbc3098.xml.asp :
"If the device's CM_DEVCAP_DOCKDEVICE capability is not set (the device
is not a "dock" device), and if the calling process is either not
interactive or is running in a multi-user environment in a session not
attached to the physical console (such as a remote Terminal Services
session), callers of this function must have SeLoadDriverPrivilege."

C'est exactement ton cas de figure : Comme tu es dans un service, tu ne
tournes pas dans le cadre de la console physique, donc il faut que tu
actives le privilège SeLoadDriverPrivilege : Appelles
AdjustTokenPrivileges avant pour te donner les droits adéquats.
Pour une très bonne discussion sur les mécanismes des privilèges et
comment les manipuler depuis .NET, voire
http://msdn.microsoft.com/msdnmag/issues/05/03/TokenPrivileges/

Arnaud
MVP - VC








Avatar
Paul Bacelar
Et faire de la dll injection, il y aurait plus de problème ;-).
--
Paul Bacelar
MVP VC++

"Vincent" wrote in message
news:%2371c3wg%
J'ai activé SeLoadDriverPrivilege et même SeUndock .... rien n'y fait
j'ai toujours le message : ordinateur distant non disponible ça
m'intrigue.

J'ai testé le changement de user, quand le service lance le serveur, par
programme je donne le login et mot de passe
avec lesquels la session est ouverte ..... et miracle la clé est éjectée

Y a bien un truc ??? je vais pas abandonner ce projet !

ordinateur distant non disponible : y a forcement une raison, faut passer
un contexte ???

......

help

Merci
Vincent

ps : le coté positif est que j'apprend plein de truc, y a que mon chef qui
fait la gueule



"Vincent" a écrit dans le message de news:
%23MDQ1%23T%
Merci pour ces infos, j'avais déjà visité ton 1er lien, mais je n'avais
pas vu ce passage ( mon anglais est approximatif ).
Il me faut surtout trouver comment actives le privilège
SeLoadDriverPrivilege ( les exemples sont rares )
Je vais fouiller

Encore merci

Vincent


"Arnaud Debaene" a écrit dans le message de
news: uSNOpxS%

"Vincent" a écrit dans le message de
news: euhIvkM%

Le service ne semble pas avoir tous les droits !

j'utilise CM_Request_Device_Eject

Je n'ai plus l'erreur en tête, je te l'indique dès que possible, si tu
as une idée ..... je suis preneur



Comme d'abitude, la réponse est dans la doc si on prend la peine de la
lire ;-)

Je cite
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/DevInst_r/hh/DevInst_r/cfgmgrfn_2c8cc2aa-56fe-4ab3-8063-0db0dcbc3098.xml.asp :
"If the device's CM_DEVCAP_DOCKDEVICE capability is not set (the device
is not a "dock" device), and if the calling process is either not
interactive or is running in a multi-user environment in a session not
attached to the physical console (such as a remote Terminal Services
session), callers of this function must have SeLoadDriverPrivilege."

C'est exactement ton cas de figure : Comme tu es dans un service, tu ne
tournes pas dans le cadre de la console physique, donc il faut que tu
actives le privilège SeLoadDriverPrivilege : Appelles
AdjustTokenPrivileges avant pour te donner les droits adéquats.
Pour une très bonne discussion sur les mécanismes des privilèges et
comment les manipuler depuis .NET, voire
http://msdn.microsoft.com/msdnmag/issues/05/03/TokenPrivileges/

Arnaud
MVP - VC












1 2