Back to Top

プログラムの覚書

Author Archives: miyunsarna

VB.NET フォルダをドライブとしてマウントする

フォルダをドライブとしてマウントする方法を記載します。

コマンドプロンプトを起動して、substコマンドで行えば出来ますので、外部コマンドとしてsubstを起動させる方法もありますが、Win32を使用してマウンとする方法を記載します。

kernel32.dllをインポートするので、Imports.System.Runtime.InteropServicesを記述します。

ドライブのマウントする

Imports System.Runtime.InteropServices

<DllImport("kernel32.dll")>
Public Shared Function DefineDosDevice(dwFlags As Integer, lpDeviceName As String, lpTargetPath As String) As Boolean
End Function

''' <summary>
''' 指定場所を仮想ドライブに割り当てます。
''' </summary>
''' <param name="lpDeviceName">ドライブ名</param>
''' <param name="lpTargetPath">指定場所</param>
''' <returns></returns>
Public Function MapDrive(lpDeviceName As String, lpTargetPath As String) As Boolean
    Return (DefineDosDevice(&H0, lpDeviceName, lpTargetPath))
End Function

指定フォルダをドライブに割り当てる

Dim rc = MapDrive("U:", "C:\Work")

デバイスパス指定で割り当てる

Dim rc = MapDrive("U:", "\Device\HarddiskVolume6")

フォルダではなくデバイスパスの指定で割り当てることも出来ます、その場合、DefineDosDevice()の第一引数を0から1に変えてください。

GUID指定で割り当てる

Dim rc = MapDrive("U:", "\\?\Volume{0f0eee7d-39d3-11e6-9ce5-001583544e78}\")

GUID指定でも割り当てることが出来ます。DefineDosDevice()の第一引数は0です。

 

VB.NET ドライブのGUIDを取得する

ドライブのGUIDを取得する方法を記載します。

ドライブの詳細情報を取得するためにManagementObjectSearcherクラスを使用します。

・System.Managementを参照設定で追加します。

ドライブのGUIDを取得する

Dim MS = New System.Management.ManagementObjectSearcher("Select * from Win32_Volume")

For Each mo As System.Management.ManagementObject In MS.Get()
    Dim guid = mo("DeviceID").ToString
    Dim DriveLetter = mo("DriveLetter")

    If DriveLetter IsNot Nothing AndAlso TypeOf DriveLetter Is String AndAlso DriveLetter.ToString().Length <> 0 Then
        Console.WriteLine("{0} {1}", DriveLetter, guid)
    End If
Next

・ManagementObjectSearcherクラスで、”Win32_Volume”を全て読み込みます。読み込んだ項目の中の”DriveLetter”にドライブ名(A:~Z:)がセットされています。

結果表示

D: \\?\Volume{195b0cc9-dbab-4a64-a313-330918cbd8a3}\
E: \\?\Volume{0f0eee7d-39d3-11e6-9ce5-001583544e78}\
C: \\?\Volume{b5159fc4-518d-11e5-99b8-806e6f6e6963}\