[已解决] 如何判断分区是 写保护状态 或 不可写状态?
本帖最后由 yhxhappy 于 2012-5-8 08:40 编辑我试了 FileOpen 或 FileCopy,Iniwrite等方法,在不可写的分区内操作,都提示下图警告框:
我想能判断不可写又不弹出对话框。P版曾回答过类似问题:
判断是否有写入保护,发送IOCTL_DISK_IS_WRITABLE控制请求。
因水平有限,不知道上面说的方法什么用?
Const $DISK_PATH = "\\.\H:"
Const $IOCTL_DISK_IS_WRITABLE = 0x70024
Const $GENERIC_READ = 0x80000000
Const $ERROR_WRITE_PROTECT = 19
Local $hDiskDrive, $iStatus
$hDiskDrive = DllCall("Kernel32.dll", "handle", "CreateFileW", "wstr", $DISK_PATH, "dword", $GENERIC_READ, "long", 3, "ptr", 0, "dword", 3, "long", 0, "handle", 0)
$hDiskDrive = $hDiskDrive
$iStatus = DllCall("Kernel32.dll", "bool", "DeviceIoControl", "handle", $hDiskDrive, "dword", $IOCTL_DISK_IS_WRITABLE, "ptr", 0, "long", 0, "ptr", 0, "long", 0, "long*", 0, "ptr", 0)
If $iStatus Then
MsgBox(48, "OK", StringFormat("'%s' is writable.", $DISK_PATH))
Else
$iStatus = DllCall("Kernel32.dll", "long", "GetLastError")
If $iStatus = $ERROR_WRITE_PROTECT Then
MsgBox(48, "OK", StringFormat("'%s' is read-only.", $DISK_PATH))
Else
MsgBox(48, "Error", StringFormat("Cannot determine, error code: %d", $iStatus))
EndIf
EndIf
DllCall("Kernel32.dll", "bool", "CloseHandle", "handle", $hDiskDrive) 谢 谢 代 码. 回复 1# yhxhappy
2楼超版已经给出解答,建议楼主将贴修改为“已解决” 感谢P版的代码
页:
[1]