Accueil > > > FONCTIONS RÉSEAU DE BASE
FONCTIONS RÉSEAU DE BASE
Information sur la source
Description
Voici trois petites fonctions de base pour la gestion réseau via les API windows Elles permettent d'envoyer un message style "net send", d'obtenir la liste des utilisateurs d'un domaine et la liste des machines membres d'un domaine.
Source
- Option Explicit
-
- Private Const NERR_Success As Long = 0&
- Public Const FILTER_INTERDOMAIN_TRUST_ACCOUNT As Long = &H8
- Public Const FILTER_NORMAL_ACCOUNT As Long = &H2
- Public Const FILTER_SERVER_TRUST_ACCOUNT As Long = &H20
- Public Const FILTER_TEMP_DUPLICATE_ACCOUNT As Long = &H1
- Public Const FILTER_WORKSTATION_TRUST_ACCOUNT As Long = &H10
- Private Const SV_TYPE_WORKSTATION As Long = &H1
-
- Private Declare Function NetServerEnum Lib "netapi32" (servername As Byte, ByVal level As Long, Buffer As Long, ByVal prefmaxlen As Long, entriesread As Long, totalentries As Long, ByVal servertype As Long, domain As Byte, ResumeHandle As Long) As Long
- Private Declare Function NetUserEnum Lib "netapi32" (servername As Byte, ByVal level As Long, ByVal lFilter As Long, Buffer As Long, ByVal prefmaxlen As Long, entriesread As Long, totalentries As Long, ResumeHandle As Long) As Long
- Private Declare Function NetApiBufferFree Lib "NETAPI32.dll" (ByVal Ptr As Long) As Long
- Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
- Private Declare Function NetMessageBufferSend Lib "NETAPI32.dll" (yServer As Any, yToName As Byte, yFromName As Any, yMsg As Byte, ByVal lSize As Long) As Long
- Private Declare Function PtrToInt Lib "kernel32" Alias "lstrcpynW" (RetVal As Any, ByVal Ptr As Long, ByVal nCharCount As Long) As Long
- Private Declare Function PtrToStr Lib "kernel32" Alias "lstrcpyW" (RetVal As Byte, ByVal Ptr As Long) As Long
- Private Declare Function StrLen Lib "kernel32" Alias "lstrlenW" (ByVal Ptr As Long) As Long
-
- Private Type MungeInt
- XLo As Integer
- XHi As Integer
- Dummy As Integer
- End Type
-
- Private Type MungeLong
- x As Long
- Dummy As Integer
- End Type
-
- Private Function GetStringFromBuffer(ByVal bufptr As Long, ByVal offset As Long, ByVal Valnum As Long, ByVal recordsize As Long) As String
- Dim Result As Long, UnArray(1023) As Byte, TempPtr As MungeLong, TempStr As MungeInt
-
- Result = PtrToInt(TempStr.XLo, bufptr + (offset - 1) * recordsize + (Valnum - 1) * 2, 2)
- Result = PtrToInt(TempStr.XHi, bufptr + (offset - 1) * recordsize + (Valnum - 1) * 2 + 2, 2)
- LSet TempPtr = TempStr
- Result = PtrToStr(UnArray(0), TempPtr.x)
- GetStringFromBuffer = Left(UnArray, StrLen(TempPtr.x))
- End Function
-
- '---------------------------------------------------------------------------------------
- ' Procédure : SendMessage
- ' Auteur : Christophe RENAUD
- ' Objet : Envoie un message style Popup sur le réseau
- ' Retour : Renvoie True si le message a bien été envoyer et False sinon
- ' Arguments : - sToUser (Entrée) : Nom du destinataire
- ' - sFromUser (Entrée) : Nom de l'expéditeur
- ' - sBody (Entrée) : Corps du message
- '---------------------------------------------------------------------------------------
- '
- Public Function SendMessage(sToUser As String, sFromUser As String, sBody As String) As Boolean
- Dim abTo() As Byte, abFrom() As Byte, abBody() As Byte
-
- abTo = sToUser & vbNullChar
- abFrom = sFromUser & vbNullChar
- abBody = sBody & vbNullChar
- If NetMessageBufferSend(ByVal 0&, abTo(0), ByVal 0&, abBody(0), UBound(abBody)) = NERR_Success Then
- SendMessage = True
- Else
- SendMessage = False
- End If
- End Function
-
- '---------------------------------------------------------------------------------------
- ' Procédure : GetDomainUserNames
- ' Auteur : Christophe RENAUD
- ' Objet : Retourne la liste des utilisateurs d'un domaine NT
- ' Retour : Indice du dernier élément du tableau retourné (base 0)
- ' Arguments : - Tableau() (Sortie) : Liste des utilisateurs du domaine
- ' - sMachine (Entrée) : Nom du serveur executant la requête (local si = "")
- ' - Filtre (Entrée) : Filtre le type de compte renvoyé (Voir constante ci-dessus)
- '---------------------------------------------------------------------------------------
- '
- Public Function GetDomainUserNames(ByRef Tableau() As String, sMachine As String, Filtre As Long) As Long
- Dim Result As Long, bufptr As Long, entriesread As Long, totalentries As Long, ResumeHandle As Long, BufLen As Long, sName() As Byte
- Dim Bcl As Long
-
- sName = sMachine & vbNullChar
- BufLen = 2047
- ResumeHandle = 0
- ReDim Tableau(0)
- Do
- Result = NetUserEnum(sName(0), 0, Filtre, bufptr, BufLen, entriesread, totalentries, ResumeHandle)
- If Result <> 0 And Result <> 234 Then
- Exit Function
- End If
- For Bcl = 1 To entriesread
- ReDim Preserve Tableau(0 To UBound(Tableau) + 1)
- Tableau(UBound(Tableau)) = Trim$(GetStringFromBuffer(bufptr, Bcl, 1, 4))
- Next
- Loop Until entriesread = totalentries
- Result = NetApiBufferFree(bufptr)
- GetDomainUserNames = UBound(Tableau)
- End Function
-
- '---------------------------------------------------------------------------------------
- ' Procédure : GetDomainComputerNames
- ' Auteur : Christophe RENAUD
- ' Objet : Retourne la liste des PC d'un domaine NT
- ' Retour : Indice du dernier élément du tableau retourné (base 0)
- ' Arguments : - Tableau() (Sortie) : Liste des PC du domaine
- ' - sMachine (Entrée) : Nom du serveur executant la requête (local si = "")
- ' - sNomdomaine (Entrée) : Nom du domaine NT dont on recherche les machines
- '---------------------------------------------------------------------------------------
- '
- Public Function GetDomainComputerNames(ByRef Tableau() As String, sMachine As String, sNomDomaine As String) As Long
- Dim Result As Long, bufptr As Long, entriesread As Long, totalentries As Long, ResumeHandle As Long, BufLen As Long, sName() As Byte, SDomain() As Byte
- Dim Bcl As Long
-
- sName = sMachine & vbNullChar
- SDomain = sNomDomaine & vbNullChar
- BufLen = 2047
- ResumeHandle = 0
- ReDim Tableau(0)
- Do
- Result = NetServerEnum(sName(0), 100, bufptr, BufLen, entriesread, totalentries, SV_TYPE_WORKSTATION, SDomain(0), ResumeHandle)
- If Result <> 0 And Result <> 234 Then
- Exit Function
- End If
- For Bcl = 2 To entriesread * 2 Step 2
- ReDim Preserve Tableau(0 To UBound(Tableau) + 1)
- Tableau(UBound(Tableau)) = Trim$(GetStringFromBuffer(bufptr, Bcl, 1, 4))
- Next
- Loop Until entriesread = totalentries
- Result = NetApiBufferFree(bufptr)
- GetDomainComputerNames = UBound(Tableau)
- End Function
-
Option Explicit
Private Const NERR_Success As Long = 0&
Public Const FILTER_INTERDOMAIN_TRUST_ACCOUNT As Long = &H8
Public Const FILTER_NORMAL_ACCOUNT As Long = &H2
Public Const FILTER_SERVER_TRUST_ACCOUNT As Long = &H20
Public Const FILTER_TEMP_DUPLICATE_ACCOUNT As Long = &H1
Public Const FILTER_WORKSTATION_TRUST_ACCOUNT As Long = &H10
Private Const SV_TYPE_WORKSTATION As Long = &H1
Private Declare Function NetServerEnum Lib "netapi32" (servername As Byte, ByVal level As Long, Buffer As Long, ByVal prefmaxlen As Long, entriesread As Long, totalentries As Long, ByVal servertype As Long, domain As Byte, ResumeHandle As Long) As Long
Private Declare Function NetUserEnum Lib "netapi32" (servername As Byte, ByVal level As Long, ByVal lFilter As Long, Buffer As Long, ByVal prefmaxlen As Long, entriesread As Long, totalentries As Long, ResumeHandle As Long) As Long
Private Declare Function NetApiBufferFree Lib "NETAPI32.dll" (ByVal Ptr As Long) As Long
Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Private Declare Function NetMessageBufferSend Lib "NETAPI32.dll" (yServer As Any, yToName As Byte, yFromName As Any, yMsg As Byte, ByVal lSize As Long) As Long
Private Declare Function PtrToInt Lib "kernel32" Alias "lstrcpynW" (RetVal As Any, ByVal Ptr As Long, ByVal nCharCount As Long) As Long
Private Declare Function PtrToStr Lib "kernel32" Alias "lstrcpyW" (RetVal As Byte, ByVal Ptr As Long) As Long
Private Declare Function StrLen Lib "kernel32" Alias "lstrlenW" (ByVal Ptr As Long) As Long
Private Type MungeInt
XLo As Integer
XHi As Integer
Dummy As Integer
End Type
Private Type MungeLong
x As Long
Dummy As Integer
End Type
Private Function GetStringFromBuffer(ByVal bufptr As Long, ByVal offset As Long, ByVal Valnum As Long, ByVal recordsize As Long) As String
Dim Result As Long, UnArray(1023) As Byte, TempPtr As MungeLong, TempStr As MungeInt
Result = PtrToInt(TempStr.XLo, bufptr + (offset - 1) * recordsize + (Valnum - 1) * 2, 2)
Result = PtrToInt(TempStr.XHi, bufptr + (offset - 1) * recordsize + (Valnum - 1) * 2 + 2, 2)
LSet TempPtr = TempStr
Result = PtrToStr(UnArray(0), TempPtr.x)
GetStringFromBuffer = Left(UnArray, StrLen(TempPtr.x))
End Function
'---------------------------------------------------------------------------------------
' Procédure : SendMessage
' Auteur : Christophe RENAUD
' Objet : Envoie un message style Popup sur le réseau
' Retour : Renvoie True si le message a bien été envoyer et False sinon
' Arguments : - sToUser (Entrée) : Nom du destinataire
' - sFromUser (Entrée) : Nom de l'expéditeur
' - sBody (Entrée) : Corps du message
'---------------------------------------------------------------------------------------
'
Public Function SendMessage(sToUser As String, sFromUser As String, sBody As String) As Boolean
Dim abTo() As Byte, abFrom() As Byte, abBody() As Byte
abTo = sToUser & vbNullChar
abFrom = sFromUser & vbNullChar
abBody = sBody & vbNullChar
If NetMessageBufferSend(ByVal 0&, abTo(0), ByVal 0&, abBody(0), UBound(abBody)) = NERR_Success Then
SendMessage = True
Else
SendMessage = False
End If
End Function
'---------------------------------------------------------------------------------------
' Procédure : GetDomainUserNames
' Auteur : Christophe RENAUD
' Objet : Retourne la liste des utilisateurs d'un domaine NT
' Retour : Indice du dernier élément du tableau retourné (base 0)
' Arguments : - Tableau() (Sortie) : Liste des utilisateurs du domaine
' - sMachine (Entrée) : Nom du serveur executant la requête (local si = "")
' - Filtre (Entrée) : Filtre le type de compte renvoyé (Voir constante ci-dessus)
'---------------------------------------------------------------------------------------
'
Public Function GetDomainUserNames(ByRef Tableau() As String, sMachine As String, Filtre As Long) As Long
Dim Result As Long, bufptr As Long, entriesread As Long, totalentries As Long, ResumeHandle As Long, BufLen As Long, sName() As Byte
Dim Bcl As Long
sName = sMachine & vbNullChar
BufLen = 2047
ResumeHandle = 0
ReDim Tableau(0)
Do
Result = NetUserEnum(sName(0), 0, Filtre, bufptr, BufLen, entriesread, totalentries, ResumeHandle)
If Result <> 0 And Result <> 234 Then
Exit Function
End If
For Bcl = 1 To entriesread
ReDim Preserve Tableau(0 To UBound(Tableau) + 1)
Tableau(UBound(Tableau)) = Trim$(GetStringFromBuffer(bufptr, Bcl, 1, 4))
Next
Loop Until entriesread = totalentries
Result = NetApiBufferFree(bufptr)
GetDomainUserNames = UBound(Tableau)
End Function
'---------------------------------------------------------------------------------------
' Procédure : GetDomainComputerNames
' Auteur : Christophe RENAUD
' Objet : Retourne la liste des PC d'un domaine NT
' Retour : Indice du dernier élément du tableau retourné (base 0)
' Arguments : - Tableau() (Sortie) : Liste des PC du domaine
' - sMachine (Entrée) : Nom du serveur executant la requête (local si = "")
' - sNomdomaine (Entrée) : Nom du domaine NT dont on recherche les machines
'---------------------------------------------------------------------------------------
'
Public Function GetDomainComputerNames(ByRef Tableau() As String, sMachine As String, sNomDomaine As String) As Long
Dim Result As Long, bufptr As Long, entriesread As Long, totalentries As Long, ResumeHandle As Long, BufLen As Long, sName() As Byte, SDomain() As Byte
Dim Bcl As Long
sName = sMachine & vbNullChar
SDomain = sNomDomaine & vbNullChar
BufLen = 2047
ResumeHandle = 0
ReDim Tableau(0)
Do
Result = NetServerEnum(sName(0), 100, bufptr, BufLen, entriesread, totalentries, SV_TYPE_WORKSTATION, SDomain(0), ResumeHandle)
If Result <> 0 And Result <> 234 Then
Exit Function
End If
For Bcl = 2 To entriesread * 2 Step 2
ReDim Preserve Tableau(0 To UBound(Tableau) + 1)
Tableau(UBound(Tableau)) = Trim$(GetStringFromBuffer(bufptr, Bcl, 1, 4))
Next
Loop Until entriesread = totalentries
Result = NetApiBufferFree(bufptr)
GetDomainComputerNames = UBound(Tableau)
End Function
Conclusion
Ce source est plus particulièrement destiné à Ducker88, rapport au thread dans le forum sur le sujet
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
lister les utilisateur de mon reseau [ par vince54 ]
Bonjour, je souhaiterais avec un control genre FolderBrowser récuperer le nom des ordinateur sur mon reseau et cliquer sur un d'entre eux pour recuper
dir sur ordinateur du reseau [ par Hercule_Babeuf ]
Alors voila je recherche un moyen d effetuer un dir sur un repertoire d un ordinateur du réseau, sachant que la commande dir("\\Bob\C:\repertoire")ne
Récupérer le nom de l'ordinateur sur lequel une session d'utilisateur est démarée. [ par sylvainvwvb ]
Chers Tous,Je suis débutant dans le monde du développement et un ami m'a vivement conseillé de me rendre sur ce site pour trouver des solutions VB.Po
utilisateur dun reseau [ par Spe6men ]
je voudrai faire apparaitre dans une list box les different uitlisateur dun reseau (sous forme soit du nom de lordinateur ou alors du nom de la lutili
tester si utilisateur connecté au reseau [ par sebtralalaetph ]
Bonjour à tous, comme dit dans le titre j'aimerai connaitre le moyen de savoir si un utilisateur est connecte a un reseau (serveur citrix).Si quelqu'u
Erreur d'exécution n° 430 [ par PierreRIVET ]
Après avoir saisi un utilisateur (en Windows 98) j'obtiens le message suivant:Erreur d'exécution n° 430 - La classe ne gère pas Automation ou l'inter
Erreur d'exécution n° 430 [ par PierreRIVET ]
Après avoir saisi un utilisateur (en Windows 98) j'obtiens le message suivant: Erreur d'exécution n° 430 - La classe ne gère pas Automation ou l'inte
liste ordinateur sur le reseau [ par farradjs ]
Svp comment on peut lister dans une listbox tout les noms des ordinateurs presents dan le reseau ainsi que leur session ouverte.........si qlq le sait
API Windows [ par rutabaga ]
Bonjour,Exite-t-il une API ou au moins une solution pour détecter si un fichier partagé en réseau (un fichier excel par ex) est ouvert par un autre ut
ordinateurs en reseau: utilisateur [ par Ishamael ]
b'soirj' aimerais savoir s' il existe une methode (autre que le nbtstat) pour savoir si un ordinateur du reseau a un utilisateur de connecte ou non.Me
|
Derniers Blogs
[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|