gpt4 book ai didi

c++ - IOCTL_ATA_PASS_THROUGH 是如何使用的?

转载 作者:行者123 更新时间:2023-11-28 05:29:42 26 4
gpt4 key购买 nike

我一直致力于创建一个程序来发送(最好是任意的)ATA 命令,到目前为止,我在 Windows 中找到的唯一选项是 IOCTL_ATA_PASS_THROUGH和一个相关的结构,ATA_PASS_THROUGH_EX使用 C++。

不幸的是,对于那些还不知道自己在做什么的人,我发现缺少文档。这是我还没有弄明白的:

  • 如何在语句中使用 IOCTL_ATA_PASS_THROUGH
  • 您将要发送的 ATA 命令放在哪里?
  • ATA_PASS_THROUGH_EX.DataTransferLength 应该是数据缓冲区的大小,以字节为单位。是结构 + ATA 命令,还是只是命令?
  • 如何选择命令要发送到哪个驱动器?
  • 驱动器的响应到哪里去了?

最佳答案

这对于评论来说有点太长了,所以我将其作为答案发布,但请注意,这主要是有根据的猜测。

如何在语句中使用 IOCTL_ATA_PASS_THROUGH?

这个很简单。与所有控制代码一样,它是使用 the DeviceIoControl function 发送的.

您将要发送的 ATA 命令放在哪里?

我不熟悉 ATA,但我猜是“命令寄存器”,即 CurrentTaskFile[6]。我想您可以找到一些关于 ATA 协议(protocol)的文档来解决这个问题。

ATA_PASS_THROUGH_EX.DataTransferLength 应该是数据缓冲区的大小,以字节为单位。是 struct + ATA 命令,还是只是命令?

文档说

If the embedded ATA command is a write operation, the size of the input buffer should be the sum of sizeof(ATA_PASS_THROUGH_EX) and the value in the DataTransferLength member of ATA_PASS_THROUGH_EX.

所以DataTransferLength肯定不包括ATA_PASS_THROUGH_EX结构体的长度。

如何选择命令要发送到哪个驱动器?

大概这是由您传递给 DeviceIoControl() 的设备句柄决定的。

驱动器的响应到哪里去了?

进入 DeviceIoControl() 输出缓冲区。

关于c++ - IOCTL_ATA_PASS_THROUGH 是如何使用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39812605/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com