Salut,
j'ai un programme en csharp pour démarrer et arrêter un service windows. Le problème c'est que suivant les droits utilisateurs je ne peux pas arrêter / démarrer ce service.
Avez vous des infos la dessus ? des exemples ?
Merci à tous
A ++
Salut,
j'ai un programme en csharp pour démarrer et arrêter un service windows. Le problème c'est que suivant les droits utilisateurs je ne peux pas arrêter / démarrer ce service.
Avez vous des infos la dessus ? des exemples ?
Merci à tous
A ++
Salut,
Tu dois utiliser l'impersonation pour donner les privileges necessaires a l'utilisateur lambda afin qu'il puisse acceder au service. Pour cela tu peux utiliser le code suivant pour creer une classe qui te permettra d'effectuer l'impersonation :
(desole le code est en vb, mais tu peux utiliser un convertisseur c#)
Ensuite tu l'utilises comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 Imports System.Security.Principal Imports System.Runtime.InteropServices Public Class ImpersonationUtil Public Shared Function Impersonate(ByVal logon As String, ByVal password As String, ByVal domain As String) As Boolean Dim tempWindowsIdentity As WindowsIdentity Dim token As IntPtr = IntPtr.Zero Dim tokenDuplicate = IntPtr.Zero If LogonUser(logon, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, token) <> 0 Then If DuplicateToken(token, 2, tokenDuplicate) <> 0 Then tempWindowsIdentity = New WindowsIdentity(CType(tokenDuplicate, IntPtr)) impersonationContext = tempWindowsIdentity.Impersonate If impersonationContext IsNot Nothing Then Return True End If End If Return False End Function Public Shared Sub UnImpersonate() If impersonationContext IsNot Nothing Then impersonationContext.Undo() End Sub <DllImport("advapi32.dll", CharSet:=CharSet.Unicode)> _ Public Shared Function LogonUser(ByVal lpszUsername As String, ByVal lpszDomain As String, ByVal lpszPassord As String, ByVal dwLogonType As Integer, ByVal dwLogonProvider As Integer, ByRef phToken As IntPtr) As Integer End Function <DllImport("advapi32.dll", CharSet:=CharSet.Auto, setlasterror:=True)> _ Public Shared Function DuplicateToken(ByVal hToken As IntPtr, ByVal impersonationLevel As Integer, ByRef hNewToken As IntPtr) As Integer End Function Private Const LOGON32_LOGON_INTERACTIVE As Integer = 2 Private Const LOGON32_LOGON_NETWORK_CLEARTEXT As Integer = 4 Private Const LOGON32_PROVIDER_DEFAULT As Integer = 0 Private Shared impersonationContext As WindowsImpersonationContext End Class
Lorsque l'utilisateur a termine d'utiliser le service n'oublie pas d'arreter l'impersonation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part ImpersonationUtil.Impersonate("Username", "Password", "Domain")
Voila
Code : Sélectionner tout - Visualiser dans une fenêtre à part ImpersonationUtil.UnImpersonate()
Merci pour ta réponse,
je vais regarder tout ceci.
Juste un détail encore: les paramètres ("Username", "Password", "Domain") sont stockés dans un fichier ini de config alors ?
ce qui voudrait dire que tout le monde peut les lire ?
Merci
Ils peuvent etre stockes ou tu veux, pas forcement dans un fichier. Personnellement je les ais mis dans le code car ils ne changeront jamais (bon c'est pas super conseille non plus..).
Encore une petite question, je sais je suis chiant
La dll advapi32.dll que tu importes, elle est présente partout ? C'est quoi au juste ?
merci
bonsoir
c'est une bibliothèque qui sert pour les appels de service, registre, accès ,sécurité....
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager