title image


Smiley s gleich 3Mal...
NT-Netzwerkshares mit VB erstellen



Dirk Primbs, Microsoft GmbH







Für das Arbeiten mit Netzwerkshares gibt es mehrere Vorgehensweisen. Das gewünschte Ergebnis kann mit Hilfe der Windows API, der Windows Management Instrumentation (WMI) oder mit den Active Directory Service Interfaces (ADSI) erzielt werden.



Der klassische Weg: API



Für das Erstellen eines Netzwerkshares stellt Windows die API-Funktion NetShareAdd bereit.



Ihr wird beim Aufruf



der Name des Zielrechners (leer, falls der Share auf dem lokalen System erstellt werden soll),

ein Wert, der darüber entscheidet in welcher Form die nötigen Daten vorliegen (Unter Windows 95/98 wird eine andere Struktur als Parameter erwartet als unter Windows NT / Windows 2000),

eine Zeigervariable auf die Datenstruktur und

eine "Rückgabevariable" zur Ermittlung eventueller Fehlerinformationen



übergeben.



Zusammen mit den Definitionen sieht also der Code, der zum Anlegen eines Shares via API notwenig ist folgendermaßen aus:





Option Explicit

'-----------------------------------------

'Konstanten

'-----------------------------------------

Private Const STYPE_DISKTREE As Long = 0&

Private Const ACCESS_READ As Long = &H1&

Private Const ShareLevel2 As Long = 2&

Private Type SHARE_INFO_2

shi2_netname As Long

shi2_type As Long

shi2_remark As Long

shi2_permissions As Long

shi2_max_uses As Long

shi2_current_uses As Long

shi2_path As Long

shi2_passwd As Long

End Type

'--------------------------------------------

'API-Deklaration'--------------------------------------------

Private Declare Function NetShareAdd Lib "netapi32.dll" _

(ByRef servername As Byte, _

ByVal level As Long, _

ByVal buffer As Any, _

ByVal parm_err As Long) As Long

'--------------------------------------------

'Implementation

'--------------------------------------------

Public Sub AddShareAPI(ByVal strServerName As String, _

ByVal strShareName As String, _

ByVal strPath As String, _

ByVal strComment As String)

Dim bytServerName() As Byte

Dim UDTShareInfo As SHARE_INFO_2

Dim PtrToType As Long

Dim strPassword As String

Dim ret As Long

Dim lngRetErrVal As Long



bytServerName = strServerName & vbNullChar

strPassword = vbNullString

With UDTShareInfo

.shi2_netname = StrPtr(strShareName)

.shi2_type = STYPE_DISKTREE

.shi2_remark = StrPtr(strComment)

.shi2_permissions = ACCESS_READ

.shi2_max_uses = -1

.shi2_current_uses = 0

.shi2_path = StrPtr(strPath)

.shi2_passwd = StrPtr(strPassword)

End With

PtrToType = VarPtr(UDTShareInfo)

ret = NetShareAdd(servername:=bytServerName(0), _

level:=ShareLevel2, _

buffer:=PtrToType, _

parm_err:=lngRetErrVal)

If ret 0 Then

Debug.Print Err.LastDllError, ret, lngRetErrVal

End If

End Sub





Die WMI-Methode:



Die WMI (Windows Management Instrumentation) ist ein Werkzeug zum effizienten Verwalten von Windows. Sie ist bei Windows 2000 im Lieferumfang des Systems enthalten und kann für alle anderen Systeme unter msdn.microsoft.com/downloads/sdks/wmi/download.asp downgeloadet und installiert werden. Der Hauptvorteil der Verwendung der WMI ist (neben der Tatsache, daß der Codeumfang deutlich geringer ist) die Möglichkeit, WMI innerhalb von Skripts einzusetzen. (z.B. VBScript oder Jscript)



Nachdem Sie unter "Projekt => Verweise" eine Referenz auf "Microsoft WMI Scripting v1.1 Library" erstellt haben können Sie mit folgendem Code Shares erzeugen:





Public Function AddShareWMI(ByVal strShareName As String, _

ByVal strPath As String, _

ByVal strComment As String) As Long

Dim MyNewShare As SWbemObject

Set MyNewShare = GetObject("winmgmts:Win32_Share")

AddShareWMI = MyNewShare.Create(strPath, strShareName, 0, , strComment)

Set MyNewShare = Nothing

End Function





In der folgenden Form ließe sich der Code innerhalb eines VBScripts anwenden:





Public Function AddShareWMI(strShareName, strPath, strComment)

Dim MyNewShare

Set MyNewShare = GetObject("winmgmts:Win32_Share")

AddShareWMI = MyNewShare.Create(strPath, strShareName, 0, , strComment)

Set MyNewShare = Nothing

End Function







Active Directory Service Interface:



Auch hierbei ist sind Komponenten notwendig, die bei Windows 2000 zum System gehören, andernfalls jedoch nachinstalliert werden müssen. Sie können die ADSI-Runtime unter www.microsoft.com/ntserver/info/adsi.htm downloaden. Um sie zu verwenden müssen Sie außerdem eine Referenz auf "Active DS Type Library" setzen:





Public Sub AddShareADSI(ByVal strServerName As String, _

ByVal strShareName As String, _

ByVal strPath As String, _

ByVal strComment As String)

Dim fserv As IADsContainer

Dim shareNew As IADsFileShare

Set fserv = GetObject("WinNT://" & strServerName & _

"/lanmanserver") 'Share erzeugen

Set shareNew = fserv.Create("fileshare", strShareName)

shareNew.Path = strPath

shareNew.SetInfo 'Änderung durchführen

End Sub





Weitere Informationen:



Active Directory Service Interfaces (ADSI) - Whitepaper:

www.microsoft.com/WINDOWS2000/library/howitworks/activedirectory/adinterface.asp

Windows Management Instrumentation (WMI):

msdn.microsoft.com/downloads/sdks/wmi/

HOWTO: Manipulate File Shares with ADSI (VB Sample)

support.microsoft.com/support/kb/articles/Q169/3/98.asp

Anlegen und Entfernen eines Netzwerkshares mit VB und der Windows Management Instrumentation (WMI)

www.microsoft.com/IntlKB/Germany/Support/kb/D43/D43747.htm
Moderation is OK, but not to excess...



geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: