应用程序或使用 NVMe 接口的设备无法在 Windows 8.1 或 Windows Server 2012 R2 中正常工作

适用于: Windows 8.1Windows 8.1 EnterpriseWindows 8.1 Pro 详细

症状


请考虑下面的方案。

方案 1 
  • 安装 Windows 8.1 或 Windows Server 2012 R2 正在运行的计算机使用的 IOCTL_SCSI_PASS_THROUGH 设备控制代码的应用程序。
  • 应用程序将读取或写入命令发送到非易失性内存高速 (NVMe) 接口使用的 SCSI 传递机制。在 Windows 中的 NVMe 接口的组件是 Stornvme.sys。
  • 缓冲区大小不是扇区大小的倍数。
在这种情况下,会发生数据损坏。

方案 2

假定您在基于 Windows 8.1 或基于 Windows Server 2012 R2 的计算机上安装 NVMe 设备。当 NVMe 设备通过使用异步事件报告健康状态问题或自我监控、 分析和报告技术 (SMART) 的状态问题时,很多异步事件用意外。

原因


方案 1

发生此问题是因为 NVMe 设备和 StorNVMe 接口支持物理区域页 (PRP) 只列出数据传输操作。

当 Windows 执行数据转移操作时,设备接收到内存起始地址和传输的扇区数。因此,当数据缓冲区大小不是倍数的扇区大小,阅读,并编写命令无法正常工作。更具体地说,读取命令导致设备传输数据的数据缓冲区大小,多于和写命令导致写入随机内核内存数据缓冲区中的数据与磁盘设备。

注意:与其他设备协议支持分散/集中列表具有缓冲区长度,以字节为单位,数据传输的 PRP 列表仅知道要传输的扇区数。因此,StorNVMe 将转换为扇区大小的数据传输大小。

方案 2

因为 Stornvme.sys 驱动程序清除报告了 NVMe 设备生成智能异步事件时,将出现此问题。因此,该设备是在发送一个异步事件,如果控制器的运行状况状态不会更改的循环中。

解决方案


更新信息

若要解决此问题,请安装更新汇总 2887595。有关如何获取此更新总成包的详细信息,请单击下面的文章编号,以转到 Microsoft 知识库中相应的文章:
2887595 Windows RT 8.1、 Windows 8.1 和 Windows Server 2012 R2 更新汇总︰ 11 月 2013年

状态


Microsoft 已经确认这是“适用于”一节中列出的 Microsoft 产品中的问题。

详细信息


有关软件更新术语的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
用于描述 Microsoft 软件更新的标准术语的824684说明