マウントポイントにボリュームをマウントする <TOP>
SetVolumeMountPoint 指定したマウントポイントにボリュームをマウントする
DeleteVolumeMountPoint
指定したマウントポイントからボリュームをアンマウントする
GetVolumeNameForVolumeMountPoint 一意のボリューム名を返す
DefineDosDevice MS-DOS デバイス名の定義、再定義、削除
QueryDosDevice MS-DOS デバイス名に対する現在のマッピングを取得
例では、Dドライブに「MountTest」フォルダを作成しておき、Eドライブ情報をマウント、アンマウントしています。
'================================================================ '= マウントポイントにボリュームをマウントする '= (SetVolumeMountPoint.bas) '================================================================ #include "Windows.bi" ' 指定したマウントポイントにボリュームをマウントする Declare Function Api_SetVolumeMountPoint& Lib "kernel32" Alias "SetVolumeMountPointA" (ByVal lpszVolumeMountPoint$, ByVal lpszVolumeName$) ' 指定したマウントポイントからボリュームをアンマウントする Declare Function Api_DeleteVolumeMountPoint& Lib "kernel32" Alias "DeleteVolumeMountPointA" (ByVal lpszVolumeMountPoint$) ' 一意のボリューム名を返す Declare Function Api_GetVolumeNameForVolumeMountPoint& Lib "kernel32" Alias "GetVolumeNameForVolumeMountPointA" (ByVal lpszVolumeMountPoint$, ByVal lpszVolumeName$, ByVal cchBufferLength&) ' MS-DOS デバイス名の定義、再定義、削除 Declare Function Api_DefineDosDevice& Lib "kernel32" Alias "DefineDosDeviceA" (ByVal dwFlags&, ByVal lpDeviceName$, ByVal lpTargetPath$) ' MS-DOS デバイス名に対する現在のマッピングを取得 Declare Function Api_QueryDosDevice& Lib "kernel32" Alias "QueryDosDeviceA" (ByVal lpDeviceName$, ByVal lpTargetPath$, ByVal ucchMax&) #define DDD_EXACT_MATCH_ON_REMOVE &H4 'DDD_REMOVE_DEFINITIONと共に指定すると、完全に一致するマッピングから、削除するマッピングを判断 #define DDD_RAW_TARGET_PATH &H1 'lpTargetPathに指定されている文字列は、ドライブパス #define DDD_REMOVE_DEFINITION &H2 '指定のデバイスの指定された定義を削除 Var Shared Text1 As Object Var Shared Button1 As Object Var Shared Button2 As Object Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14 Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 Button2.Attach GetDlgItem("Button2") : Button2.SetFontSize 14 '================================================================ '= CDドライブ『E:』を『D:\MountTest』にマウントする '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var MountPoint As String Var VolumeName As String Var DeviceName As String Var TargetPath As String Var DriveLetter As String Var NTDevice As String Var Ret As Long 'MS-DOS デバイス名に対する現在のマッピングを取得 DeviceName = "E:" 'CDドライブ TargetPath = String$(255, Chr(0)) Ret = Api_QueryDosDevice(DeviceName, TargetPath, Len(TargetPath)) TargetPath = Left$(TargetPath, InStr(TargetPath, Chr$(0)) - 1) '一時的に仮想ドライブに関連付ける DriveLetter = "I:" '空いてるドライブ指定 NTDevice = TargetPath Ret = Api_DefineDosDevice(DDD_RAW_TARGET_PATH, DriveLetter, NTDevice) If Ret Then 'ボリューム名の取得 MountPoint = "I:\" VolumeName = String$(255, Chr(0)) Ret = Api_GetVolumeNameForVolumeMountPoint(MountPoint, VolumeName, Len(VolumeName)) '関連付けの削除 Ret = Api_DefineDosDevice(DDD_RAW_TARGET_PATH Or DDD_REMOVE_DEFINITION Or DDD_EXACT_MATCH_ON_REMOVE, DriveLetter, NTDevice) VolumeName = Left$(VolumeName, InStr(VolumeName, Chr$(0)) - 1) 'ボリュームのマウント MountPoint = "D:\MountTest\" Ret = Api_SetVolumeMountPoint(MountPoint, VolumeName) If Ret <> 0 Then Text1.SetWindowText "マウント成功しました!" Else Text1.SetWindowText "マウント失敗しました!" End If End Sub '================================================================ '= '================================================================ Declare Sub Button2_on edecl () Sub Button2_on() Var MountPoint As String 'マウントポイント Var Ret As Long MountPoint = "D:\MountTest\" Ret = Api_DeleteVolumeMountPoint(MountPoint) If Ret <> 0 Then Text1.SetWindowText "アンマウント成功しました!" Else Text1.SetWindowText "アンマウント失敗しました!" End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End