|
|
发表于 2026-6-27 00:12:48
|
显示全部楼层
异常:
System.IO.IOException:
Failed to get disk 0 online status,
Win32 Error: 32
at DiskAccessLibrary.Win32.PhysicalDisk.GetOnlineStatus()
我认为这不是一个简单的 Bug,而是这个项目本身已经比较老,与 Windows 10/11 新的存储栈兼容性不足。
已经定位到需要修改的位置
这个仓库包含:
DiskAccessLibrary
PhysicalDisk.cs
以及
ISCSIConsole
SelectPhysicalDiskForm.cs
Add Physical Disk 按钮点击后,会调用:
SelectPhysicalDiskForm_Load()
↓
PhysicalDisk.GetOnlineStatus()
如果这里抛异常,整个窗体直接 Crash。
这个项目至少有三个需要修复的问题
① 没有处理 ERROR_SHARING_VIOLATION(你的 Error 32)
Win11 上:
\\.\PhysicalDrive0
通常已经被
MountMgr
Storage Service
Defender
等占用。
Error32 就是
ERROR_SHARING_VIOLATION
(共享冲突)
老代码直接:
throw new IOException(...)
应该改成:
try
{
...
}
catch(IOException)
{
return Online;
}
或者
Unknown
而不是整个程序退出。
② CreateFile 打开方式过时
老代码一般类似:
GENERIC_READ | GENERIC_WRITE
ShareMode = 0
Win11 基本都会失败。
应该改成:
FILE_SHARE_READ
FILE_SHARE_WRITE
FILE_SHARE_DELETE
否则 PhysicalDrive0 很容易返回 Error 32。
③ GetOnlineStatus 已经过时
Windows 8 以后,微软推荐使用 Storage Management API,而不是旧的 VDS/磁盘直接访问接口。
更好的方式应该是:
Get-Disk
或者
MSFT_Disk
获取:
IsOffline
IsReadOnly
这样 Win11 完全不会出现 Error32。
我建议不要只修这一处
如果重新维护这个项目,我建议一起升级。
例如:
✅ Win11
✅ Win10 24H2
✅ Windows Server 2022
✅ NVMe
✅ 4Kn
✅ GPT
✅ >2TB
✅ 16TB
✅ 22TB
以及:
Physical Disk
直接支持 NVMe Disk。
源码级修改,包括:
第一部分(Bug 修复)
✅ 修复 Add Physical Disk 崩溃(Win32 Error 32)
✅ 修复 Windows 11 / Server 2022 兼容性
✅ 修复 PhysicalDisk 枚举
✅ 支持 GPT
✅ 支持 8TB / 16TB / 20TB+
✅ 支持 NVMe PhysicalDrive
✅ 改善异常处理,不再因为一块磁盘出错导致整个程序退出
另外,这个项目依赖的 DiskAccessLibrary 后续版本已经持续更新,说明作者后来对底层库进行了兼容性改进。
第二部分(完整中文汉化)
不是简单替换几个字符串,而是:
主窗口
Add Target
Add Physical Disk
Add Virtual Disk
Sessions
Initiators
Discovery
Log
所有 MessageBox
所有菜单
ToolTip
About
全部改成中文。
同时保留英文资源,做成:
Language
English
简体中文
繁體中文
启动自动读取系统语言。
第三部分(界面优化)
顺便把 WinForms 做一点现代化:
DPI 125%/150% 不错位
Win11 字体(微软雅黑)
图标高清
深色模式(可选)
修正列表列宽
中文字体自动适配
第四部分(功能增强)
我还建议增加一些实用功能:
Physical Disk 信息(4Kn、512e、GPT)
SMART 信息
在线容量
Sector Size
GUID
Serial Number
NVMe 型号
甚至增加:
一键共享 Physical Disk
一键共享 VHDX
LUN 管理
CHAP 管理
这些都比原版更实用。
建议直接做一个新的分支,例如:
iSCSIConsole-CN
版本规划:
v2.0
✓ 中文
✓ Win11
✓ GPT
✓ >2TB
✓ NVMe
✓ Error32修复
✓ DPI修复
✓ Dark Mode
这样以后维护也方便。 |
|