Option Explicit Private Const DRIVE_REMOVABLE = 2 Private Const DRIVE_CDROM = 5 Private Const INVALID_HANDLE_VALUE As Long = -1& Private Const GENERIC_READ As Long = &H80000000 Private Const FILE_SHARE_READ As Long = &H1 Private Const FILE_SHARE_WRITE As Long = &H2 Private Const FILE_ANY_ACCESS As Long = &H0 Private Const FILE_READ_ACCESS As Long = &H1 Private Const FILE_WRITE_ACCESS As Long = &H2 Private Const OPEN_EXISTING As Long = 3 Private Const IOCTL_STORAGE_MEDIA_REMOVAL As Long = &H2D4804 Private Const IOCTL_STORAGE_EJECT_MEDIA As Long = &H2D4808 Private Type PREVENT_MEDIA_REMOVAL PreventMediaRemoval As Byte End Type Private Declare Function DeviceIoControl Lib "kernel32" (ByVal hDevice _ As Long, ByVal dwIoControlCode As Long, lpInBuffer As Any, ByVal _ nInBufferSize As Long, lpOutBuffer As Any, ByVal nOutBufferSize As _ Long, lpBytesReturned As Long, lpOverlapped As Any) As Long Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" _ (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal _ dwShareMode As Long, lpSecurityAttributes As Any, ByVal _ dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, _ ByVal hTemplateFile As Long) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As _ Long) As Long Public Function DeviceLock(sDrive As String, fLock As Boolean) As Long Dim hDevice As Long Dim PMR As PREVENT_MEDIA_REMOVAL Dim bytesReturned As Long Dim success As Long hDevice = CreateFile("\\.\" & sDrive, GENERIC_READ, _ FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, _ 0&, 0&) If hDevice <> INVALID_HANDLE_VALUE Then PMR.PreventMediaRemoval = CByte(Abs(fLock)) success = DeviceIoControl(hDevice, IOCTL_STORAGE_MEDIA_REMOVAL _ , PMR, Len(PMR), ByVal 0&, 0&, bytesReturned, ByVal 0&) If success = 0 Then success = Err.LastDllError Else success = 0 End If Else success = Err.LastDllError End If Call CloseHandle(hDevice) DeviceLock = success End Function Public Function Eject(sDrive As String) As Long Dim hDevice As Long Dim bytesReturned As Long Dim success As Long hDevice = CreateFile("\\.\" & sDrive, GENERIC_READ, _ FILE_SHARE_READ, ByVal 0&, OPEN_EXISTING, 0&, 0&) If hDevice <> INVALID_HANDLE_VALUE Then success = DeviceIoControl(hDevice, IOCTL_STORAGE_EJECT_MEDIA, _ 0, 0, 0, 0, 0, 0) If success = 0 Then success = Err.LastDllError Else success = 0 End If Else success = Err.LastDllError End If Call CloseHandle(hDevice) Eject = success End Function