我一直在尝试使用 ATA_PASS_THROUGH_EX32 结构和 IOCTL_ATA_PASS_THROUGH IoControlCode 通过 WdfIoTargetSendIoctlSynchronously 发送原始 ATA 命令。我注意到除了 IOCTL_DISK_GET_DRIVE_GEOMETRY 之外的任何命令似乎都在我的 KMDF 驱动程序内部失败。
我已经构建了一个标准的 32 位可执行文件,并且可以完美地使用 IOCTL_ATA_PASS_THROUGH。驱动程序不会从 WdfIoTargetSendIoctlSynchronously 的 NTStatus 返回值中获得除 STATUS_INVALID_PARAMETER 之外的任何错误。
有没有人有任何想法?
采取的步骤:
- WdfIoT目标创建
- WdfIoTargetOpen
- WdfRequest创建
- WdfMemoryCreate -> WDF_MEMORY_DESCRIPTOR_INIT_BUFFER -> ATA_PASS_THROUGH_EX32
- WdfMemoryCreate -> WDF_MEMORY_DESCRIPTOR_INIT_BUFFER -> OutputBuffer
- WdfIoTargetSendIoctlSynchronously