Bonjour,
Je cherche à récupérer la liste des répertoires partagés dont un utilisateur a les droits en écriture ou lecture en utilisant WMI à l'aide de dotnet. Les répertoires partagés peuvent être invisibles à l'aide de $.
Merci d'avance
Bonjour,
Je cherche à récupérer la liste des répertoires partagés dont un utilisateur a les droits en écriture ou lecture en utilisant WMI à l'aide de dotnet. Les répertoires partagés peuvent être invisibles à l'aide de $.
Merci d'avance
Regarde du coté de Win32_Share (http://msdn2.microsoft.com/en-us/library/aa394435.aspx) et Win32_ShareToDirectory (http://msdn2.microsoft.com/en-us/library/aa394436.aspx)
Par exemple ce code te donne la liste (nom, chemin, type) des ressources partagées (dossiers, imprimantes, etc.). Le type 0 correspond aux dossiers.
Code C# : 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 using System; using System.Management; using System.Windows.Forms; namespace WMISample { public class MyWMIQuery { public static void Main() { try { ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_Share"); foreach (ManagementObject queryObj in searcher.Get()) { Console.WriteLine("-----------------------------------"); Console.WriteLine("Win32_Share instance"); Console.WriteLine("-----------------------------------"); Console.WriteLine("Name: {0}", queryObj["Name"]); Console.WriteLine("Path: {0}", queryObj["Path"]); Console.WriteLine("Type: {0}", queryObj["Type"]); } } catch (ManagementException e) { MessageBox.Show("An error occurred while querying for WMI data: " + e.Message); } } }
Les règles du forum
Le trio magique : FAQ + Cours + fonction rechercher
Mes articles
Pas de questions par messages privés svp
Software is never finished, only abandoned.
La liste des répertoires ne me pose aucun problème, ce que je souhaite moi c'est de récupérer pour un utilisateur donné la liste des répertoires partagés sur lesquels il a un droit d'écriture ou de lecture. Ou pour un répertoire partagé donné récupéré la liste des utilisateurs ayant des droits dessus.
J'ai ce bout de code en Delphi.net :
Code delphi : 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 type TManagementBObjArray = array of ManagementBaseObject; procedure TForm1.Button1Click(Sender: TObject); var objClass:system.Management.ManagementClass; objShare:ManagementObject; obj2,obj3: ManagementBaseObject; valType:Int64; trust:ManagementBaseObject; begin objClass:=system.Management.managementClass.Create('Win32_Share'); for objShare in objClass.GetInstances do begin valtype:=StrToInt64(objShare['Type'].ToString); if valType=0 then Memo1.Lines.Add(string(objShare['Name'])+' : '+string(objShare['Path'])); end; mPath:=ManagementPath.Create('Win32_LogicalShareSecuritySetting=''CPP$'''); objShare:=ManagementObject.Create(mPath); obj2:=ManagementBaseObject(objShare.InvokeMethod('GetSecurityDescriptor',nil,nil)); obj3:=ManagementBaseObject(obj2['Descriptor']); memo1.Lines.add('ControlFlag : '+obj3['ControlFlags'].ToString); memo1.Lines.add(obj3['DACL'].GetType.ToString); for objShare in system.&Array(obj3['DACL']) do begin trust:=managementBaseObject(objShare['Trustee']); memo1.Lines.Add('Utilisateur : '+trust['Name'].ToString); end; end;
Lorsque j'execute ce code, je récupère bien la liste des répertoires partagés, le descripteur de sécurité mais lorsque j'accède au DACL, je ne récupère qu'un seul élément qui correspond à l'utilisateur 'Tout le monde'. Dois-je régler quelque chose pour récupérer les informations de sécurité pour un utilisateur donné ? Merci d'avance.
Partager