>> Hast du also die Kiste wieder flicken können? Freut mich.
Noch nicht so wirklich
>> Lass dir Zeit, bin schon seit 2 Wochen an dieser Sache. Aber unterdessen hab ich doch noch zweidrei andere kleinere Problemchen (mehr oder weniger) gelöst. Das Share ist einfach noch das letzte Teil, das mir fehlt. Doch unter der Woche muss ich sowieso trampen gehen, da hab ich gar keine Zeit für diese Spässe.
Das Thema interessiert mich aber mehr oder weniger. Deshalb hier und jetzt schon der VB.NET Code. Unter XP funktioniert dieser einwandfrei. Die Zugriffe steuerst du über die "shi2_permissions" Variable:
Code der Klasse:
Public Class Shares
Private Const NERR_SUCCESS As Integer = 0&
'share types
Private Const STYPE_ALL As Integer = -1 'note: my const
Private Const STYPE_DISKTREE As Integer = 0
Private Const STYPE_PRINTQ As Integer = 1
Private Const STYPE_DEVICE As Integer = 2
Private Const STYPE_IPC As Integer = 3
Private Const STYPE_SPECIAL As Integer = &H80000000
'permissions
Private Const ACCESS_READ As Integer = &H1
Private Const ACCESS_WRITE As Integer = &H2
Private Const ACCESS_CREATE As Integer = &H4
Private Const ACCESS_EXEC As Integer = &H8
Private Const ACCESS_DELETE As Integer = &H10
Private Const ACCESS_ATRIB As Integer = &H20
Private Const ACCESS_PERM As Integer = &H40
Private Const ACCESS_ALL As Integer = ACCESS_READ Or ACCESS_WRITE Or _
ACCESS_CREATE Or ACCESS_EXEC Or _
ACCESS_DELETE Or ACCESS_ATRIB Or _
ACCESS_PERM
Private Structure SHARE_INFO_2
Dim shi2_netname As Integer
Dim shi2_type As Integer
Dim shi2_remark As Integer
Dim shi2_permissions As Integer
Dim shi2_max_uses As Integer
Dim shi2_current_uses As Integer
Dim shi2_path As Integer
Dim shi2_passwd As Integer
End Structure
Private Declare Function NetShareAdd Lib "netapi32" (ByVal servername As _
Integer, _
ByVal level As _
Integer, _
ByRef buf As _
SHARE_INFO_2, _
ByVal parmerr As _
Integer) As Integer
Public Shared Function ShareAdd(ByVal sServer As String, ByVal sSharePath _
As String, _
ByVal sShareName As String, ByVal sShareRemark As _
String, _
ByVal sSharePw As String) As Integer
Dim dwServer As Integer
Dim dwNetname As Integer
Dim dwPath As Integer
Dim dwRemark As Integer
Dim dwPw As Integer
Dim parmerr As Integer
Dim si2 As SHARE_INFO_2
'obtain pointers to the server, share and path
dwServer = StrPtr(sServer)
dwNetname = StrPtr(sShareName)
dwPath = StrPtr(sSharePath)
'if the remark or password specified,
'obtain pointer to those as well
If sShareRemark.Length > 0 Then dwRemark = StrPtr(sShareRemark)
If sSharePw.Length > 0 Then dwPw = StrPtr(sSharePw)
'prepare the SHARE_INFO_2 structure
With si2
.shi2_netname = dwNetname
.shi2_path = dwPath
.shi2_remark = dwRemark
.shi2_type = STYPE_DISKTREE
.shi2_permissions = ACCESS_ALL
.shi2_max_uses = -1
.shi2_passwd = dwPw
End With
'add the share
Return NetShareAdd(dwServer, 2, si2, parmerr)
End Function
Private Shared Function StrPtr(ByVal o As Object) As Integer
Dim GC As System.Runtime.InteropServices.GCHandle = _
System.Runtime.InteropServices.GCHandle.Alloc(o, _
System.Runtime.InteropServices.GCHandleType.Pinned)
Dim ret As Integer = GC.AddrOfPinnedObject.ToInt32
GC.Free()
Return ret
End Function
End Class Anwendung:
Dim result As Integer = Shares.ShareAdd("\\" + _
System.Environment.MachineName, "C:\Freigabe", "my share", "my" & _
"share", String.Empty)
Select Case result
Case 0 : MessageBox.Show("share created successfully!")
Case 2118 : MessageBox.Show("share name already exists")
Case Else : MessageBox.Show("create error " + result.ToString())
End Select(Es funktioniert)
Viel Erfolg
Steve |