Back to Top

プログラムの覚書

Category: ドライブ

VB.NET ネットワークドライブの割り当て

ネットワークの共有領域をドライブに割り当てる方法を記載します。

ネットワーク接続には、 WNetAddConnection2() ネットワーク切断には、WNetCancelConnection2()を使用します。

ネットワークドライブ割り当て

Imports System.Runtime.InteropServices

Public Structure NETRESOURCE
    Public dwScope As Integer
    Public dwType As Integer
    Public dwDisplayType As Integer
    Public dwUsage As Integer
    Public lpLocalName As String
    Public lpRemoteName As String
    Public lpComment As String
    Public lpProvider As String
End Structure

'ネットワークドライブへの接続
Public Declare Function WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" (ByRef lpNetResource As NETRESOURCE, ByVal lpPassword As String, ByVal lpUserName As String, ByVal dwFlags As Integer) As Integer
Dim netRes As NETRESOURCE

' ネットワーク・リソースの設定
netRes.dwScope = 0
netRes.dwType = 1
netRes.dwDisplayType = 0
netRes.dwUsage = 0
netRes.lpComment = Nothing
netRes.lpLocalName = "U:"
netRes.lpProvider = Nothing
netRes.lpRemoteName = "\\192.168.2.120\共有"

Dim strUserName = "user" 'ユーザ名
Dim strPassword = "pass" 'パスワード

' 接続
Dim rc = WNetAddConnection2(netRes, strUserName, strPassword, 0)

第1引数のNETRESOURCEに接続の詳細を設定します。

第2引数は、サーバーに接続するユーザ名です。

第3引数は、サーバーに接続するパスワードです。

第4引数は、ネットワークの接続を記憶の有無です。

ネットワークドライブ解除

Imports System.Runtime.InteropServices

'ネットワークドライブの切断
Public Declare Function WNetCancelConnection2 Lib "mpr.dll" Alias "WNetCancelConnection2A" (ByVal lpName As String, ByVal dwFlags As Integer, Optional ByVal fForce As Boolean = False) As Boolean

' 切断
Dim rc = WNetCancelConnection2("U:", 0, False)

 

VB.NET マウントドライブを解除する

DefineDosDevice()で割り当てたドライブを解除する方法を記載します。

DefineDosDevice()割り当てドライブの解除

Imports System.Runtime.InteropServices

<DllImport("Kernel32.dll")>
Public Shared Function QueryDosDevice(lpDeviceName As String, lpTargetPath As System.Text.StringBuilder, ucchMax As Integer) As Integer
End Function

Const DDD_RAW_TARGET_PATH = &H1         '文字列をMS-DOSパスからパスに変換せず、そのまま使います。
Const DDD_REMOVE_DEFINITION = &H2       '指定のデバイスの指定された定義を削除
Const DDD_EXACT_MATCH_ON_REMOVE = &H4   '完全に一致するマッピングから、削除するマッピングを判断します。この値を指定すると、定義していないデバイス名を削除しないようにする

''' <summary>
''' 仮想ドライブを解除します。
''' </summary>
''' <param name="lpDeviceName">ドライブ名</param>
''' <returns></returns>
Public Function UnmapDrive(lpDeviceName As String) As Boolean
    Return (DefineDosDevice(DDD_REMOVE_DEFINITION, lpDeviceName, Nothing))
End Function

''' <summary>
''' 仮想ドライブを解除します。
''' </summary>
''' <param name="lpDeviceName">ドライブ名</param>
''' <param name="lpTargetPath">指定場所</param>
''' <returns></returns>
Public Function UnmapDrive(lpDeviceName As String, lpTargetPath As String) As Boolean
    Return (DefineDosDevice(DDD_REMOVE_DEFINITION Or DDD_EXACT_MATCH_ON_REMOVE, lpDeviceName, lpTargetPath))
End Function

ドライブ解除

'ドライブ指定でドライブ解除する
Dim rc = UnmapDrive("U:")

'ドライブとフォルダ指定でドライブを解除する
Dim rc = UnmapDrive("U:", "C:\Work")