3

我编写了一小段代码来使用 DeviceIoControl API 和正确的 IOCTL 打开/关闭 cd/dvd 驱动器托盘,但我似乎无法检查托盘状态。

根据 msdn 页面(http://msdn.microsoft.com/en-us/library/aa363404%28v=VS.85%29.aspx),IOCTL_STORAGE_CHECK_VERIFY如果驱动器加载了有效媒体并且失败,则应该成功否则带有适当的错误代码。

21因此,当DeviceIoControl 失败时,我预计lasterror托盘打开和1112托盘关闭但设备中没有介质时。然而,它只会21在加载适当的媒体之前返回。

我错过了什么吗?有没有其他方法可以找出托盘状态?

此致,

4

2 回答 2

0

好吧,这个 API 的文档说明它返回驱动器中是否有磁盘,而没有关于托盘是否打开的信息。没有记录关于返回哪个错误代码的具体要求。在这两种情况下我也都得到 21。

我查看了文档,但找不到任何文档化的方式来执行您所要求的操作。对于大多数应用程序来说,托盘是否打开并不那么有趣。

于 2011-12-24T16:38:04.590 回答
0

我找不到读取驱动器托盘状态的方法。相反,我正在检查执行弹出命令所需的时间,如解释那里,如果弹出返回需要超过 100 毫秒,我假设我们实际上确实弹出了媒体。如果弹出命令完成得太快,则假设托盘已打开并需要关闭。似乎可以实现打开/关闭切换功能。时间会告诉我们:)

于 2015-09-03T16:15:53.960 回答