Download Latest Version NVMe_V1.5_20180719.rar (227.3 kB)
Email in envelope

Get an email when there's a new version of NVMe for Windows 2003 Server

Home
Name Modified Size InfoDownloads / Week
NVMe_V1.3_20180719.rar 2018-07-19 173.5 kB
NVMe_V1.5_20180719.rar 2018-07-19 227.3 kB
ReadMe.txt 2018-07-19 5.5 kB
Totals: 3 Items   406.4 kB 13

License and copyright information
-----------------------------------

Copyright (c) 2011-2012
Integrated Device Technology, Inc.
Intel Corporation
LSI Corporation

All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

  1. Redistributions of source code must retain the above copyright
     notice, this list of conditions and the following disclaimer.

  2. Redistributions in binary form must reproduce the above copyright
     notice, this list of conditions and the following disclaimer in the
     documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT,INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

The views and conclusions contained in the software and documentation
are those of the authors and should not be interpreted as representing
official policies, either expressed or implied, of Intel Corporation,
Integrated Device Technology Inc., or Sandforce Corporation.


Overview and Features
-----------------------

I created this patch of the original Community OFA NVMe Storport driver
to add support for Windows Server 2003 SP2 R2. The original driver only
supports operating systems starting with Windows 7.


Installation
--------------

You should install the latest storport hotfix KB943545 from Microsoft.
This hotfix contains driver version 5.2.3790.4173 of storport.sys. After
this hotfix is applied you can install the NVMe driver as usual. My tests
have been done with a Samsung M2 SSD Evo 960 500 GB.


Changelog Version 1.5 Build 20180713
--------------------------------------

- initial version, patched the OFA V1.5 driver source code to make it
  compatible with Windows Server 2003


Changelog Version 1.5 Build 20180719
--------------------------------------

- added driver signing and a catalog file to the driver, this way it can
  be used with test signing in Windows 10


Changelog Version 1.3 Build 20180719
--------------------------------------

- ported the patched code to version 1.3 by using the original OFA driver
  source code of version 1.3
- should fix a problem with Toshiba RD400 drives which only seem to work
  with the V1.3 driver from OFA and not the V1.5
- added driver signing and a catalog file to the driver, this way it can
  be used with test signing in Windows 10


How to compile NVMe driver
----------------------------

- install Windows Driver Kit version 7600.16385.1
- unpack NVMe.rar and copy the contents of the src folder to C:\NVMe
- run "make_chk.cmd" to create the checked build or run "make_fre.cmd" to create
  the free build from the directory "C:\NVMe\src"
- the final driver files can be found in "C:\NVMe\src\bin"


Why the Windows 7 OFA NVMe driver does not work on Windows Server 2003
------------------------------------------------------------------------

New funtions that get added to storport.sys by Microsoft are called extended
storport functions. These new extended functions are also the reason why some
miniport drivers build for Windows 7 can not run on Windows Server 2003. If an
extended function e.g. "StorPortGetSystemAddress" is called, storport.h has an
inline declaration like the following for this function:

ULONG FORCEINLINE StorPortGetSystemAddress(_In_ PVOID HwDeviceExtension,_In_ PSCSI_REQUEST_BLOCK Srb,_Outptr_ PVOID *SystemAddress)
{
    return StorPortExtendedFunction(ExtFunctionGetSystemAddress,HwDeviceExtension,Srb,SystemAddress);
}

Based on this declaration an extended function with the storport function code
"ExtFunctionGetSystemAddress" is called. If we disassemble a Windows Server 2003
storport.sys file with IDA, we can see exactly which extended storport functions
are supported by the binary. We search for "StorPortExtendedFunction", go to the
function body, search for the switch table and the cases. The extended function
cases start at zero and go to a predefined value. The cases correspond to the
enumeration _STORPORT_FUNCTION_CODE definition in storport.h of the Windows Driver
Development Kit. In case 0 we have the extended function "ExtFunctionAllocatePool",
in case 10 we have the extended function "ExtFunctionPutScatterGatherList". Even
the newest Windows 2003 Server storport.sys with file version 5.2.3790.4173 does
only support cases 0 to 10 and nothing more. So all the following functions in the
enumeration _STORPORT_FUNCTION_CODE had to be implemented by ourself if they are
used in the source code of the NVMe or any other storport miniport driver. If an
extended function code is not present in the used storport.sys we get the return
code 0xC1000002 (STOR_STATUS_NOT_IMPLEMENTED).

Source: ReadMe.txt, updated 2018-07-19