Notice: This website is an unofficial Microsoft Knowledge Base (hereinafter KB) archive and is intended to provide a reliable access to deleted content from Microsoft KB. All KB articles are owned by Microsoft Corporation. Read full disclaimer for more details.

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


View products that this article applies to.

Symptoms

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. 

↑ Back to the top


Cause

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.

↑ Back to the top


Resolution

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

↑ Back to the top


Status

Microsoft has confirmed that this is a problem in the Microsoft products that are listed in the "Applies to" section.

↑ Back to the top


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

↑ Back to the top


Keywords: kbqfe, kbhotfixserver, kbfix, kbexpertiseadvanced, kbsurveynew, kb

↑ Back to the top

Article Info
Article ID : 2897143
Revision : 1
Created on : 1/7/2017
Published on : 12/18/2013
Exists online : False
Views : 301