techomancer/nvme2k: NVME driver for Windows 2000

An NVMe (Non-Volatile Memory Express) storage controller driver for Windows 2000, targeting both x86 and alpha AXP platforms.

NVMe2K is a SCSI miniport driver that provides NVMe device support for Windows 2000. It uses the ScsiPort framework to integrate NVMe solid-state drives with the Windows 2000 storage stack.

At first it seemed like a good idea.

Application Layer
       ↓
  SCSI Disk Driver
       ↓
   ScsiPort.sys
       ↓
   nvme2k.sys ← This driver
       ↓
  NVMe Controller (PCI)
  • nvme2k.c – main driver logic
  • nvme2k_nvme.c – NVMe controller logic
  • nvme2k_scsi.c – SCSI command handling
  • nvme2k_cpl.c – NVMe Completion Management
  • nvme2k.h – Data structures, constants, NVMe register definitions
  • nvme2k.inf – Multi-platform installation file
  • windows 2000 ddk

    • Last version for x86 (5.00.2195.1).
    • RC1 version for alpha AXP (does anyone besides the hoarders on betanews have RC2?)
  • Visual C++ 6.0

    • x86 compiler for x86 builds
    • Alpha AXP compiler for alpha builds
REM Set up build environment
cd C:\NTDDK\bin
setenv.bat C:\NTDDK free          REM or 'checked' for debug build

REM Navigate to driver directory
cd <path-to-nvme2k>

REM Build
build -cZ

Output: obj\i386\nvme2k.sys

REM Set up build environment for Alpha
cd C:\NTDDK\bin
setenv.bat C:\NTDDK free    REM or 'checked' for debug build

REM Navigate to driver directory
cd <path-to-nvme2k>

REM Build
build -cZ

Output: obj\alpha\nvme2k.sys

edit nvme2k.h to configure:

#define NVME2K_DBG                    // Enable debug logging
// #define NVME2K_DBG_CMD             // Extra verbose command logging

Creating installation media

Create the following directory structure:

DriverDisk\
├── nvme2k.inf
├── i386\
│   └── nvme2k.sys    (x86 binary)
└── alpha\
    └── nvme2k.sys    (Alpha AXP binary)
  1. Copy driver files to installation media
  2. boot windows 2000
  3. Use Device Manager or Add Hardware Wizard
  4. Indicate driver’s location when prompted
  5. Select “NVMe Storage Controller (Windows 2000)”

Comment: The driver requires NVMe devices to be visible on the PCI bus with a class code 01-08-02 (Mass Storage – Non-Volatile Memory – NVMe).

The driver supports registry-based configuration via an INF file:

  • maxsglist (default: 512) – maximum scatter-collection list entries
  • number of requests (default: 32) – queue depth
  • Max Q Depth (default: 32) – tagged command queue depth

Enable checked (debug) builds and use WinDbg with the Windows 2000 kernel debugger:

!scsiport.miniport 
!devobj 

Debug messages are output through ScsiDebugPrint() And appears in the checked build.

  • Single I/O queue pair (no multi-queue support)
  • No MSI/MSI-X interrupt support (uses legacy INTx)
  • Maximum 10 concurrent large transfers (PRP list pool limit)
  • No namespace management (assumes namespace 1)
  • No power management features
  • Tested primarily in Windows 2000 RC2 in a virtualized environment and on alpha
  1. nontaggedinflight – Ensures only one non-tagged request at a time

All locks can be disabled through #define For performance testing.

  • uncaught extension – 64KB for queues and PRP lists (DMA-accessible)
  • admin queue – 4KB submission + 4KB completion (power-of-2 size)
  • I/O queue – 4KB submission + 4KB completion (power-of-2 size)
  • prp list pool – 40KB (10 pages) for scatter-archive.
Bit 15: Non-tagged flag (1 = non-tagged, 0 = tagged)
Bit 14: Ordered flush flag (for ORDERED queue tags)
Bits 0-13: QueueTag (tagged) or sequence number (non-tagged)
For admin queue command get log page, PRP slot is added to base CID
so we dont leak them if SRB is not available. For some reason SCSIPORT doesn't
return SRB when we ask it for SMART commands.

This project is licensed under 3-section BSD licenseSee the LICENSE file for full license text,

Use at your own risk. This driver is experimental and may cause data loss, system instability, or hardware damage. Not recommended for production use.

  • ✅ Free to use, modify and distribute
  • ✅ Commercial use permission
  • ✅ Permission to modify and redistribute
  • No warranty given
  • use at your own risk

Feel free to submit issues or pull requests. Areas of Interest:

  • multi-queue support
  • MSI-X interrupt support (is this even possible?)
  • power management
  • Additional SCSI Command Translations
  • performance optimization
  • nvme specification writer
  • Windows 2000 DDK Documentation
  • Alpha AXP Architecture Documentation
  • Everyone Who Thought It Was a Terrible Idea (You Were Right)

Disclaimer: This is an unofficial, community-developed driver. Not affiliated with any company or NVMe standards body.



<a href

Leave a Comment