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
Version imprimable
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:
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); } } }
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:
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.