使用带有 FSCTL_LOCK_VOLUME 的 DeviceIoControl 来锁定卷。调试器问题

Posted

技术标签:

【中文标题】使用带有 FSCTL_LOCK_VOLUME 的 DeviceIoControl 来锁定卷。调试器问题【英文标题】:Using DeviceIoControl with FSCTL_LOCK_VOLUME to lock a volume. Debugger issue 【发布时间】:2012-09-30 11:04:49 【问题描述】:

我正在使用带有 FSCTL_LOCK_VOLUME 的 DeviceIoControl 在直接读/写磁盘之前锁定 USB 笔式驱动器。该程序有效 - 有时。 我遇到了锁定调用本身的问题。当我在 Visual Studio 2008 中执行命令时,结果是正确的并且锁定成功 - 每次!,当运行代码(调试或不调试)时,调用偶尔会失败,句柄无效。唯一显着的区别是在步进时会有半秒的暂停——我对此很满意,但在运行/调试时调用会立即失败。

请你给我一个提示,告诉我这是在哪里掉下来的。

我认为这是真正的技术人员!

【问题讨论】:

即使 CreateFile 为您返回了一个有效的句柄,但该句柄可能没有正确的规范以使您的 FSCTL_LOCK_VOLUME 操作正常工作。例如,必须指定 FILE_SHARE_READFILE_SHARE_WRITE。我对 DeviceIoControl 的体验是错误消息准确但基本详细。无效句柄意味着您的句柄对该操作无效。 【参考方案1】:

听起来像是一个计时错误。是否有其他线程可以访问句柄?如果是这样,其中一个可能会在您调用 DeviceIoControl 之前将其关闭。

【讨论】:

以上是关于使用带有 FSCTL_LOCK_VOLUME 的 DeviceIoControl 来锁定卷。调试器问题的主要内容,如果未能解决你的问题,请参考以下文章

HBase - 使用带有值列表的一列与使用带有列列表的一列族的优缺点是啥?

使用带有 ajax Rest 调用的 Spring CSRF 和带有 Thymeleaf 的 HTML 页面

如何使用带有或不带有 Appium 的 Robot Framework 集成 WinAppDriver?

如何在带有 React 的 Typescript/JSX 中使用带有箭头函数的泛型?

优化数据库有啥更好的方法:使用带有不同过滤器的一堆存储过程,还是使用带有 if 条件的单个存储过程?

使用带有数据数组的 Yii2 和带有排序和过滤的 Gridview