【发布时间】:2015-07-28 13:51:19
【问题描述】:
我正在为 IOCTL_DISK_GET_DRIVE_LAYOUT_EX 函数编写一个托管包装器。它在我测试过的闪存驱动器上运行良好(使用“\\.\PHYSICALDRIVE1”来获取句柄)。但是在调用\\.\PHYSICALDRIVE0(系统驱动器)时,该功能无法正常工作,即:
第一次使用默认缓冲区大小调用它时,它会返回 INSUFFICIENT_BUFFER 错误。当缓冲区自动调整大小(使用 Marshal.GlobalHRealloc)并再次调用该函数时,它永远不会返回。
(我正在使用没有访问权限的有效句柄。)
可能是什么问题?
【问题讨论】:
-
磁盘是否干净(磁盘管理或
chkdsk没有报告错误)?它在本机代码(例如 C++)中是否正常工作? -
另外,您的路径似乎缺少一些 `\` 反斜杠
-
@BenVoigt - 你是对的。我没有意识到 S.O.在没有转义字符的情况下将它们剥离。磁盘没问题。 (这是我的主要驱动力!)