map und unmap

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von haiflosse1.

    map und unmap

    Hallo!
    Ich verwende folgenden Code um ein Laufwerk als Administrator zu verbinden:

    Quellcode

    1. Public Declare Function WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" _
    2. (ByRef lpNetResource As NETRESOURCE, ByVal lpPassword As String,
    3. ByVal lpUserName As String, ByVal dwFlags As Integer) As Integer
    4. Public Declare Function WNetCancelConnection2 Lib "mpr" Alias "WNetCancelConnection2A" _
    5. (ByVal lpName As String, ByVal dwFlags As Integer, ByVal fForce As Integer) As Integer
    6. <StructLayout(LayoutKind.Sequential)>
    7. Public Structure NETRESOURCE
    8. Public dwScope As Integer
    9. Public dwType As Integer
    10. Public dwDisplayType As Integer
    11. Public dwUsage As Integer
    12. Public lpLocalName As String
    13. Public lpRemoteName As String
    14. Public lpComment As String
    15. Public lpProvider As String
    16. End Structure
    17. Public Const RESOURCETYPE_DISK As Long = &H1
    18. Public Const ForceDisconnect As Integer = 1


    Quellcode

    1. Public Function MapDrive(ByVal DriveLetter As String, ByVal UNCPath As String) As Boolean
    2. Dim nr As NETRESOURCE
    3. Dim strUsername As String
    4. Dim strPassword As String
    5. nr = New NETRESOURCE
    6. nr.lpRemoteName = UNCPath
    7. nr.lpLocalName = DriveLetter & ":"
    8. strUsername = "administrator" '(add parameters to pass this if necessary)
    9. strPassword = "pwd" '(add parameters to pass this if necessary)
    10. nr.dwType = RESOURCETYPE_DISK
    11. Dim result As Integer
    12. result = WNetAddConnection2(nr, strPassword, strUsername, 0)
    13. If result = 0 Then
    14. Return True
    15. Else
    16. Return False
    17. End If
    18. End Function


    Die Verbindung hebe ich dann wie folgt wieder auf:

    Quellcode

    1. Public Function UnMapDrive(ByVal DriveLetter As String) As Boolean
    2. Dim rc As Integer
    3. rc = WNetCancelConnection2(DriveLetter & ":", 0, ForceDisconnect)
    4. If rc = 0 Then
    5. Return True
    6. Else
    7. Return False
    8. End If
    9. End Function


    Ich rufe z.B. folgendes auf:
    MapDrive("U", "\\computer\c$")

    und dann wieder

    UnMapDrive("U")

    Das Problem dabei ist aber dass ich danach über den Explorer immer noch \\computer\c$ ohne Eingabe von Benutzername und Passwort zugreifen kann und die Ordner und Dateien verwenden kann.
    Wie kann ich dies noch verhindern, wenn ich unmapdrive aufrufe?

    Danke
    Ist der Rückgabewert von UnMapDrive auch wirklich True? Bzw. wäre True wirklich ein Garant dafür (habe mich jetzt nicht über WNetCancelConnection2 informiert), dass die Verbindung getrennt ist?

    Soweit ich weiß kann auch nur der geringste Zugriff auf eine Netzwerkfreigabe dafür sorgen, dass die Verbindung nicht getrennt werden kann.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Danke für die Antwort.
    Es wird immer ein true zurückgegeben.

    Ich habe das ganze jetzt bei 2 Computer bei mir zu Hause ausprobiert mit nur einem map und unmap.
    Dort kann ich mich nach einem unmap nicht mehr verbinden bzw. werde ich nach einer Anmeldung gefragt.

    Dann habe ich es wieder bei 2 Computer getestet wo ich das Problem habe und da kann ich mich mit dem selben Programm immer noch ohne Anmeldung auf \\computer\c$k verbinden.
    Leider finde ich da keinen Unterschied was auch die Netzwerkverbindung und Einstellung betrifft.

    Vielleicht hat da jemand noch eine Idee.
    Danke
    Der Laufwerksbuchstabe verschwindet aber schon, oder? Ich verstehe dich so, dass (nur) der Zugriff auf den UNC-Pfad noch geht.

    Haben die Rechner, die das Problem haben, evtl. die Zugangsdaten für den UNC-Pfad gespeichert? Man kann schließlich in Windows sagen, dass man automatisch eingeloggt werden will.

    Ansonsten denke ich, dass, obwohl true zurückgegeben wird, die Verbindung nicht komplett getrennt wurde. Was ist denn, wenn du auf den Rechnern, auf denen es klappt, eine Verbindung aufrecht erhälst? Also wirst du dann trotzdem in jedem Fall getrennt?
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Danke für die Antwort.
    Habe jetzt nochmals es versucht auf den Computer wo es funktioniert hat, dort trat nun auch das Problem auf, dass ich nach dem unmap mich ungehindert wieder über den unc Pfad \\computer\c$ anmelden kann.
    Hoffe es hat noch jemand eine Idee wie man dies verhindern kann.
    Danke
    Ist das Verhalten dasselbe, wenn du NET USE und NET USE /DELETE verwendest,
    also völlig weg von deinem Programm und nur in der Shell?
    Wird dann die Verbindung ganz zerstört oder hast du denselben Effekt, dass du noch Rechte auf C$ besitzt?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    @haiflosse1 WNetAddConnection2 bietet ebenfalls diverse Flags an. Schaust Du hier: learn.microsoft.com/en-us/wind…netwk-wnetaddconnection2a Evtl. musst die Verbindung mit dem Flag CONNECT_TEMPORARY herstellen.
    Mfg -Franky-
    Danke für die Antwort.
    Ich habe nun folgendes verwendet:

    Quellcode

    1. Public Const ForceDisconnect As Integer = 1
    2. Private Const CONNECT_UPDATE_PROFILE = 1
    3. Private Const CONNECT_TEMPORARY = 4
    4. nr.dwType = RESOURCETYPE_DISK
    5. WNetAddConnection2a(nr, strPassword, strUsername, CONNECT_TEMPORARY)
    6. WNetCancelConnection2a(DriveLetter & ":", CONNECT_UPDATE_PROFILE, ForceDisconnect)


    Leider kann ich unmittalbar nachdem ich die Verbindung weider getrennt habe noch immer mich mit \\computer\c$ verbinden.
    Wenn ich ein paar Minuten warte funktioniert die Verbindung nicht mehr.

    Keine Ahnung woran dies liegen könnte.
    lg