Liste des partages d'une machine

Contenu du snippet

Ce code permettra de comprendre le fonctionnement de NetShareEnum.
Il permet de lister les partages sur la machine locale.
En le comprenant puis le modifiant vous pourrez afficher les informations que vous voulez sur les partages de votre machine locale ou d'une machine distante.

Source / Exemple :


using System;
using System.Net;
using System.Text.RegularExpressions;
using System.Runtime.InteropServices;
using System.Text;

public class MyShared{

	[DllImport("Netapi32.dll", CharSet=CharSet.Unicode)]
	private static extern int NetShareEnum(
     		String ServerName, //nom du serveur
     		int level,         // Paramètre permettant d'indiquer quelles informations on veut sur les partages
     		ref IntPtr bufPtr, //pointeur sur le buffer reçevant les données
     		uint prefmaxlen,   //taille des données retournées
     		ref int entriesread, 
     		ref int totalentries,
     		ref int resume_handle
     	);

	[DllImport("Netapi32.dll", SetLastError=true)]
	static extern int NetApiBufferFree(IntPtr Buffer);

	public struct SHARE_INFO_2{
		[MarshalAs(UnmanagedType.LPWStr)]
     		public string shi2_netname;
    		public uint shi2_type;
    		[MarshalAs(UnmanagedType.LPWStr)]
     		public string shi2_remark;
     		public Int32 shi2_permissions;
     		public Int32 shi2_max_uses;
     		public Int32 shi2_current_uses;
     		[MarshalAs(UnmanagedType.LPWStr)]
    		 public string shi2_path;
     		[MarshalAs(UnmanagedType.LPWStr)]
     		public string shi2_passwd;
    	}

	public static void Main () {

    		String Servername = null; //null indique que les informations concerneront la machine locale
    		int level = 2; 		 //la valeur 2 --> liée à SHARE_INFO_2 
    		uint prefmaxlen = 368880;
    		int entriesread=0;
    		int totalentries=0;
    		int resume_handle=0;
    		IntPtr bufPtr =IntPtr.Zero;

    		int ret= NetShareEnum(Servername,level,ref bufPtr,prefmaxlen,ref entriesread,ref totalentries,ref resume_handle);
    		IntPtr currentPtr = bufPtr;
    		int nStructSize = Marshal.SizeOf(typeof(SHARE_INFO_2));

    		for( int i =0; i< entriesread;i++){

            		SHARE_INFO_2 shio = (SHARE_INFO_2)Marshal.PtrToStructure(currentPtr,typeof(SHARE_INFO_2));
            		Console.Out.WriteLine("Partage: "+shio.shi2_netname+"\n");
			currentPtr = new IntPtr(currentPtr.ToInt32() + nStructSize);
		}
   
   
	NetApiBufferFree(bufPtr);

    }

}

Conclusion :


Pour plus d'informations : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/stgmgmt/fs/netshareenum.asp

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.