IOCTL_ATA_PASS_THROUGH 是如何使用的?
How is IOCTL_ATA_PASS_THROUGH used?
我一直致力于创建一个程序来发送(最好是任意的)ATA 命令,到目前为止,我在 Windows 中找到的唯一选择是 IOCTL_ATA_PASS_THROUGH and a related struct, ATA_PASS_THROUGH_EX 使用 C++。
不幸的是,对于那些还不知道自己在做什么的人,我发现缺少文档。这是我还没弄明白的:
- 如何在语句中使用
IOCTL_ATA_PASS_THROUGH
?
- 你把要发送的 ATA 命令放在哪里?
ATA_PASS_THROUGH_EX.DataTransferLength
应该是数据缓冲区的大小,以字节为单位。是struct + ATA命令,还是只是命令?
- 你怎么select命令去哪个驱动器?
- 驱动器的响应到哪里去了?
这对于评论来说有点太长了,所以我将其作为答案发布,但请注意,这主要是有根据的猜测。
如何在语句中使用IOCTL_ATA_PASS_THROUGH?
这个很简单。与所有控制代码一样,它使用 the DeviceIoControl function.
发送
你把ATA命令发到哪里去了?
我不熟悉 ATA,但我猜是 "command register",即 CurrentTaskFile[6]
。我想您可以找到一些关于 ATA 协议的文档来解决这个问题。
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
结构体的长度
你怎么select命令去哪个驱动?
大概这是由您传递给 DeviceIoControl() 的设备句柄决定的。
驱动器的响应到哪里去了?
进入 DeviceIoControl() 输出缓冲区。
我一直致力于创建一个程序来发送(最好是任意的)ATA 命令,到目前为止,我在 Windows 中找到的唯一选择是 IOCTL_ATA_PASS_THROUGH and a related struct, ATA_PASS_THROUGH_EX 使用 C++。
不幸的是,对于那些还不知道自己在做什么的人,我发现缺少文档。这是我还没弄明白的:
- 如何在语句中使用
IOCTL_ATA_PASS_THROUGH
? - 你把要发送的 ATA 命令放在哪里?
ATA_PASS_THROUGH_EX.DataTransferLength
应该是数据缓冲区的大小,以字节为单位。是struct + ATA命令,还是只是命令?- 你怎么select命令去哪个驱动器?
- 驱动器的响应到哪里去了?
这对于评论来说有点太长了,所以我将其作为答案发布,但请注意,这主要是有根据的猜测。
如何在语句中使用IOCTL_ATA_PASS_THROUGH?
这个很简单。与所有控制代码一样,它使用 the DeviceIoControl function.
发送你把ATA命令发到哪里去了?
我不熟悉 ATA,但我猜是 "command register",即 CurrentTaskFile[6]
。我想您可以找到一些关于 ATA 协议的文档来解决这个问题。
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
结构体的长度
你怎么select命令去哪个驱动?
大概这是由您传递给 DeviceIoControl() 的设备句柄决定的。
驱动器的响应到哪里去了?
进入 DeviceIoControl() 输出缓冲区。