锁定光驱在Win2000上的实现

最近看到很多朋友在讨论如何锁住光驱的问题,但是没有一个结果。

趁着周末闲,写出代码和大家一起分享。

新建一个工程,在窗体上加入两个按钮,粘贴以下程序,看看效果怎么样?^_^

Option Explicit
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 OPEN_EXISTING As Long = 3
Private Const IOCTL_STORAGE_MEDIA_REMOVAL As Long = &H2D4804

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 LockCDROM(szDrive As String, IsLock As Boolean) As Boolean
    On Error GoTo Err
    Dim hDevice As Long
    Dim PMR As PREVENT_MEDIA_REMOVAL
    Dim bytesReturned As Long
    Dim Success As Long
    hDevice = CreateFile("//./" & szDrive, GENERIC_READ, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0&, 0&)
    PMR.PreventMediaRemoval = CByte(Abs(IsLock))
    Success = DeviceIoControl(hDevice, IOCTL_STORAGE_MEDIA_REMOVAL, PMR, Len(PMR), ByVal 0&, 0&, bytesReturned, ByVal 0&)
    CloseHandle hDevice
    LockCDROM = True
    Exit Function
Err:
    LockCDROM = False
End Function

Private Sub Command1_Click()
   Dim ret As Boolean
   ret = LockCDROM("H:", True)  '我的光驱盘符是H:
   If ret Then
      MsgBox "锁定成功", vbInformation, "提示"
   Else
      MsgBox "锁定失败", vbInformation, "提示"
   End If
End Sub

Private Sub Command2_Click()
   Dim ret As Boolean
   ret = LockCDROM("H:", False)
   If ret Then
      MsgBox "解除锁定成功", vbInformation, "提示"
   Else
      MsgBox "解除锁定失败", vbInformation, "提示"
   End If
End Sub

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值