Application or device that uses the NVMe interface does not work correctly in Windows 8.1 or Windows Server 2012 R2

Consider the following scenarios.

Scenario 1 
  • You install an application that uses the IOCTL_SCSI_PASS_THROUGH device control code on a computer that is running Windows 8.1 or Windows Server 2012 R2.
  • The application sends READ or WRITE commands by using the SCSI Pass-Through mechanism to the Non-Volatile Memory Express (NVMe) interface. The component for the NVMe interface in Windows is Stornvme.sys. 
  • The buffer size is not a multiple of the sector size. 
In this scenario, data corruption occurs.

Scenario 2

Assume that you install an NVMe device on a Windows 8.1-based or Windows Server 2012 R2-based computer. When the NVMe device reports a health status issue or a Self-Monitoring, Analysis, and Reporting Technology (SMART) status issue by using the Async event, many Async events are used unexpectedly. 
Scenario 1

This issue occurs because the NVMe device and the StorNVMe interface support Physical Region Page (PRP) lists only for data transfer operations.

When Windows performs a data transfer operation, the device receives a memory starting address and the sector count that is transferred. Therefore, when the data buffer size is not a multiple of the sector sizes, READ and WRITE commands do not work correctly. More specifically, READ commands cause the device to transfer more data than the data buffer size, and WRITE commands cause the device to write to the disk with random kernel memory data in the data buffer.

Note Unlike other device protocols that support Scatter/Gather Lists that have buffer lengths in bytes, the PRP list for the data transfer only knows the sector count to be transferred. Therefore, StorNVMe converts the data transfer size to a sector size. 

Scenario 2

This issue occurs because the Stornvme.sys driver clears the report when the NVMe device generates the SMART Async event. Therefore, the device is in a loop of sending an Async event if the health state of the controller does not change.

Update information

To resolve this issue, install update rollup 2887595. For more information about how to obtain this update rollup package, click the following article number to go to the article in the Microsoft Knowledge Base:
2887595 Windows RT 8.1, Windows 8.1, and Windows Server 2012 R2 update rollup: November 2013
Microsoft has confirmed that this is a problem in the Microsoft products that are listed in the "Applies to" section.
More information
For more information about software update terminology, click the following article number to view the article in the Microsoft Knowledge Base:
824684 Description of the standard terminology that is used to describe Microsoft software updates

Article ID: 2897143 - Last Review: 12/18/2013 07:33:00 - Revision: 2.0

Windows 8.1, Windows 8.1 Enterprise, Windows 8.1 Pro, Windows Server 2012 R2 Datacenter, Windows Server 2012 R2 Essentials, Windows Server 2012 R2 Foundation, Windows Server 2012 R2 Standard

  • kbqfe kbhotfixserver kbfix kbexpertiseadvanced kbsurveynew KB2897143