begin process at 2010 02 10 12:36:29
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C#

 > 

Archives

 > 

Réseau / Internet

 > 

Partages Réseau


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Partages Réseau

samedi 19 novembre 2005 à 19:35:35 | Partages Réseau

mamounette

Salut,
j'aurai aimé savoir de quelle façon je pourrai lister les différents partages présents sur les machines d'un réseau en C#.
J'avais pensé à récupérer les adresses ip des machines se trouvant sur le même réseau que la machine sur laquelle on lance l'application mais après comment trouver les dossiers partagés ?

Merci d'avance.

samedi 19 novembre 2005 à 19:53:39 | Re : Partages Réseau

coq

Administrateur CodeS-SourceS
Salut,

Tu dois te servir de la méthode NetShareEnum des API.



/*
coq
MVP Visual C#
*/
dimanche 20 novembre 2005 à 00:09:19 | Re : Partages Réseau

mamounette

Merci !
Par contre quelle(s) directive(s) utiliser ?  Car  à l'éxécution de mon programme, l'erreur suivante m'est renvoyée:

"The type or namespace name 'DWORD' could not be found (are your missing a using directive or an assemblye reference ?)"

Il en est de même pour LPTSRT, TCHAR et NET_API_STATUS.

J'ai beau chercher sur le net, je ne trouve que les librairies à inclure en C++ (include <lm.h>) mais jamais la correspondance en C#.

dimanche 20 novembre 2005 à 01:29:21 | Re : Partages Réseau

mamounette

Finalement , j'ai utilisé ça:

[DllImport("Netapi32.dll", CharSet=CharSet.Unicode)]
private static extern int NetShareEnum(
     StringBuilder ServerName,
     int level,
     ref IntPtr bufPtr,
     uint prefmaxlen,
     ref int entriesread,
     ref int totalentries,
     ref int resume_handle
     );

avec la diretive using System.Text.

Il me reste à résoudre le problème du type TCHAR

dimanche 20 novembre 2005 à 06:55:35 | Re : Partages Réseau

Lutinore

Administrateur CodeS-SourceS
Salut, ton prototype managé est correct, quel est le problème avec le type TCHAR ?

Le type TCHAR corresponds à un char sur 1 octect dans un environnement Ansi et 2 octects dans un environnement Unicode, dans l'appel de platforme pour remplacer un tableau ou un pointeur de type TCHAR tu peux utiliser le type string ou StringBuilder c'est le paramètre CharSet de l'attribt DllImport qui definit comment marshaler le type char.
dimanche 20 novembre 2005 à 11:17:31 | Re : Partages Réseau

coq

Administrateur CodeS-SourceS
D'ailleurs ici tu peux mettre string pour ServerName, comme il est uniquement "In".



/*
coq
MVP Visual C#
*/
dimanche 20 novembre 2005 à 13:34:58 | Re : Partages Réseau

APWEB

Membre Club
Regarde à cette adresse il y a un example d'utilisation  en C"#  : http://pinvoke.net/default.aspx/netapi32.NetShareEnum

AP

dimanche 20 novembre 2005 à 13:40:57 | Re : Partages Réseau

mamounette

Voici finalement mon code .
Tout ceci s'exécute bien, il n'y a plus d'erreurs , cependant, rien ne s'affiche !!!


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




public class share{

[DllImport("Netapi32.dll", CharSet=CharSet.Unicode)]
private static extern int NetShareEnum(
     String ServerName,
     int level,
     ref IntPtr bufPtr,
     //uint prefmaxlen,
     ref int entriesread,
     ref int totalentries,
     ref int resume_handle
     );


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;
    int level = 2;
    //uint prefmaxlen =MAX_PREFERRED_LENGTH;
    int entriesread=0;
    int totalentries=0;
    int resume_handle=0;
    IntPtr bufPtr =IntPtr.Zero;

    int ret= NetShareEnum(Servername,level,ref bufPtr,ref entriesread,ref totalentries,ref resume_handle);
   

    IntPtr currentPtr = bufPtr;
    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");
       
        }
   
   
   

    }

}
dimanche 20 novembre 2005 à 13:59:02 | Re : Partages Réseau

coq

Administrateur CodeS-SourceS
Normal : pas mal la mise en commentaire du paramètre...
Ce n'est pas une option, tu dois conserver la méthode tel quel...
Et tu ne dois pas non plus éliminer l'appel de NetApiBufferFree.


private const uint MAX_PREFERRED_LENGTH = 0xFFFFFFFF;

La ligne qui effectue le "mouvement" vers la structure duivante dans le buffer est importante elle aussi :
int nStructSize = Marshal.SizeOf(typeof(SHARE_INFO_2));
...
currentPtr = new IntPtr(currentPtr.ToInt32() + nStructSize);

/*
coq
MVP Visual C#
*/
dimanche 20 novembre 2005 à 14:14:21 | Re : Partages Réseau

mamounette

Merci encore une fois Coq !!

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




public class share{

[DllImport("Netapi32.dll", CharSet=CharSet.Unicode)]
private static extern int NetShareEnum(
     String ServerName,
     int level,
     ref IntPtr bufPtr,
     uint prefmaxlen,
     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 () {


    //private const uint MAX_PREFERRED_LENGTH = 0xFFFFFFFF;

    String Servername = null;
    int level = 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);
  

    }

}



Cette discussion est classée dans : réseau, machines, partages


Répondre à ce message

Sujets en rapport avec ce message

liste du réseau [ par penchu ] Bonjour, j'ai fait récemment un programme Net Sender 1.0 qui permet de d'envoyer les messages sur le réseau. J'ai envie de pousser le bouchon un peu p Connexion sur un réseau [ par kichou86 ] Bonjour tout le monde !!!Je travaille actuellement sur une application qui doit permettre de se connecter sur un réseau et recupérer toutes les machin graphe bayesien [ par dadidadidadi ] bonjour!je suis entrain de développer ,un éditeur d'un réseau bayésien , j'ai un problème lorsque  copier le graphe du réseau dans une autre fenêtre,v récupérer des informations des machines d'un même groupe de travail [ par sandra22 ] Salut,Je cherche à récupérer quelques informations relatives aux machines appartenant à un même groupe de travail sachant que ce nom est saisi par l'u dessiner sur un graphe [ par adsana ] bonjourje suis entrain de faire un code qui simule un réseau et affiche le schéma du réseau sous forme d'une image bitmap.mais comme j'ai besoin d'agi Evènement distant en réseau [ par kikiokiller ] Bonjour à tous, Dans le cadre d'une application client serveur que j'essaie de réaliser depuis 3 semaines maintenant, je rencontre un problème concern [BAR]masque de sous reseau [ par foula12 ] bonjour <link rel="File-Lis Récuperer des informations sur des machines distantes en WMI [ par kichou86 ] Bonjour, Je suis actuellement sur un projet qui permet de récupérer des informations sur des machines à distance à l'aide des script WMI en C#. J'arri Etat du resau [ par iceman64b ] Je cherche à faire un outil pour vérifier la connectivité d'un réseau (je veux savoir si le réseau se comporte normalement ou pas). Le programme aura Socket + Réseau [ par emmanuel9 ] Bonjour à tous, J'ai une question technique concernant les jeux réalisés en réseaux : Si l'on imagine un jeux en réseau de ping pong avec deux raqu


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,780 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales