From a7f0bd170bf2c3692c9cd592e0e4774cb58faba5 Mon Sep 17 00:00:00 2001
From: Biswapriyo Nath <nathbap...@gmail.com>
Date: Thu, 30 Sep 2021 20:06:35 +0530
Subject: [PATCH] headers: Add nvme.h

Signed-off-by: Biswapriyo Nath <nathbap...@gmail.com>
---
 mingw-w64-headers/include/nvme.h | 2835 ++++++++++++++++++++++++++++++
 1 file changed, 2835 insertions(+)
 create mode 100644 mingw-w64-headers/include/nvme.h

diff --git a/mingw-w64-headers/include/nvme.h b/mingw-w64-headers/include/nvme.h
new file mode 100644
index 0000000..5787768
--- /dev/null
+++ b/mingw-w64-headers/include/nvme.h
@@ -0,0 +1,2835 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#ifndef NVME_INCLUDED
+#define NVME_INCLUDED
+
+#include <winapifamily.h>
+
+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
+
+typedef enum {
+    NVME_AMS_ROUND_ROBIN = 0,
+    NVME_AMS_WEIGHTED_ROUND_ROBIN_URGENT = 1
+} NVME_AMS_OPTION;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONGLONG MQES : 16;
+        ULONGLONG CQR : 1;
+        ULONGLONG AMS_WeightedRoundRobinWithUrgent : 1;
+        ULONGLONG AMS_VendorSpecific : 1;
+        ULONGLONG Reserved0 : 5;
+        ULONGLONG TO : 8;
+        ULONGLONG DSTRD : 4;
+        ULONGLONG NSSRS : 1;
+        ULONGLONG CSS_NVM : 1;
+        ULONGLONG CSS_Reserved0 : 1;
+        ULONGLONG CSS_Reserved1 : 1;
+        ULONGLONG CSS_Reserved2 : 1;
+        ULONGLONG CSS_Reserved3 : 1;
+        ULONGLONG CSS_Reserved4 : 1;
+        ULONGLONG CSS_MultipleIo : 1;
+        ULONGLONG CSS_AdminOnly : 1;
+        ULONGLONG Reserved2 : 3;
+        ULONGLONG MPSMIN : 4;
+        ULONGLONG MPSMAX : 4;
+        ULONGLONG Reserved3 : 8;
+    };
+    ULONGLONG AsUlonglong;
+} NVME_CONTROLLER_CAPABILITIES, *PNVME_CONTROLLER_CAPABILITIES;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG TER : 8;
+        ULONG MNR : 8;
+        ULONG MJR : 16;
+    };
+    ULONG AsUlong;
+} NVME_VERSION, *PNVME_VERSION;
+
+typedef enum {
+    NVME_CC_SHN_NO_NOTIFICATION = 0,
+    NVME_CC_SHN_NORMAL_SHUTDOWN = 1,
+    NVME_CC_SHN_ABRUPT_SHUTDOWN = 2
+} NVME_CC_SHN_SHUTDOWN_NOTIFICATIONS;
+
+typedef enum {
+    NVME_CSS_NVM_COMMAND_SET = 0,
+    NVME_CSS_ALL_SUPPORTED_IO_COMMAND_SET = 6,
+    NVME_CSS_ADMIN_COMMAND_SET_ONLY = 7
+} NVME_CSS_COMMAND_SETS;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG EN : 1;
+        ULONG Reserved0 : 3;
+        ULONG CSS : 3;
+        ULONG MPS : 4;
+        ULONG AMS : 3;
+        ULONG SHN : 2;
+        ULONG IOSQES : 4;
+        ULONG IOCQES : 4;
+        ULONG Reserved1 : 8;
+    };
+    ULONG AsUlong;
+} NVME_CONTROLLER_CONFIGURATION, *PNVME_CONTROLLER_CONFIGURATION;
+
+typedef enum {
+    NVME_CSTS_SHST_NO_SHUTDOWN = 0,
+    NVME_CSTS_SHST_SHUTDOWN_IN_PROCESS = 1,
+    NVME_CSTS_SHST_SHUTDOWN_COMPLETED = 2
+} NVME_CSTS_SHST_SHUTDOWN_STATUS;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG RDY : 1;
+        ULONG CFS : 1;
+        ULONG SHST : 2;
+        ULONG NSSRO : 1;
+        ULONG PP : 1;
+        ULONG Reserved0 : 26;
+    };
+    ULONG AsUlong;
+} NVME_CONTROLLER_STATUS, *PNVME_CONTROLLER_STATUS;
+
+typedef struct _NVME_NVM_SUBSYSTEM_RESET {
+    ULONG NSSRC;
+} NVME_NVM_SUBSYSTEM_RESET, *PNVME_NVM_SUBSYSTEM_RESET;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG ASQS : 12;
+        ULONG Reserved0 : 4;
+        ULONG ACQS : 12;
+        ULONG Reserved1 : 4;
+    };
+    ULONG AsUlong;
+} NVME_ADMIN_QUEUE_ATTRIBUTES, *PNVME_ADMIN_QUEUE_ATTRIBUTES;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONGLONG Reserved0 : 12;
+        ULONGLONG ASQB : 52;
+    };
+    ULONGLONG AsUlonglong;
+} NVME_ADMIN_SUBMISSION_QUEUE_BASE_ADDRESS, 
*PNVME_ADMIN_SUBMISSION_QUEUE_BASE_ADDRESS;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONGLONG Reserved0 : 12;
+        ULONGLONG ACQB : 52;
+    };
+    ULONGLONG AsUlonglong;
+} NVME_ADMIN_COMPLETION_QUEUE_BASE_ADDRESS, 
*PNVME_ADMIN_COMPLETION_QUEUE_BASE_ADDRESS;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG BIR : 3;
+        ULONG Reserved : 9;
+        ULONG OFST : 20;
+    };
+    ULONG AsUlong;
+} NVME_CONTROLLER_MEMORY_BUFFER_LOCATION, 
*PNVME_CONTROLLER_MEMORY_BUFFER_LOCATION;
+
+typedef enum {
+    NVME_CMBSZ_SIZE_UNITS_4KB = 0,
+    NVME_CMBSZ_SIZE_UNITS_64KB = 1,
+    NVME_CMBSZ_SIZE_UNITS_1MB = 2,
+    NVME_CMBSZ_SIZE_UNITS_16MB = 3,
+    NVME_CMBSZ_SIZE_UNITS_256MB = 4,
+    NVME_CMBSZ_SIZE_UNITS_4GB = 5,
+    NVME_CMBSZ_SIZE_UNITS_64GB = 6
+} NVME_CMBSZ_SIZE_UNITS;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG SQS : 1;
+        ULONG CQS : 1;
+        ULONG LISTS : 1;
+        ULONG RDS : 1;
+        ULONG WDS : 1;
+        ULONG Reserved : 3;
+        ULONG SZU : 4;
+        ULONG SZ : 20;
+    };
+    ULONG AsUlong;
+} NVME_CONTROLLER_MEMORY_BUFFER_SIZE, *PNVME_CONTROLLER_MEMORY_BUFFER_SIZE;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG SQT : 16;
+        ULONG Reserved0 : 16;
+    };
+    ULONG AsUlong;
+} NVME_SUBMISSION_QUEUE_TAIL_DOORBELL, *PNVME_SUBMISSION_QUEUE_TAIL_DOORBELL;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG CQH : 16;
+        ULONG Reserved0 : 16;
+    };
+    ULONG AsUlong;
+} NVME_COMPLETION_QUEUE_HEAD_DOORBELL, *PNVME_COMPLETION_QUEUE_HEAD_DOORBELL;
+
+typedef struct {
+    NVME_CONTROLLER_CAPABILITIES CAP;
+    NVME_VERSION VS;
+    ULONG INTMS;
+    ULONG INTMC;
+    NVME_CONTROLLER_CONFIGURATION CC;
+    ULONG Reserved0;
+    NVME_CONTROLLER_STATUS CSTS;
+    NVME_NVM_SUBSYSTEM_RESET NSSR;
+    NVME_ADMIN_QUEUE_ATTRIBUTES AQA;
+    NVME_ADMIN_SUBMISSION_QUEUE_BASE_ADDRESS ASQ;
+    NVME_ADMIN_COMPLETION_QUEUE_BASE_ADDRESS ACQ;
+    NVME_CONTROLLER_MEMORY_BUFFER_LOCATION CMBLOC;
+    NVME_CONTROLLER_MEMORY_BUFFER_SIZE CMBSZ;
+    ULONG Reserved2[944];
+    ULONG Reserved3[64];
+    ULONG Doorbells[0];
+} NVME_CONTROLLER_REGISTERS, *PNVME_CONTROLLER_REGISTERS;
+
+typedef union {
+    __C89_NAMELESS struct {
+        USHORT P : 1;
+        USHORT SC : 8;
+        USHORT SCT : 3;
+        USHORT Reserved : 2;
+        USHORT M : 1;
+        USHORT DNR : 1;
+    };
+    USHORT AsUshort;
+} NVME_COMMAND_STATUS, *PNVME_COMMAND_STATUS;
+
+typedef struct {
+    ULONG DW0;
+    ULONG DW1;
+    union {
+        __C89_NAMELESS struct {
+            USHORT SQHD;
+            USHORT SQID;
+        };
+        ULONG AsUlong;
+    } DW2;
+    union {
+        __C89_NAMELESS struct {
+            USHORT CID;
+            NVME_COMMAND_STATUS Status;
+        };
+        ULONG AsUlong;
+    } DW3;
+} NVME_COMPLETION_ENTRY, *PNVME_COMPLETION_ENTRY;
+
+typedef enum {
+    NVME_ASYNC_EVENT_TYPE_ERROR_STATUS = 0,
+    NVME_ASYNC_EVENT_TYPE_HEALTH_STATUS = 1,
+    NVME_ASYNC_EVENT_TYPE_NOTICE = 2,
+    NVME_ASYNC_EVENT_TYPE_IO_COMMAND_SET_STATUS = 6,
+    NVME_ASYNC_EVENT_TYPE_VENDOR_SPECIFIC = 7
+} NVME_ASYNC_EVENT_TYPES;
+
+typedef enum {
+    NVME_ASYNC_ERROR_INVALID_SUBMISSION_QUEUE = 0,
+    NVME_ASYNC_ERROR_INVALID_DOORBELL_WRITE_VALUE = 1,
+    NVME_ASYNC_ERROR_DIAG_FAILURE = 2,
+    NVME_ASYNC_ERROR_PERSISTENT_INTERNAL_DEVICE_ERROR = 3,
+    NVME_ASYNC_ERROR_TRANSIENT_INTERNAL_DEVICE_ERROR = 4,
+    NVME_ASYNC_ERROR_FIRMWARE_IMAGE_LOAD_ERROR = 5
+} NVME_ASYNC_EVENT_ERROR_STATUS_CODES;
+
+typedef enum {
+    NVME_ASYNC_HEALTH_NVM_SUBSYSTEM_RELIABILITY = 0,
+    NVME_ASYNC_HEALTH_TEMPERATURE_THRESHOLD = 1,
+    NVME_ASYNC_HEALTH_SPARE_BELOW_THRESHOLD = 2
+} NVME_ASYNC_EVENT_HEALTH_STATUS_CODES;
+
+typedef enum {
+    NVME_ASYNC_NOTICE_NAMESPACE_ATTRIBUTE_CHANGED = 0,
+    NVME_ASYNC_NOTICE_FIRMWARE_ACTIVATION_STARTING = 1,
+    NVME_ASYNC_NOTICE_TELEMETRY_LOG_CHANGED = 2,
+    NVME_ASYNC_NOTICE_ASYMMETRIC_ACCESS_CHANGE = 3,
+    NVME_ASYNC_NOTICE_PREDICTABLE_LATENCY_EVENT_AGGREGATE_LOG_CHANGE = 4,
+    NVME_ASYNC_NOTICE_LBA_STATUS_INFORMATION_ALERT = 5,
+    NVME_ASYNC_NOTICE_ENDURANCE_GROUP_EVENT_AGGREGATE_LOG_CHANGE = 6,
+    NVME_ASYNC_NOTICE_ZONE_DESCRIPTOR_CHANGED = 0xEF
+} NVME_ASYNC_EVENT_NOTICE_CODES;
+
+typedef enum {
+    NVME_ASYNC_IO_CMD_SET_RESERVATION_LOG_PAGE_AVAILABLE = 0,
+    NVME_ASYNC_IO_CMD_SANITIZE_OPERATION_COMPLETED = 1,
+    
NVME_ASYNC_IO_CMD_SANITIZE_OPERATION_COMPLETED_WITH_UNEXPECTED_DEALLOCATION = 2
+} NVME_ASYNC_EVENT_IO_COMMAND_SET_STATUS_CODES;
+
+typedef struct {
+    ULONG AsyncEventType : 3;
+    ULONG Reserved0 : 5;
+    ULONG AsyncEventInfo : 8;
+    ULONG LogPage : 8;
+    ULONG Reserved1 : 8;
+} NVME_COMPLETION_DW0_ASYNC_EVENT_REQUEST, 
*PNVME_COMPLETION_DW0_ASYNC_EVENT_REQUEST;
+
+typedef enum {
+    NVME_STATUS_TYPE_GENERIC_COMMAND = 0,
+    NVME_STATUS_TYPE_COMMAND_SPECIFIC = 1,
+    NVME_STATUS_TYPE_MEDIA_ERROR = 2,
+    NVME_STATUS_TYPE_VENDOR_SPECIFIC = 7
+} NVME_STATUS_TYPES;
+
+typedef enum {
+    NVME_STATUS_SUCCESS_COMPLETION = 0x00,
+    NVME_STATUS_INVALID_COMMAND_OPCODE = 0x01,
+    NVME_STATUS_INVALID_FIELD_IN_COMMAND = 0x02,
+    NVME_STATUS_COMMAND_ID_CONFLICT = 0x03,
+    NVME_STATUS_DATA_TRANSFER_ERROR = 0x04,
+    NVME_STATUS_COMMAND_ABORTED_DUE_TO_POWER_LOSS_NOTIFICATION = 0x05,
+    NVME_STATUS_INTERNAL_DEVICE_ERROR = 0x06,
+    NVME_STATUS_COMMAND_ABORT_REQUESTED = 0x07,
+    NVME_STATUS_COMMAND_ABORTED_DUE_TO_SQ_DELETION = 0x08,
+    NVME_STATUS_COMMAND_ABORTED_DUE_TO_FAILED_FUSED_COMMAND = 0x09,
+    NVME_STATUS_COMMAND_ABORTED_DUE_TO_FAILED_MISSING_COMMAND = 0x0A,
+    NVME_STATUS_INVALID_NAMESPACE_OR_FORMAT = 0x0B,
+    NVME_STATUS_COMMAND_SEQUENCE_ERROR = 0x0C,
+    NVME_STATUS_INVALID_SGL_LAST_SEGMENT_DESCR = 0x0D,
+    NVME_STATUS_INVALID_NUMBER_OF_SGL_DESCR = 0x0E,
+    NVME_STATUS_DATA_SGL_LENGTH_INVALID = 0x0F,
+    NVME_STATUS_METADATA_SGL_LENGTH_INVALID = 0x10,
+    NVME_STATUS_SGL_DESCR_TYPE_INVALID = 0x11,
+    NVME_STATUS_INVALID_USE_OF_CONTROLLER_MEMORY_BUFFER = 0x12,
+    NVME_STATUS_PRP_OFFSET_INVALID = 0x13,
+    NVME_STATUS_ATOMIC_WRITE_UNIT_EXCEEDED = 0x14,
+    NVME_STATUS_OPERATION_DENIED = 0x15,
+    NVME_STATUS_SGL_OFFSET_INVALID = 0x16,
+    NVME_STATUS_RESERVED = 0x17,
+    NVME_STATUS_HOST_IDENTIFIER_INCONSISTENT_FORMAT = 0x18,
+    NVME_STATUS_KEEP_ALIVE_TIMEOUT_EXPIRED = 0x19,
+    NVME_STATUS_KEEP_ALIVE_TIMEOUT_INVALID = 0x1A,
+    NVME_STATUS_COMMAND_ABORTED_DUE_TO_PREEMPT_ABORT = 0x1B,
+    NVME_STATUS_SANITIZE_FAILED = 0x1C,
+    NVME_STATUS_SANITIZE_IN_PROGRESS = 0x1D,
+    NVME_STATUS_SGL_DATA_BLOCK_GRANULARITY_INVALID = 0x1E,
+    NVME_STATUS_DIRECTIVE_TYPE_INVALID = 0x70,
+    NVME_STATUS_DIRECTIVE_ID_INVALID = 0x71,
+    NVME_STATUS_NVM_LBA_OUT_OF_RANGE = 0x80,
+    NVME_STATUS_NVM_CAPACITY_EXCEEDED = 0x81,
+    NVME_STATUS_NVM_NAMESPACE_NOT_READY = 0x82,
+    NVME_STATUS_NVM_RESERVATION_CONFLICT = 0x83,
+    NVME_STATUS_FORMAT_IN_PROGRESS = 0x84
+} NVME_STATUS_GENERIC_COMMAND_CODES;
+
+typedef enum {
+    NVME_STATUS_COMPLETION_QUEUE_INVALID = 0x00,
+    NVME_STATUS_INVALID_QUEUE_IDENTIFIER = 0x01,
+    NVME_STATUS_MAX_QUEUE_SIZE_EXCEEDED = 0x02,
+    NVME_STATUS_ABORT_COMMAND_LIMIT_EXCEEDED = 0x03,
+    NVME_STATUS_ASYNC_EVENT_REQUEST_LIMIT_EXCEEDED = 0x05,
+    NVME_STATUS_INVALID_FIRMWARE_SLOT = 0x06,
+    NVME_STATUS_INVALID_FIRMWARE_IMAGE = 0x07,
+    NVME_STATUS_INVALID_INTERRUPT_VECTOR = 0x08,
+    NVME_STATUS_INVALID_LOG_PAGE = 0x09,
+    NVME_STATUS_INVALID_FORMAT = 0x0A,
+    NVME_STATUS_FIRMWARE_ACTIVATION_REQUIRES_CONVENTIONAL_RESET = 0x0B,
+    NVME_STATUS_INVALID_QUEUE_DELETION = 0x0C,
+    NVME_STATUS_FEATURE_ID_NOT_SAVEABLE = 0x0D,
+    NVME_STATUS_FEATURE_NOT_CHANGEABLE = 0x0E,
+    NVME_STATUS_FEATURE_NOT_NAMESPACE_SPECIFIC = 0x0F,
+    NVME_STATUS_FIRMWARE_ACTIVATION_REQUIRES_NVM_SUBSYSTEM_RESET = 0x10,
+    NVME_STATUS_FIRMWARE_ACTIVATION_REQUIRES_RESET = 0x11,
+    NVME_STATUS_FIRMWARE_ACTIVATION_REQUIRES_MAX_TIME_VIOLATION = 0x12,
+    NVME_STATUS_FIRMWARE_ACTIVATION_PROHIBITED = 0x13,
+    NVME_STATUS_OVERLAPPING_RANGE = 0x14,
+    NVME_STATUS_NAMESPACE_INSUFFICIENT_CAPACITY = 0x15,
+    NVME_STATUS_NAMESPACE_IDENTIFIER_UNAVAILABLE = 0x16,
+    NVME_STATUS_NAMESPACE_ALREADY_ATTACHED = 0x18,
+    NVME_STATUS_NAMESPACE_IS_PRIVATE = 0x19,
+    NVME_STATUS_NAMESPACE_NOT_ATTACHED = 0x1A,
+    NVME_STATUS_NAMESPACE_THIN_PROVISIONING_NOT_SUPPORTED = 0x1B,
+    NVME_STATUS_CONTROLLER_LIST_INVALID = 0x1C,
+    NVME_STATUS_DEVICE_SELF_TEST_IN_PROGRESS = 0x1D,
+    NVME_STATUS_BOOT_PARTITION_WRITE_PROHIBITED = 0x1E,
+    NVME_STATUS_INVALID_CONTROLLER_IDENTIFIER = 0x1F,
+    NVME_STATUS_INVALID_SECONDARY_CONTROLLER_STATE = 0x20,
+    NVME_STATUS_INVALID_NUMBER_OF_CONTROLLER_RESOURCES = 0x21,
+    NVME_STATUS_INVALID_RESOURCE_IDENTIFIER = 0x22,
+    NVME_STATUS_SANITIZE_PROHIBITED_ON_PERSISTENT_MEMORY = 0x23,
+    NVME_STATUS_INVALID_ANA_GROUP_IDENTIFIER = 0x24,
+    NVME_STATUS_ANA_ATTACH_FAILED = 0x25,
+    NVME_IO_COMMAND_SET_NOT_SUPPORTED = 0x29,
+    NVME_IO_COMMAND_SET_NOT_ENABLED = 0x2A,
+    NVME_IO_COMMAND_SET_COMBINATION_REJECTED = 0x2B,
+    NVME_IO_COMMAND_SET_INVALID = 0x2C,
+    NVME_STATUS_STREAM_RESOURCE_ALLOCATION_FAILED = 0x7F,
+    NVME_STATUS_ZONE_INVALID_FORMAT = 0x7F,
+    NVME_STATUS_NVM_CONFLICTING_ATTRIBUTES = 0x80,
+    NVME_STATUS_NVM_INVALID_PROTECTION_INFORMATION = 0x81,
+    NVME_STATUS_NVM_ATTEMPTED_WRITE_TO_READ_ONLY_RANGE = 0x82,
+    NVME_STATUS_NVM_COMMAND_SIZE_LIMIT_EXCEEDED = 0x83,
+    NVME_STATUS_ZONE_BOUNDARY_ERROR = 0xB8,
+    NVME_STATUS_ZONE_FULL = 0xB9,
+    NVME_STATUS_ZONE_READ_ONLY = 0xBA,
+    NVME_STATUS_ZONE_OFFLINE = 0xBB,
+    NVME_STATUS_ZONE_INVALID_WRITE = 0xBC,
+    NVME_STATUS_ZONE_TOO_MANY_ACTIVE = 0xBD,
+    NVME_STATUS_ZONE_TOO_MANY_OPEN = 0xBE,
+    NVME_STATUS_ZONE_INVALID_STATE_TRANSITION = 0xBF
+} NVME_STATUS_COMMAND_SPECIFIC_CODES;
+
+typedef enum {
+    NVME_STATUS_NVM_WRITE_FAULT = 0x80,
+    NVME_STATUS_NVM_UNRECOVERED_READ_ERROR = 0x81,
+    NVME_STATUS_NVM_END_TO_END_GUARD_CHECK_ERROR = 0x82,
+    NVME_STATUS_NVM_END_TO_END_APPLICATION_TAG_CHECK_ERROR = 0x83,
+    NVME_STATUS_NVM_END_TO_END_REFERENCE_TAG_CHECK_ERROR = 0x84,
+    NVME_STATUS_NVM_COMPARE_FAILURE = 0x85,
+    NVME_STATUS_NVM_ACCESS_DENIED = 0x86,
+    NVME_STATUS_NVM_DEALLOCATED_OR_UNWRITTEN_LOGICAL_BLOCK = 0x87
+} NVME_STATUS_MEDIA_ERROR_CODES;
+
+typedef enum {
+    NVME_ADMIN_COMMAND_DELETE_IO_SQ = 0x00,
+    NVME_ADMIN_COMMAND_CREATE_IO_SQ = 0x01,
+    NVME_ADMIN_COMMAND_GET_LOG_PAGE = 0x02,
+    NVME_ADMIN_COMMAND_DELETE_IO_CQ = 0x04,
+    NVME_ADMIN_COMMAND_CREATE_IO_CQ = 0x05,
+    NVME_ADMIN_COMMAND_IDENTIFY = 0x06,
+    NVME_ADMIN_COMMAND_ABORT = 0x08,
+    NVME_ADMIN_COMMAND_SET_FEATURES = 0x09,
+    NVME_ADMIN_COMMAND_GET_FEATURES = 0x0A,
+    NVME_ADMIN_COMMAND_ASYNC_EVENT_REQUEST = 0x0C,
+    NVME_ADMIN_COMMAND_NAMESPACE_MANAGEMENT = 0x0D,
+    NVME_ADMIN_COMMAND_FIRMWARE_ACTIVATE = 0x10,
+    NVME_ADMIN_COMMAND_FIRMWARE_COMMIT = 0x10,
+    NVME_ADMIN_COMMAND_FIRMWARE_IMAGE_DOWNLOAD = 0x11,
+    NVME_ADMIN_COMMAND_DEVICE_SELF_TEST = 0x14,
+    NVME_ADMIN_COMMAND_NAMESPACE_ATTACHMENT = 0x15,
+    NVME_ADMIN_COMMAND_DIRECTIVE_SEND = 0x19,
+    NVME_ADMIN_COMMAND_DIRECTIVE_RECEIVE = 0x1A,
+    NVME_ADMIN_COMMAND_VIRTUALIZATION_MANAGEMENT = 0x1C,
+    NVME_ADMIN_COMMAND_NVME_MI_SEND = 0x1D,
+    NVME_ADMIN_COMMAND_NVME_MI_RECEIVE = 0x1E,
+    NVME_ADMIN_COMMAND_DOORBELL_BUFFER_CONFIG = 0x7C,
+    NVME_ADMIN_COMMAND_FORMAT_NVM = 0x80,
+    NVME_ADMIN_COMMAND_SECURITY_SEND = 0x81,
+    NVME_ADMIN_COMMAND_SECURITY_RECEIVE = 0x82,
+    NVME_ADMIN_COMMAND_SANITIZE = 0x84,
+    NVME_ADMIN_COMMAND_GET_LBA_STATUS = 0x86
+} NVME_ADMIN_COMMANDS;
+
+typedef enum {
+    NVME_FEATURE_ARBITRATION = 0x01,
+    NVME_FEATURE_POWER_MANAGEMENT = 0x02,
+    NVME_FEATURE_LBA_RANGE_TYPE = 0x03,
+    NVME_FEATURE_TEMPERATURE_THRESHOLD = 0x04,
+    NVME_FEATURE_ERROR_RECOVERY = 0x05,
+    NVME_FEATURE_VOLATILE_WRITE_CACHE = 0x06,
+    NVME_FEATURE_NUMBER_OF_QUEUES = 0x07,
+    NVME_FEATURE_INTERRUPT_COALESCING = 0x08,
+    NVME_FEATURE_INTERRUPT_VECTOR_CONFIG = 0x09,
+    NVME_FEATURE_WRITE_ATOMICITY = 0x0A,
+    NVME_FEATURE_ASYNC_EVENT_CONFIG = 0x0B,
+    NVME_FEATURE_AUTONOMOUS_POWER_STATE_TRANSITION = 0x0C,
+    NVME_FEATURE_HOST_MEMORY_BUFFER = 0x0D,
+    NVME_FEATURE_TIMESTAMP = 0x0E,
+    NVME_FEATURE_KEEP_ALIVE = 0x0F,
+    NVME_FEATURE_HOST_CONTROLLED_THERMAL_MANAGEMENT = 0x10,
+    NVME_FEATURE_NONOPERATIONAL_POWER_STATE = 0x11,
+    NVME_FEATURE_READ_RECOVERY_LEVEL_CONFIG = 0x12,
+    NVME_FEATURE_PREDICTABLE_LATENCY_MODE_CONFIG = 0x13,
+    NVME_FEATURE_PREDICTABLE_LATENCY_MODE_WINDOW = 0x14,
+    NVME_FEATURE_LBA_STATUS_INFORMATION_REPORT_INTERVAL = 0x15,
+    NVME_FEATURE_HOST_BEHAVIOR_SUPPORT = 0x16,
+    NVME_FEATURE_SANITIZE_CONFIG = 0x17,
+    NVME_FEATURE_ENDURANCE_GROUP_EVENT_CONFIG = 0x18,
+    NVME_FEATURE_IO_COMMAND_SET_PROFILE = 0x19,
+    NVME_FEATURE_ENHANCED_CONTROLLER_METADATA = 0x7D,
+    NVME_FEATURE_CONTROLLER_METADATA = 0x7E,
+    NVME_FEATURE_NAMESPACE_METADATA = 0x7F,
+    NVME_FEATURE_NVM_SOFTWARE_PROGRESS_MARKER = 0x80,
+    NVME_FEATURE_NVM_HOST_IDENTIFIER = 0x81,
+    NVME_FEATURE_NVM_RESERVATION_NOTIFICATION_MASK = 0x82,
+    NVME_FEATURE_NVM_RESERVATION_PERSISTANCE = 0x83,
+    NVME_FEATURE_NVM_NAMESPACE_WRITE_PROTECTION_CONFIG = 0x84,
+    NVME_FEATURE_ERROR_INJECTION = 0xC0,
+    NVME_FEATURE_CLEAR_FW_UPDATE_HISTORY = 0xC1,
+    NVME_FEATURE_READONLY_WRITETHROUGH_MODE = 0xC2,
+    NVME_FEATURE_CLEAR_PCIE_CORRECTABLE_ERROR_COUNTERS = 0xC3,
+    NVME_FEATURE_ENABLE_IEEE1667_SILO = 0xC4,
+    NVME_FEATURE_PLP_HEALTH_MONITOR = 0xC5
+} NVME_FEATURES;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG SQID : 8;
+        ULONG CID : 16;
+    };
+    ULONG AsUlong;
+} NVME_CDW10_ABORT, *PNVME_CDW10_ABORT;
+
+typedef enum {
+    NVME_IDENTIFY_CNS_SPECIFIC_NAMESPACE = 0x0,
+    NVME_IDENTIFY_CNS_CONTROLLER = 0x1,
+    NVME_IDENTIFY_CNS_ACTIVE_NAMESPACES = 0x2,
+    NVME_IDENTIFY_CNS_DESCRIPTOR_NAMESPACE = 0x3,
+    NVME_IDENTIFY_CNS_NVM_SET = 0x4,
+    NVME_IDENTIFY_CNS_SPECIFIC_NAMESPACE_IO_COMMAND_SET = 0x5,
+    NVME_IDENTIFY_CNS_SPECIFIC_CONTROLLER_IO_COMMAND_SET = 0x6,
+    NVME_IDENTIFY_CNS_ACTIVE_NAMESPACE_LIST_IO_COMMAND_SET = 0x7,
+    NVME_IDENTIFY_CNS_ALLOCATED_NAMESPACE_LIST = 0x10,
+    NVME_IDENTIFY_CNS_ALLOCATED_NAMESPACE = 0x11,
+    NVME_IDENTIFY_CNS_CONTROLLER_LIST_OF_NSID = 0x12,
+    NVME_IDENTIFY_CNS_CONTROLLER_LIST_OF_NVM_SUBSYSTEM = 0x13,
+    NVME_IDENTIFY_CNS_PRIMARY_CONTROLLER_CAPABILITIES = 0x14,
+    NVME_IDENTIFY_CNS_SECONDARY_CONTROLLER_LIST = 0x15,
+    NVME_IDENTIFY_CNS_NAMESPACE_GRANULARITY_LIST = 0x16,
+    NVME_IDENTIFY_CNS_UUID_LIST = 0x17,
+    NVME_IDENTIFY_CNS_DOMAIN_LIST = 0x18,
+    NVME_IDENTIFY_CNS_ENDURANCE_GROUP_LIST = 0x19,
+    NVME_IDENTIFY_CNS_ALLOCATED_NAMSPACE_LIST_IO_COMMAND_SET = 0x1A,
+    NVME_IDENTIFY_CNS_ALLOCATED_NAMESPACE_IO_COMMAND_SET = 0x1B,
+    NVME_IDENTIFY_CNS_IO_COMMAND_SET = 0x1C
+} NVME_IDENTIFY_CNS_CODES;
+
+typedef enum {
+    NVME_COMMAND_SET_NVM = 0x0,
+    NVME_COMMAND_SET_KEY_VALUE = 0x1,
+    NVME_COMMAND_SET_ZONED_NAMESPACE = 0x2
+} NVME_COMMAND_SET_IDENTIFIERS;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG CNS : 8;
+        ULONG Reserved : 8;
+        ULONG CNTID : 16;
+    };
+    ULONG AsUlong;
+} NVME_CDW10_IDENTIFY, *PNVME_CDW10_IDENTIFY;
+
+typedef union {
+    __C89_NAMELESS struct {
+        USHORT NVMSETID;
+        USHORT Reserved;
+    };
+    __C89_NAMELESS struct {
+        ULONG CNSID : 16;
+        ULONG Reserved2 : 8;
+        ULONG CSI : 8;
+    };
+    ULONG AsUlong;
+} NVME_CDW11_IDENTIFY, *PNVME_CDW11_IDENTIFY;
+
+typedef union {
+    __C89_NAMELESS struct {
+        USHORT MS;
+        UCHAR LBADS;
+        UCHAR RP : 2;
+        UCHAR Reserved0 : 6;
+    };
+    ULONG AsUlong;
+} NVME_LBA_FORMAT, *PNVME_LBA_FORMAT;
+
+typedef union {
+    __C89_NAMELESS struct {
+        UCHAR PersistThroughPowerLoss : 1;
+        UCHAR WriteExclusiveReservation : 1;
+        UCHAR ExclusiveAccessReservation : 1;
+        UCHAR WriteExclusiveRegistrantsOnlyReservation : 1;
+        UCHAR ExclusiveAccessRegistrantsOnlyReservation : 1;
+        UCHAR WriteExclusiveAllRegistrantsReservation : 1;
+        UCHAR ExclusiveAccessAllRegistrantsReservation : 1;
+        UCHAR Reserved : 1;
+    };
+    UCHAR AsUchar;
+} NVM_RESERVATION_CAPABILITIES, *PNVME_RESERVATION_CAPABILITIES;
+
+typedef struct {
+    ULONGLONG NSZE;
+    ULONGLONG NCAP;
+    ULONGLONG NUSE;
+    struct {
+        UCHAR ThinProvisioning : 1;
+        UCHAR NameSpaceAtomicWriteUnit : 1;
+        UCHAR DeallocatedOrUnwrittenError : 1;
+        UCHAR SkipReuseUI : 1;
+        UCHAR NameSpaceIoOptimization : 1;
+        UCHAR Reserved : 3;
+    } NSFEAT;
+    UCHAR NLBAF;
+    struct {
+        UCHAR LbaFormatIndex : 4;
+        UCHAR MetadataInExtendedDataLBA : 1;
+        UCHAR Reserved : 3;
+    } FLBAS;
+    struct {
+        UCHAR MetadataInExtendedDataLBA : 1;
+        UCHAR MetadataInSeparateBuffer : 1;
+        UCHAR Reserved : 6;
+    } MC;
+    struct {
+        UCHAR ProtectionInfoType1 : 1;
+        UCHAR ProtectionInfoType2 : 1;
+        UCHAR ProtectionInfoType3 : 1;
+        UCHAR InfoAtBeginningOfMetadata : 1;
+        UCHAR InfoAtEndOfMetadata : 1;
+        UCHAR Reserved : 3;
+    } DPC;
+    struct {
+        UCHAR ProtectionInfoTypeEnabled : 3;
+        UCHAR InfoAtBeginningOfMetadata : 1;
+        UCHAR Reserved : 4;
+    } DPS;
+    struct {
+        UCHAR SharedNameSpace : 1;
+        UCHAR Reserved : 7;
+    } NMIC;
+    NVM_RESERVATION_CAPABILITIES RESCAP;
+    struct {
+        UCHAR PercentageRemained : 7;
+        UCHAR Supported : 1;
+    } FPI;
+    struct {
+        UCHAR ReadBehavior : 3;
+        UCHAR WriteZeroes : 1;
+        UCHAR GuardFieldWithCRC : 1;
+        UCHAR Reserved : 3;
+    } DLFEAT;
+    USHORT NAWUN;
+    USHORT NAWUPF;
+    USHORT NACWU;
+    USHORT NABSN;
+    USHORT NABO;
+    USHORT NABSPF;
+    USHORT NOIOB;
+    UCHAR NVMCAP[16];
+    USHORT NPWG;
+    USHORT NPWA;
+    USHORT NPDG;
+    USHORT NPDA;
+    USHORT NOWS;
+    USHORT MSSRL;
+    ULONG MCL;
+    UCHAR MSRC;
+    UCHAR Reserved2[11];
+    ULONG ANAGRPID;
+    UCHAR Reserved3[3];
+    struct {
+        UCHAR WriteProtected : 1;
+        UCHAR Reserved : 7;
+    } NSATTR;
+    USHORT NVMSETID;
+    USHORT ENDGID;
+    UCHAR NGUID[16];
+    UCHAR EUI64[8];
+    NVME_LBA_FORMAT LBAF[16];
+    UCHAR Reserved4[192];
+    UCHAR VS[3712];
+} NVME_IDENTIFY_NAMESPACE_DATA, *PNVME_IDENTIFY_NAMESPACE_DATA;
+
+typedef struct {
+    USHORT MP;
+    UCHAR Reserved0;
+    UCHAR MPS : 1;
+    UCHAR NOPS : 1;
+    UCHAR Reserved1 : 6;
+    ULONG ENLAT;
+    ULONG EXLAT;
+    UCHAR RRT : 5;
+    UCHAR Reserved2 : 3;
+    UCHAR RRL : 5;
+    UCHAR Reserved3 : 3;
+    UCHAR RWT : 5;
+    UCHAR Reserved4 : 3;
+    UCHAR RWL : 5;
+    UCHAR Reserved5 : 3;
+    USHORT IDLP;
+    UCHAR Reserved6 : 6;
+    UCHAR IPS : 2;
+    UCHAR Reserved7;
+    USHORT ACTP;
+    UCHAR APW : 3;
+    UCHAR Reserved8 : 3;
+    UCHAR APS : 2;
+    UCHAR Reserved9[9];
+} NVME_POWER_STATE_DESC, *PNVME_POWER_STATE_DESC;
+
+typedef struct {
+    USHORT VID;
+    USHORT SSVID;
+    UCHAR SN[20];
+    UCHAR MN[40];
+    UCHAR FR[8];
+    UCHAR RAB;
+    UCHAR IEEE[3];
+    struct {
+        UCHAR MultiPCIePorts : 1;
+        UCHAR MultiControllers : 1;
+        UCHAR SRIOV : 1;
+        UCHAR Reserved : 5;
+    } CMIC;
+    UCHAR MDTS;
+    USHORT CNTLID;
+    ULONG VER;
+    ULONG RTD3R;
+    ULONG RTD3E;
+    struct {
+        ULONG Reserved0 : 8;
+        ULONG NamespaceAttributeChanged : 1;
+        ULONG FirmwareActivation : 1;
+        ULONG Reserved1 : 1;
+        ULONG AsymmetricAccessChanged : 1;
+        ULONG PredictableLatencyAggregateLogChanged : 1;
+        ULONG LbaStatusChanged : 1;
+        ULONG EnduranceGroupAggregateLogChanged : 1;
+        ULONG Reserved2 : 12;
+        ULONG ZoneInformation : 1;
+        ULONG Reserved3 : 4;
+    } OAES;
+    struct {
+        ULONG HostIdentifier128Bit : 1;
+        ULONG NOPSPMode : 1;
+        ULONG NVMSets : 1;
+        ULONG ReadRecoveryLevels : 1;
+        ULONG EnduranceGroups : 1;
+        ULONG PredictableLatencyMode : 1;
+        ULONG TBKAS : 1;
+        ULONG NamespaceGranularity : 1;
+        ULONG SQAssociations : 1;
+        ULONG UUIDList : 1;
+        ULONG Reserved0 : 22;
+    } CTRATT;
+    struct {
+        USHORT ReadRecoveryLevel0 : 1;
+        USHORT ReadRecoveryLevel1 : 1;
+        USHORT ReadRecoveryLevel2 : 1;
+        USHORT ReadRecoveryLevel3 : 1;
+        USHORT ReadRecoveryLevel4 : 1;
+        USHORT ReadRecoveryLevel5 : 1;
+        USHORT ReadRecoveryLevel6 : 1;
+        USHORT ReadRecoveryLevel7 : 1;
+        USHORT ReadRecoveryLevel8 : 1;
+        USHORT ReadRecoveryLevel9 : 1;
+        USHORT ReadRecoveryLevel10 : 1;
+        USHORT ReadRecoveryLevel11 : 1;
+        USHORT ReadRecoveryLevel12 : 1;
+        USHORT ReadRecoveryLevel13 : 1;
+        USHORT ReadRecoveryLevel14 : 1;
+        USHORT ReadRecoveryLevel15 : 1;
+    } RRLS;
+    UCHAR Reserved0[9];
+    UCHAR CNTRLTYPE;
+    UCHAR FGUID[16];
+    USHORT CRDT1;
+    USHORT CRDT2;
+    USHORT CRDT3;
+    UCHAR Reserved0_1[106];
+    UCHAR ReservedForManagement[16];
+    struct {
+        USHORT SecurityCommands : 1;
+        USHORT FormatNVM : 1;
+        USHORT FirmwareCommands : 1;
+        USHORT NamespaceCommands : 1;
+        USHORT DeviceSelfTest : 1;
+        USHORT Directives : 1;
+        USHORT NVMeMICommands : 1;
+        USHORT VirtualizationMgmt : 1;
+        USHORT DoorBellBufferConfig: 1;
+        USHORT GetLBAStatus : 1;
+        USHORT Reserved : 6;
+    } OACS;
+    UCHAR ACL;
+    UCHAR AERL;
+    struct {
+        UCHAR Slot1ReadOnly : 1;
+        UCHAR SlotCount : 3;
+        UCHAR ActivationWithoutReset : 1;
+        UCHAR Reserved : 3;
+    } FRMW;
+    struct {
+        UCHAR SmartPagePerNamespace : 1;
+        UCHAR CommandEffectsLog : 1;
+        UCHAR LogPageExtendedData : 1;
+        UCHAR TelemetrySupport : 1;
+        UCHAR PersistentEventLog : 1;
+        UCHAR Reserved0 : 1;
+        UCHAR TelemetryDataArea4 : 1;
+        UCHAR Reserved1 : 1;
+    } LPA;
+    UCHAR ELPE;
+    UCHAR NPSS;
+    struct {
+        UCHAR CommandFormatInSpec : 1;
+        UCHAR Reserved : 7;
+    } AVSCC;
+    struct {
+        UCHAR Supported : 1;
+        UCHAR Reserved : 7;
+    } APSTA;
+    USHORT WCTEMP;
+    USHORT CCTEMP;
+    USHORT MTFA;
+    ULONG HMPRE;
+    ULONG HMMIN;
+    UCHAR TNVMCAP[16];
+    UCHAR UNVMCAP[16];
+    struct {
+        ULONG RPMBUnitCount : 3;
+        ULONG AuthenticationMethod : 3;
+        ULONG Reserved0 : 10;
+        ULONG TotalSize : 8;
+        ULONG AccessSize : 8;
+    } RPMBS;
+    USHORT EDSTT;
+    UCHAR DSTO;
+    UCHAR FWUG;
+    USHORT KAS;
+    struct {
+        USHORT Supported : 1;
+        USHORT Reserved : 15;
+    } HCTMA;
+    USHORT MNTMT;
+    USHORT MXTMT;
+    struct {
+        ULONG CryptoErase : 1;
+        ULONG BlockErase : 1;
+        ULONG Overwrite : 1;
+        ULONG Reserved : 26;
+        ULONG NDI : 1;
+        ULONG NODMMAS : 2;
+    } SANICAP;
+    ULONG HMMINDS;
+    USHORT HMMAXD;
+    USHORT NSETIDMAX;
+    USHORT ENDGIDMAX;
+    UCHAR ANATT;
+    struct {
+        UCHAR OptimizedState : 1;
+        UCHAR NonOptimizedState : 1;
+        UCHAR InaccessibleState : 1;
+        UCHAR PersistentLossState : 1;
+        UCHAR ChangeState : 1;
+        UCHAR Reserved : 1;
+        UCHAR StaticANAGRPID : 1;
+        UCHAR SupportNonZeroANAGRPID : 1;
+    } ANACAP;
+    ULONG ANAGRPMAX;
+    ULONG NANAGRPID;
+    ULONG PELS;
+    UCHAR Reserved1[156];
+    struct {
+        UCHAR RequiredEntrySize : 4;
+        UCHAR MaxEntrySize : 4;
+    } SQES;
+    struct {
+        UCHAR RequiredEntrySize : 4;
+        UCHAR MaxEntrySize : 4;
+    } CQES;
+    USHORT MAXCMD;
+    ULONG NN;
+    struct {
+        USHORT Compare : 1;
+        USHORT WriteUncorrectable : 1;
+        USHORT DatasetManagement : 1;
+        USHORT WriteZeroes : 1;
+        USHORT FeatureField : 1;
+        USHORT Reservations : 1;
+        USHORT Timestamp : 1;
+        USHORT Verify : 1;
+        USHORT Reserved : 8;
+    } ONCS;
+    struct {
+        USHORT CompareAndWrite : 1;
+        USHORT Reserved : 15;
+    } FUSES;
+    struct {
+        UCHAR FormatApplyToAll : 1;
+        UCHAR SecureEraseApplyToAll : 1;
+        UCHAR CryptographicEraseSupported : 1;
+        UCHAR FormatSupportNSIDAllF : 1;
+        UCHAR Reserved : 4;
+    } FNA;
+    struct {
+        UCHAR Present : 1;
+        UCHAR FlushBehavior : 2;
+        UCHAR Reserved : 5;
+    } VWC;
+    USHORT AWUN;
+    USHORT AWUPF;
+    struct {
+        UCHAR CommandFormatInSpec : 1;
+        UCHAR Reserved : 7;
+    } NVSCC;
+    struct {
+        UCHAR WriteProtect : 1;
+        UCHAR UntilPowerCycle : 1;
+        UCHAR Permanent : 1;
+        UCHAR Reserved : 5;
+    } NWPC;
+    USHORT ACWU;
+    UCHAR Reserved4[2];
+    struct {
+        ULONG SGLSupported : 2;
+        ULONG KeyedSGLData : 1;
+        ULONG Reserved0 : 13;
+        ULONG BitBucketDescrSupported : 1;
+        ULONG ByteAlignedContiguousPhysicalBuffer : 1;
+        ULONG SGLLengthLargerThanDataLength : 1;
+        ULONG MPTRSGLDescriptor : 1;
+        ULONG AddressFieldSGLDataBlock: 1;
+        ULONG TransportSGLData : 1;
+        ULONG Reserved1 : 10;
+    } SGLS;
+    ULONG MNAN;
+    UCHAR Reserved6[224];
+    UCHAR SUBNQN[256];
+    UCHAR Reserved7[768];
+    UCHAR Reserved8[256];
+    NVME_POWER_STATE_DESC PDS[32];
+    UCHAR VS[1024];
+} NVME_IDENTIFY_CONTROLLER_DATA, *PNVME_IDENTIFY_CONTROLLER_DATA;
+
+typedef enum {
+    NVME_IDENTIFIER_TYPE_EUI64 = 0x1,
+    NVME_IDENTIFIER_TYPE_NGUID = 0x2,
+    NVME_IDENTIFIER_TYPE_UUID = 0x3,
+    NVME_IDENTIFIER_TYPE_CSI = 0x4
+} NVME_IDENTIFIER_TYPE;
+
+typedef enum {
+    NVME_IDENTIFIER_TYPE_EUI64_LENGTH = 0x8,
+    NVME_IDENTIFIER_TYPE_NGUID_LENGTH = 0x10,
+    NVME_IDENTIFIER_TYPE_UUID_LENGTH = 0x10,
+    NVME_IDENTIFIER_TYPE_CSI_LENGTH = 0x1
+} NVME_IDENTIFIER_TYPE_LENGTH;
+
+#define NVME_IDENTIFY_CNS_DESCRIPTOR_NAMESPACE_SIZE 0x1000
+
+typedef struct {
+    UCHAR NIDT;
+    UCHAR NIDL;
+    UCHAR Reserved[2];
+    UCHAR NID[ANYSIZE_ARRAY];
+} NVME_IDENTIFY_NAMESPACE_DESCRIPTOR, *PNVME_IDENTIFY_NAMESPACE_DESCRIPTOR;
+
+typedef struct {
+    USHORT Identifier;
+    USHORT ENDGID;
+    ULONG Reserved1;
+    ULONG Random4KBReadTypical;
+    ULONG OptimalWriteSize;
+    UCHAR TotalCapacity[16];
+    UCHAR UnallocatedCapacity[16];
+    UCHAR Reserved2[80];
+} NVME_SET_ATTRIBUTES_ENTRY, *PNVME_SET_ATTRIBUTES_ENTRY;
+
+typedef struct {
+    UCHAR IdentifierCount;
+    UCHAR Reserved[127];
+    NVME_SET_ATTRIBUTES_ENTRY Entry[ANYSIZE_ARRAY];
+} NVM_SET_LIST, *PNVM_SET_LIST;
+
+typedef struct {
+    ULONGLONG ZoneSize;
+    UCHAR ZDES;
+    UCHAR Reserved[7];
+} NVME_LBA_ZONE_FORMAT, *PNVME_LBA_ZONE_FORMAT;
+
+typedef struct {
+    struct {
+        USHORT VariableZoneCapacity : 1;
+        USHORT ZoneExcursions : 1;
+        USHORT Reserved : 14;
+    } ZOC;
+    struct {
+        USHORT ReadAcrossZoneBoundaries : 1;
+        USHORT Reserved : 15;
+    } OZCS;
+    ULONG MAR;
+    ULONG MOR;
+    ULONG RRL;
+    ULONG FRL;
+    UCHAR Reserved0[2796];
+    NVME_LBA_ZONE_FORMAT LBAEF[16];
+    UCHAR Reserved1[768];
+    UCHAR VS[256];
+} NVME_IDENTIFY_SPECIFIC_NAMESPACE_IO_COMMAND_SET, 
*PNVME_IDENTIFY_SPECIFIC_NAMESPACE_IO_COMMAND_SET;
+
+typedef struct {
+    UCHAR VSL;
+    UCHAR WZSL;
+    UCHAR WUSL;
+    UCHAR DMRL;
+    ULONG DMRSL;
+    ULONGLONG DMSL;
+    UCHAR Reserved[4080];
+} NVME_IDENTIFY_NVM_SPECIFIC_CONTROLLER_IO_COMMAND_SET, 
*PNVME_IDENTIFY_NVM_SPECIFIC_CONTROLLER_IO_COMMAND_SET;
+
+typedef struct {
+    UCHAR ZASL;
+    UCHAR Reserved[4095];
+} NVME_IDENTIFY_ZNS_SPECIFIC_CONTROLLER_IO_COMMAND_SET, 
*PNVME_IDENTIFY_ZNS_SPECIFIC_CONTROLLER_IO_COMMAND_SET;
+
+typedef struct {
+    USHORT NumberOfIdentifiers;
+    USHORT ControllerID[2047];
+} NVME_CONTROLLER_LIST, *PNVME_CONTROLLER_LIST;
+
+typedef struct {
+    ULONGLONG IOCommandSetVector[512];
+} NVME_IDENTIFY_IO_COMMAND_SET, *PNVME_IDENTIFY_IO_COMMAND_SET;
+
+typedef enum {
+    NVME_LBA_RANGE_TYPE_RESERVED = 0,
+    NVME_LBA_RANGE_TYPE_FILESYSTEM = 1,
+    NVME_LBA_RANGE_TYPE_RAID = 2,
+    NVME_LBA_RANGE_TYPE_CACHE = 3,
+    NVME_LBA_RANGE_TYPE_PAGE_SWAP_FILE = 4
+} NVME_LBA_RANGE_TYPES;
+
+typedef struct {
+    UCHAR Type;
+    struct {
+        UCHAR MayOverwritten : 1;
+        UCHAR Hidden : 1;
+        UCHAR Reserved : 6;
+    } Attributes;
+    UCHAR Reserved0[14];
+    ULONGLONG SLBA;
+    ULONGLONG NLB;
+    UCHAR GUID[16];
+    UCHAR Reserved1[16];
+} NVME_LBA_RANGET_TYPE_ENTRY, *PNVME_LBA_RANGET_TYPE_ENTRY;
+
+typedef enum {
+    NVME_LOG_PAGE_WCS_DEVICE_SMART_ATTRIBUTES = 0xC0,
+    NVME_LOG_PAGE_WCS_DEVICE_ERROR_RECOVERY = 0xC1
+} NVME_VENDOR_LOG_PAGES;
+
+#define GUID_WCS_DEVICE_SMART_ATTRIBUTESGuid { 0x2810AFC5, 0xBFEA, 0xA4F2, { 
0x9C, 0x4F, 0x6F, 0x7C, 0xC9, 0x14, 0xD5, 0xAF} }
+DEFINE_GUID(GUID_WCS_DEVICE_SMART_ATTRIBUTES, 0x2810AFC5, 0xBFEA, 0xA4F2, 
0x9C, 0x4F, 0x6F, 0x7C, 0xC9, 0x14, 0xD5, 0xAF);
+
+#define GUID_WCS_DEVICE_ERROR_RECOVERYGuid { 0x2131D944, 0x30FE, 0xAE34, 
{0xAB, 0x4D, 0xFD, 0x3D, 0xBA, 0x83, 0x19, 0x5A} }
+DEFINE_GUID(GUID_WCS_DEVICE_ERROR_RECOVERY, 0x2131D944, 0x30FE, 0xAE34, 0xAB, 
0x4D, 0xFD, 0x3D, 0xBA, 0x83, 0x19, 0x5A);
+
+typedef enum {
+    NVME_ASYNC_EVENT_TYPE_VENDOR_SPECIFIC_RESERVED = 0,
+    NVME_ASYNC_EVENT_TYPE_VENDOR_SPECIFIC_DEVICE_PANIC = 1
+} NVME_ASYNC_EVENT_TYPE_VENDOR_SPECIFIC_CODES;
+
+typedef struct _NVME_WCS_DEVICE_RESET_ACTION {
+    union {
+        __C89_NAMELESS struct {
+            UCHAR ControllerReset : 1;
+            UCHAR NVMeSubsystemReset : 1;
+            UCHAR PCIeFLR : 1;
+            UCHAR PERST : 1;
+            UCHAR PowerCycle : 1;
+            UCHAR PCIeConventionalHotReset : 1;
+            UCHAR Reserved : 2;
+        };
+        UCHAR AsUCHAR;
+    };
+} NVME_WCS_DEVICE_RESET_ACTION, *PNVME_WCS_DEVICE_RESET_ACTION;
+
+typedef struct _NVME_WCS_DEVICE_CAPABILITIES {
+    union {
+        __C89_NAMELESS struct {
+            ULONG PanicAEN : 1;
+            ULONG PanicCFS : 1;
+            ULONG Reserved : 30;
+        };
+        ULONG AsULONG;
+    };
+} NVME_WCS_DEVICE_CAPABILITIES, *PNVME_WCS_DEVICE_CAPABILITIES;
+
+typedef enum _NVME_WCS_DEVICE_RECOVERY_ACTION {
+    NVMeDeviceRecoveryNoAction = 0,
+    NVMeDeviceRecoveryFormatNVM,
+    NVMeDeviceRecoveryVendorSpecificCommand,
+    NVMeDeviceRecoveryVendorAnalysis,
+    NVMeDeviceRecoveryDeviceReplacement,
+    NVMeDeviceRecoverySanitize,
+    NVMeDeviceRecoveryMax = 15
+} NVME_WCS_DEVICE_RECOVERY_ACTION, *PNVME_WCS_DEVICE_RECOVERY_ACTION;
+
+#pragma pack(push, 1)
+
+typedef struct _NVME_WCS_DEVICE_SMART_ATTRIBUTES_LOG {
+    UCHAR VersionSpecificData[494];
+    USHORT LogPageVersionNumber;
+    GUID LogPageGUID;
+} NVME_WCS_DEVICE_SMART_ATTRIBUTES_LOG, *PNVME_WCS_DEVICE_SMART_ATTRIBUTES_LOG;
+
+C_ASSERT(sizeof(NVME_WCS_DEVICE_SMART_ATTRIBUTES_LOG) == 512);
+
+#define NVME_WCS_DEVICE_SMART_ATTRIBUTES_LOG_VERSION_2 0x0002
+
+typedef struct _NVME_WCS_DEVICE_SMART_ATTRIBUTES_LOG_V2 {
+    UCHAR MediaUnitsWritten[16];
+    UCHAR MediaUnitsRead[16];
+    struct {
+        UCHAR RawCount[6];
+        UCHAR Normalized[2];
+    } BadUserNANDBlockCount;
+    struct {
+        UCHAR RawCount[6];
+        UCHAR Normalized[2];
+    } BadSystemNANDBlockCount;
+    ULONGLONG XORRecoveryCount;
+    ULONGLONG UnrecoverableReadErrorCount;
+    ULONGLONG SoftECCErrorCount;
+    struct {
+        ULONG DetectedCounts;
+        ULONG CorrectedCounts;
+    } EndToEndCorrectionCounts;
+    UCHAR PercentageSystemDataUsed;
+    UCHAR RefreshCount[7];
+    struct {
+        ULONG MaximumCount;
+        ULONG MinimumCount;
+    } UserDataEraseCounts;
+    struct {
+        UCHAR EventCount;
+        UCHAR Status;
+    } ThermalThrottling;
+    UCHAR Reserved0[6];
+    ULONGLONG PCIeCorrectableErrorCount;
+    ULONG IncompleteShutdownCount;
+    ULONG Reserved1;
+    UCHAR PercentageFreeBlocks;
+    UCHAR Reserved2[7];
+    USHORT CapacitorHealth;
+    UCHAR Reserved3[6];
+    ULONGLONG UnalignedIOCount;
+    ULONGLONG SecurityVersionNumber;
+    ULONGLONG NUSE;
+    UCHAR PLPStartCount[16];
+    UCHAR EnduranceEstimate[16];
+    UCHAR Reserved4[302];
+    USHORT LogPageVersionNumber;
+    GUID LogPageGUID;
+} NVME_WCS_DEVICE_SMART_ATTRIBUTES_LOG_V2, 
*PNVME_WCS_DEVICE_SMART_ATTRIBUTES_LOG_V2;
+
+C_ASSERT(sizeof(NVME_WCS_DEVICE_SMART_ATTRIBUTES_LOG_V2) == 
sizeof(NVME_WCS_DEVICE_SMART_ATTRIBUTES_LOG));
+
+typedef struct _NVME_WCS_DEVICE_ERROR_RECOVERY_LOG {
+    USHORT PanicResetWaitTime;
+    NVME_WCS_DEVICE_RESET_ACTION PanicResetAction;
+    UCHAR DriveRecoveryAction;
+    ULONGLONG  PanicId;
+    NVME_WCS_DEVICE_CAPABILITIES DeviceCapabilities;
+    UCHAR VendorSpecificRecoveryCode;
+    UCHAR Reserved0[3];
+    ULONG VendorSpecificCommandCDW12;
+    ULONG VendorSpecificCommandCDW13;
+    UCHAR Reserved1[466];
+    USHORT LogPageVersionNumber;
+    GUID LogPageGUID;
+} NVME_WCS_DEVICE_ERROR_RECOVERY_LOG, *PNVME_WCS_DEVICE_ERROR_RECOVERY_LOG;
+
+C_ASSERT(sizeof(NVME_WCS_DEVICE_ERROR_RECOVERY_LOG) == 512);
+
+#pragma pack(pop)
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG QID : 16;
+        ULONG QSIZE : 16;
+    };
+    ULONG AsUlong;
+} NVME_CDW10_CREATE_IO_QUEUE, *PNVME_CDW10_CREATE_IO_QUEUE;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG PC : 1;
+        ULONG IEN : 1;
+        ULONG Reserved0 : 14;
+        ULONG IV : 16;
+    };
+    ULONG AsUlong;
+} NVME_CDW11_CREATE_IO_CQ, *PNVME_CDW11_CREATE_IO_CQ;
+
+typedef enum {
+    NVME_NVM_QUEUE_PRIORITY_URGENT = 0,
+    NVME_NVM_QUEUE_PRIORITY_HIGH = 1,
+    NVME_NVM_QUEUE_PRIORITY_MEDIUM = 2,
+    NVME_NVM_QUEUE_PRIORITY_LOW = 3
+} NVME_NVM_QUEUE_PRIORITIES;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG PC : 1;
+        ULONG QPRIO : 2;
+        ULONG Reserved0 : 13;
+        ULONG CQID : 16;
+    };
+    ULONG AsUlong;
+} NVME_CDW11_CREATE_IO_SQ, *PNVME_CDW11_CREATE_IO_SQ;
+
+typedef enum {
+    NVME_FEATURE_VALUE_CURRENT = 0,
+    NVME_FEATURE_VALUE_DEFAULT = 1,
+    NVME_FEATURE_VALUE_SAVED = 2,
+    NVME_FEATURE_VALUE_SUPPORTED_CAPABILITIES = 3
+} NVME_FEATURE_VALUE_CODES;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG FID : 8;
+        ULONG SEL : 3;
+        ULONG Reserved0 : 21;
+    };
+    ULONG AsUlong;
+} NVME_CDW10_GET_FEATURES, *PNVME_CDW10_GET_FEATURES;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG FID : 8;
+        ULONG Reserved0 : 23;
+        ULONG SV : 1;
+    };
+    ULONG AsUlong;
+} NVME_CDW10_SET_FEATURES, *PNVME_CDW10_SET_FEATURES;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG NSQ : 16;
+        ULONG NCQ : 16;
+    };
+    ULONG AsUlong;
+} NVME_CDW11_FEATURE_NUMBER_OF_QUEUES, *PNVME_CDW11_FEATURE_NUMBER_OF_QUEUES;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG THR : 8;
+        ULONG TIME : 8;
+        ULONG Reserved0 : 16;
+    };
+    ULONG AsUlong;
+} NVME_CDW11_FEATURE_INTERRUPT_COALESCING, 
*PNVME_CDW11_FEATURE_INTERRUPT_COALESCING;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG IV : 16;
+        ULONG CD : 1;
+        ULONG Reserved0 : 15;
+    };
+    ULONG AsUlong;
+} NVME_CDW11_FEATURE_INTERRUPT_VECTOR_CONFIG, 
*PNVME_CDW11_FEATURE_INTERRUPT_VECTOR_CONFIG;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG DN : 1;
+        ULONG Reserved0 : 31;
+    };
+    ULONG AsUlong;
+} NVME_CDW11_FEATURE_WRITE_ATOMICITY_NORMAL, 
*PNVME_CDW11_FEATURE_WRITE_ATOMICITY_NORMAL;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG NOPPME : 1;
+        ULONG Reserved0 : 31;
+    };
+    ULONG AsUlong;
+} NVME_CDW11_FEATURE_NON_OPERATIONAL_POWER_STATE, 
*PNVME_CDW11_FEATURE_NON_OPERATIONAL_POWER_STATE;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG NUM : 6;
+        ULONG Reserved0 : 26;
+    };
+    ULONG AsUlong;
+} NVME_CDW11_FEATURE_LBA_RANGE_TYPE, *PNVME_CDW11_FEATURE_LBA_RANGE_TYPE;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG AB : 3;
+        ULONG Reserved0 : 5;
+        ULONG LPW : 8;
+        ULONG MPW : 8;
+        ULONG HPW : 8;
+    };
+    ULONG AsUlong;
+} NVME_CDW11_FEATURE_ARBITRATION, *PNVME_CDW11_FEATURE_ARBITRATION;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG WCE : 1;
+        ULONG Reserved0 : 31;
+    };
+    ULONG AsUlong;
+} NVME_CDW11_FEATURE_VOLATILE_WRITE_CACHE, 
*PNVME_CDW11_FEATURE_VOLATILE_WRITE_CACHE;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG SAVE : 1;
+        ULONG NSS : 1;
+        ULONG MOD : 1;
+        ULONG Reserved0 : 29;
+    };
+    ULONG AsUlong;
+} NVME_CDW11_FEATURE_SUPPORTED_CAPABILITY, 
*PNVME_CDW11_FEATURE_SUPPORTED_CAPABILITY;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG CriticalWarnings : 8;
+        ULONG NsAttributeNotices : 1;
+        ULONG FwActivationNotices : 1;
+        ULONG TelemetryLogNotices : 1;
+        ULONG ANAChangeNotices : 1;
+        ULONG PredictableLogChangeNotices : 1;
+        ULONG LBAStatusNotices : 1;
+        ULONG EnduranceEventNotices : 1;
+        ULONG Reserved0 : 12;
+        ULONG ZoneDescriptorNotices : 1;
+        ULONG Reserved1 : 4;
+    };
+    ULONG   AsUlong;
+} NVME_CDW11_FEATURE_ASYNC_EVENT_CONFIG, 
*PNVME_CDW11_FEATURE_ASYNC_EVENT_CONFIG;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG PS : 5;
+        ULONG Reserved0 : 27;
+    };
+    ULONG AsUlong;
+} NVME_CDW11_FEATURE_POWER_MANAGEMENT, *PNVME_CDW11_FEATURE_POWER_MANAGEMENT;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG APSTE : 1;
+        ULONG Reserved0 : 31;
+    };
+    ULONG AsUlong;
+} NVME_CDW11_FEATURE_AUTO_POWER_STATE_TRANSITION, 
*PNVME_CDW11_FEATURE_AUTO_POWER_STATE_TRANSITION;
+
+typedef struct {
+    ULONG Reserved0 : 3;
+    ULONG IdleTransitionPowerState : 5;
+    ULONG IdleTimePriorToTransition : 24;
+    ULONG Reserved1;
+} NVME_AUTO_POWER_STATE_TRANSITION_ENTRY, 
*PNVME_AUTO_POWER_STATE_TRANSITION_ENTRY;
+
+typedef enum {
+    NVME_TEMPERATURE_OVER_THRESHOLD = 0,
+    NVME_TEMPERATURE_UNDER_THRESHOLD = 1
+} NVME_TEMPERATURE_THRESHOLD_TYPES;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG TMPTH : 16;
+        ULONG TMPSEL : 4;
+        ULONG THSEL : 2;
+        ULONG Reserved0 : 10;
+    };
+    ULONG AsUlong;
+} NVME_CDW11_FEATURE_TEMPERATURE_THRESHOLD, 
*PNVME_CDW11_FEATURE_TEMPERATURE_THRESHOLD;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG TLER : 16;
+        ULONG DULBE : 1;
+        ULONG Reserved0 : 15;
+    };
+    ULONG AsUlong;
+} NVME_CDW11_FEATURE_ERROR_RECOVERY, *PNVME_CDW11_FEATURE_ERROR_RECOVERY;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG EHM : 1;
+        ULONG MR : 1;
+        ULONG Reserved : 30;
+    };
+    ULONG AsUlong;
+} NVME_CDW11_FEATURE_HOST_MEMORY_BUFFER, 
*PNVME_CDW11_FEATURE_HOST_MEMORY_BUFFER;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG HSIZE;
+    };
+    ULONG AsUlong;
+} NVME_CDW12_FEATURE_HOST_MEMORY_BUFFER, 
*PNVME_CDW12_FEATURE_HOST_MEMORY_BUFFER;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG Reserved : 4;
+        ULONG HMDLLA : 28;
+    };
+    ULONG AsUlong;
+} NVME_CDW13_FEATURE_HOST_MEMORY_BUFFER, 
*PNVME_CDW13_FEATURE_HOST_MEMORY_BUFFER;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG HMDLUA;
+    };
+    ULONG AsUlong;
+} NVME_CDW14_FEATURE_HOST_MEMORY_BUFFER, 
*PNVME_CDW14_FEATURE_HOST_MEMORY_BUFFER;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG HMDLEC;
+    };
+    ULONG AsUlong;
+} NVME_CDW15_FEATURE_HOST_MEMORY_BUFFER, 
*PNVME_CDW15_FEATURE_HOST_MEMORY_BUFFER;
+
+typedef struct {
+    ULONGLONG BADD;
+    ULONG BSIZE;
+    ULONG Reserved;
+} NVME_HOST_MEMORY_BUFFER_DESCRIPTOR_ENTRY, 
*PNVME_HOST_MEMORY_BUFFER_DESCRIPTOR_ENTRY;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG IOCSCI : 8;
+        ULONG Reserved : 24;
+    };
+    ULONG AsUlong;
+} NVME_CDW11_FEATURE_IO_COMMAND_SET_PROFILE, 
*PNVME_CDW11_FEATURE_IO_COMMAND_SET_PROFILE;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG GDHM : 1;
+        ULONG Reserved : 31;
+    };
+    ULONG AsUlong;
+} NVME_CDW11_FEATURE_GET_HOST_METADATA, *PNVME_CDW11_FEATURE_GET_HOST_METADATA;
+
+typedef enum {
+    NVME_HOST_METADATA_ADD_REPLACE_ENTRY = 0,
+    NVME_HOST_METADATA_DELETE_ENTRY_MULTIPLE = 1,
+    NVME_HOST_METADATA_ADD_ENTRY_MULTIPLE = 2
+} NVME_HOST_METADATA_ELEMENT_ACTIONS;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG Reserved0 : 13;
+        ULONG EA : 2;
+        ULONG Reserved1 : 17;
+    };
+    ULONG AsUlong;
+} NVME_CDW11_FEATURE_SET_HOST_METADATA, *PNVME_CDW11_FEATURE_SET_HOST_METADATA;
+
+typedef enum {
+    NVME_CONTROLLER_METADATA_OPERATING_SYSTEM_CONTROLLER_NAME = 0x1,
+    NVME_CONTROLLER_METADATA_OPERATING_SYSTEM_DRIVER_NAME = 0x2,
+    NVME_CONTROLLER_METADATA_OPERATING_SYSTEM_DRIVER_VERSION = 0x3,
+    NVME_CONTROLLER_METADATA_PREBOOT_CONTROLLER_NAME = 0x4,
+    NVME_CONTROLLER_METADATA_PREBOOT_DRIVER_NAME = 0x5,
+    NVME_CONTROLLER_METADATA_PREBOOT_DRIVER_VERSION = 0x6,
+    NVME_CONTROLLER_METADATA_SYSTEM_PROCESSOR_MODEL = 0x7,
+    NVME_CONTROLLER_METADATA_CHIPSET_DRIVER_NAME = 0x8,
+    NVME_CONTROLLER_METADATA_CHIPSET_DRIVER_VERSION = 0x9,
+    NVME_CONTROLLER_METADATA_OPERATING_SYSTEM_NAME_AND_BUILD = 0xA,
+    NVME_CONTROLLER_METADATA_SYSTEM_PRODUCT_NAME = 0xB,
+    NVME_CONTROLLER_METADATA_FIRMWARE_VERSION = 0xC,
+    NVME_CONTROLLER_METADATA_OPERATING_SYSTEM_DRIVER_FILENAME = 0xD,
+    NVME_CONTROLLER_METADATA_DISPLAY_DRIVER_NAME = 0xE,
+    NVME_CONTROLLER_METADATA_DISPLAY_DRIVER_VERSION = 0xF,
+    NVME_CONTROLLER_METADATA_HOST_DETERMINED_FAILURE_RECORD = 0x10
+} NVME_CONTROLLER_METADATA_ELEMENT_TYPES;
+
+typedef enum {
+    NVME_NAMESPACE_METADATA_OPERATING_SYSTEM_NAMESPACE_NAME = 0x1,
+    NVME_NAMESPACE_METADATA_PREBOOT_NAMESPACE_NAME = 0x2,
+    NVME_NAMESPACE_METADATA_OPERATING_SYSTEM_NAMESPACE_NAME_QUALIFIER_1 = 0x3,
+    NVME_NAMESPACE_METADATA_OPERATING_SYSTEM_NAMESPACE_NAME_QUALIFIER_2 = 0x4
+} NVME_NAMESPACE_METADATA_ELEMENT_TYPES;
+
+typedef struct {
+    ULONG ET : 6;
+    ULONG Reserved0 : 2;
+    ULONG ER : 4;
+    ULONG Reserved1 : 4;
+    ULONG ELEN : 16;
+    UCHAR EVAL[ANYSIZE_ARRAY];
+} NVME_HOST_METADATA_ELEMENT_DESCRIPTOR, 
*PNVME_HOST_METADATA_ELEMENT_DESCRIPTOR;
+
+typedef struct {
+    UCHAR NumberOfMetadataElementDescriptors;
+    UCHAR Reserved0;
+    UCHAR MetadataElementDescriptors[4094];
+} NVME_FEATURE_HOST_METADATA_DATA, *PNVME_FEATURE_HOST_METADATA_DATA;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG NUM : 7;
+        ULONG Reserved0 : 25;
+    };
+    ULONG AsUlong;
+} NVME_CDW11_FEATURE_ERROR_INJECTION, *PNVME_CDW11_FEATURE_ERROR_INJECTION;
+
+typedef NVME_CDW11_FEATURE_ERROR_INJECTION NVME_CDW0_FEATURE_ERROR_INJECTION, 
*PNVME_CDW0_FEATURE_ERROR_INJECTION;
+
+typedef struct {
+    union {
+        __C89_NAMELESS struct {
+            UCHAR Enable : 1;
+            UCHAR SingleInstance : 1;
+            UCHAR Reserved0 : 6;
+        };
+        UCHAR AsUchar;
+    } Flags;
+    UCHAR Reserved1;
+    USHORT ErrorInjectionType;
+    UCHAR ErrorInjectionTypeSpecific[28];
+} NVME_ERROR_INJECTION_ENTRY, *PNVME_ERROR_INJECTION_ENTRY;
+
+typedef enum {
+    NVME_ERROR_INJECTION_TYPE_RESERVED0 = 0,
+    NVME_ERROR_INJECTION_TYPE_DEVICE_PANIC_CPU_CONTROLLER_HANG,
+    NVME_ERROR_INJECTION_TYPE_DEVICE_PANIC_NAND_HANG,
+    NVME_ERROR_INJECTION_TYPE_DEVICE_PANIC_PLP_DEFECT,
+    NVME_ERROR_INJECTION_TYPE_DEVICE_PANIC_LOGICAL_FW_ERROR,
+    NVME_ERROR_INJECTION_TYPE_DEVICE_PANIC_DRAM_CORRUPTION_CRITICAL,
+    NVME_ERROR_INJECTION_TYPE_DEVICE_PANIC_DRAM_CORRUPTION_NONCRITICAL,
+    NVME_ERROR_INJECTION_TYPE_DEVICE_PANIC_NAND_CORRUPTION,
+    NVME_ERROR_INJECTION_TYPE_DEVICE_PANIC_SRAM_CORRUPTION,
+    NVME_ERROR_INJECTION_TYPE_DEVICE_PANIC_HW_MALFUNCTION,
+    NVME_ERROR_INJECTION_TYPE_RESERVED1,
+    NVME_ERROR_INJECTION_TYPE_MAX = 0xFFFF
+} NVME_ERROR_INJECTION_TYPES;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG Reserved0 : 31;
+        ULONG Clear : 1;
+    };
+    ULONG AsUlong;
+} NVME_CDW11_FEATURE_CLEAR_FW_UPDATE_HISTORY, 
*PNVME_CDW11_FEATURE_CLEAR_FW_UPDATE_HISTORY;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG Reserved0 : 30;
+        ULONG EOLBehavior : 2;
+    };
+    ULONG AsUlong;
+} NVME_CDW11_FEATURE_READONLY_WRITETHROUGH_MODE, 
*PNVME_CDW11_FEATURE_READONLY_WRITETHROUGH_MODE;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG EOLBehavior : 3;
+        ULONG Reserved0 : 29;
+    };
+    ULONG AsUlong;
+} NVME_CDW0_FEATURE_READONLY_WRITETHROUGH_MODE, 
*PNVME_CDW0_FEATURE_READONLY_WRITETHROUGH_MODE;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG Reserved0 : 31;
+        ULONG Clear : 1;
+    };
+    ULONG AsUlong;
+} NVME_CDW11_FEATURE_CLEAR_PCIE_CORRECTABLE_ERROR_COUNTERS, 
*PNVME_CDW11_FEATURE_CLEAR_PCIE_CORRECTABLE_ERROR_COUNTERS;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG Reserved0 : 31;
+        ULONG Enable : 1;
+    };
+    ULONG AsUlong;
+} NVME_CDW11_FEATURE_ENABLE_IEEE1667_SILO, 
*PNVME_CDW11_FEATURE_ENABLE_IEEE1667_SILO;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG Enabled : 3;
+        ULONG Reserved0 : 29;
+    };
+    ULONG AsUlong;
+} NVME_CDW0_FEATURE_ENABLE_IEEE1667_SILO, 
*PNVME_CDW0_FEATURE_ENABLE_IEEE1667_SILO;
+
+#define NVME_MAX_HOST_IDENTIFIER_SIZE 16
+#define NVME_HOST_IDENTIFIER_SIZE 8
+#define NVME_EXTENDED_HOST_IDENTIFIER_SIZE 16
+
+typedef struct {
+    ULONG EXHID : 1;
+    ULONG Reserved : 31;
+} NVME_CDW11_FEATURE_HOST_IDENTIFIER, *PNVME_CDW11_FEATURE_HOST_IDENTIFIER;
+
+typedef struct {
+    UCHAR HOSTID[NVME_MAX_HOST_IDENTIFIER_SIZE];
+} NVME_FEATURE_HOST_IDENTIFIER_DATA, *PNVME_FEATURE_HOST_IDENTIFIER_DATA;
+
+typedef struct {
+    ULONG PTPL : 1;
+    ULONG Reserved : 31;
+} NVME_CDW11_FEATURE_RESERVATION_PERSISTENCE, 
*PNVME_CDW11_FEATURE_RESERVATION_PERSISTENCE;
+
+typedef struct {
+    ULONG Reserved : 1;
+    ULONG REGPRE : 1;
+    ULONG RESREL : 1;
+    ULONG RESPRE : 1;
+    ULONG Reserved1 : 28;
+} NVME_CDW11_FEATURE_RESERVATION_NOTIFICATION_MASK, 
*PNVME_CDW11_FEATURE_RESERVATION_NOTIFICATION_MASK;
+
+typedef union {
+    NVME_CDW11_FEATURE_NUMBER_OF_QUEUES NumberOfQueues;
+    NVME_CDW11_FEATURE_INTERRUPT_COALESCING InterruptCoalescing;
+    NVME_CDW11_FEATURE_INTERRUPT_VECTOR_CONFIG InterruptVectorConfig;
+    NVME_CDW11_FEATURE_LBA_RANGE_TYPE LbaRangeType;
+    NVME_CDW11_FEATURE_ARBITRATION Arbitration;
+    NVME_CDW11_FEATURE_VOLATILE_WRITE_CACHE VolatileWriteCache;
+    NVME_CDW11_FEATURE_ASYNC_EVENT_CONFIG AsyncEventConfig;
+    NVME_CDW11_FEATURE_POWER_MANAGEMENT PowerManagement;
+    NVME_CDW11_FEATURE_AUTO_POWER_STATE_TRANSITION AutoPowerStateTransition;
+    NVME_CDW11_FEATURE_TEMPERATURE_THRESHOLD TemperatureThreshold;
+    NVME_CDW11_FEATURE_ERROR_RECOVERY ErrorRecovery;
+    NVME_CDW11_FEATURE_HOST_MEMORY_BUFFER HostMemoryBuffer;
+    NVME_CDW11_FEATURE_WRITE_ATOMICITY_NORMAL WriteAtomicityNormal;
+    NVME_CDW11_FEATURE_NON_OPERATIONAL_POWER_STATE NonOperationalPowerState;
+    NVME_CDW11_FEATURE_IO_COMMAND_SET_PROFILE IoCommandSetProfile;
+    NVME_CDW11_FEATURE_ERROR_INJECTION ErrorInjection;
+    NVME_CDW11_FEATURE_HOST_IDENTIFIER HostIdentifier;
+    NVME_CDW11_FEATURE_RESERVATION_PERSISTENCE ReservationPersistence;
+    NVME_CDW11_FEATURE_RESERVATION_NOTIFICATION_MASK 
ReservationNotificationMask;
+    NVME_CDW11_FEATURE_GET_HOST_METADATA GetHostMetadata;
+    NVME_CDW11_FEATURE_SET_HOST_METADATA SetHostMetadata;
+    ULONG AsUlong;
+} NVME_CDW11_FEATURES, *PNVME_CDW11_FEATURES;
+
+typedef union {
+    NVME_CDW12_FEATURE_HOST_MEMORY_BUFFER HostMemoryBuffer;
+    ULONG AsUlong;
+} NVME_CDW12_FEATURES, *PNVME_CDW12_FEATURES;
+
+typedef union {
+    NVME_CDW13_FEATURE_HOST_MEMORY_BUFFER HostMemoryBuffer;
+    ULONG AsUlong;
+} NVME_CDW13_FEATURES, *PNVME_CDW13_FEATURES;
+
+typedef union {
+    NVME_CDW14_FEATURE_HOST_MEMORY_BUFFER HostMemoryBuffer;
+    ULONG AsUlong;
+} NVME_CDW14_FEATURES, *PNVME_CDW14_FEATURES;
+
+typedef union {
+    NVME_CDW15_FEATURE_HOST_MEMORY_BUFFER HostMemoryBuffer;
+    ULONG AsUlong;
+} NVME_CDW15_FEATURES, *PNVME_CDW15_FEATURES;
+
+#define NVME_MAX_LOG_SIZE 0x1000
+
+typedef enum {
+    NVME_LOG_PAGE_ERROR_INFO = 0x01,
+    NVME_LOG_PAGE_HEALTH_INFO = 0x02,
+    NVME_LOG_PAGE_FIRMWARE_SLOT_INFO = 0x03,
+    NVME_LOG_PAGE_CHANGED_NAMESPACE_LIST = 0x04,
+    NVME_LOG_PAGE_COMMAND_EFFECTS = 0x05,
+    NVME_LOG_PAGE_DEVICE_SELF_TEST = 0x06,
+    NVME_LOG_PAGE_TELEMETRY_HOST_INITIATED = 0x07,
+    NVME_LOG_PAGE_TELEMETRY_CTLR_INITIATED = 0x08,
+    NVME_LOG_PAGE_ENDURANCE_GROUP_INFORMATION = 0x09,
+    NVME_LOG_PAGE_PREDICTABLE_LATENCY_NVM_SET = 0x0A,
+    NVME_LOG_PAGE_PREDICTABLE_LATENCY_EVENT_AGGREGATE = 0x0B,
+    NVME_LOG_PAGE_ASYMMETRIC_NAMESPACE_ACCESS = 0x0C,
+    NVME_LOG_PAGE_PERSISTENT_EVENT_LOG = 0x0D,
+    NVME_LOG_PAGE_LBA_STATUS_INFORMATION = 0x0E,
+    NVME_LOG_PAGE_ENDURANCE_GROUP_EVENT_AGGREGATE = 0x0F,
+    NVME_LOG_PAGE_RESERVATION_NOTIFICATION = 0x80,
+    NVME_LOG_PAGE_SANITIZE_STATUS = 0x81,
+    NVME_LOG_PAGE_CHANGED_ZONE_LIST = 0xBF
+} NVME_LOG_PAGES;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG LID : 8;
+        ULONG Reserved0 : 8;
+        ULONG NUMD : 12;
+        ULONG Reserved1 : 4;
+    };
+    ULONG AsUlong;
+} NVME_CDW10_GET_LOG_PAGE, *PNVME_CDW10_GET_LOG_PAGE;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG LID : 8;
+        ULONG LSP : 4;
+        ULONG Reserved0 : 3;
+        ULONG RAE : 1;
+        ULONG NUMDL : 16;
+    };
+    ULONG AsUlong;
+} NVME_CDW10_GET_LOG_PAGE_V13, *PNVME_CDW10_GET_LOG_PAGE_V13;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG NUMDU : 16;
+        ULONG LogSpecificIdentifier : 16;
+    };
+    ULONG AsUlong;
+} NVME_CDW11_GET_LOG_PAGE, *PNVME_CDW11_GET_LOG_PAGE;
+
+typedef struct {
+    ULONG LPOL;
+} NVME_CDW12_GET_LOG_PAGE, *PNVME_CDW12_GET_LOG_PAGE;
+
+typedef struct {
+    ULONG LPOU;
+} NVME_CDW13_GET_LOG_PAGE, *PNVME_CDW13_GET_LOG_PAGE;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG UUIDIndex : 7;
+        ULONG Reserved : 17;
+        ULONG CommandSetIdentifier : 8;
+    };
+    ULONG AsUlong;
+} NVME_CDW14_GET_LOG_PAGE, *PNVME_CDW14_GET_LOG_PAGE;
+
+typedef struct {
+    ULONGLONG ErrorCount;
+    USHORT SQID;
+    USHORT CMDID;
+    NVME_COMMAND_STATUS Status;
+    struct {
+        USHORT Byte : 8;
+        USHORT Bit : 3;
+        USHORT Reserved : 5;
+    } ParameterErrorLocation;
+    ULONGLONG Lba;
+    ULONG NameSpace;
+    UCHAR VendorInfoAvailable;
+    UCHAR Reserved0[3];
+    ULONGLONG CommandSpecificInfo;
+    UCHAR Reserved1[24];
+} NVME_ERROR_INFO_LOG, *PNVME_ERROR_INFO_LOG;
+
+typedef struct {
+    union {
+        __C89_NAMELESS struct {
+            UCHAR AvailableSpaceLow : 1;
+            UCHAR TemperatureThreshold : 1;
+            UCHAR ReliabilityDegraded : 1;
+            UCHAR ReadOnly : 1;
+            UCHAR VolatileMemoryBackupDeviceFailed : 1;
+            UCHAR Reserved : 3;
+        };
+        UCHAR AsUchar;
+    } CriticalWarning;
+    UCHAR Temperature[2];
+    UCHAR AvailableSpare;
+    UCHAR AvailableSpareThreshold;
+    UCHAR PercentageUsed;
+    UCHAR Reserved0[26];
+    UCHAR DataUnitRead[16];
+    UCHAR DataUnitWritten[16];
+    UCHAR HostReadCommands[16];
+    UCHAR HostWrittenCommands[16];
+    UCHAR ControllerBusyTime[16];
+    UCHAR PowerCycle[16];
+    UCHAR PowerOnHours[16];
+    UCHAR UnsafeShutdowns[16];
+    UCHAR MediaErrors[16];
+    UCHAR ErrorInfoLogEntryCount[16];
+    ULONG WarningCompositeTemperatureTime;
+    ULONG CriticalCompositeTemperatureTime;
+    USHORT TemperatureSensor1;
+    USHORT TemperatureSensor2;
+    USHORT TemperatureSensor3;
+    USHORT TemperatureSensor4;
+    USHORT TemperatureSensor5;
+    USHORT TemperatureSensor6;
+    USHORT TemperatureSensor7;
+    USHORT TemperatureSensor8;
+    UCHAR Reserved1[296];
+} NVME_HEALTH_INFO_LOG, *PNVME_HEALTH_INFO_LOG;
+
+#define NVME_TELEMETRY_DATA_BLOCK_SIZE 0x200
+
+typedef struct _NVME_TELEMETRY_HOST_INITIATED_LOG {
+    UCHAR LogIdentifier;
+    UCHAR Reserved0[4];
+    UCHAR OrganizationID[3];
+    USHORT Area1LastBlock;
+    USHORT Area2LastBlock;
+    USHORT Area3LastBlock;
+    UCHAR Reserved1[2];
+    ULONG Area4LastBlock;
+    UCHAR Reserved2[361];
+    UCHAR HostInitiatedDataGenerationNumber;
+    UCHAR ControllerInitiatedDataAvailable;
+    UCHAR ControllerInitiatedDataGenerationNumber;
+    UCHAR ReasonIdentifier[128];
+} NVME_TELEMETRY_HOST_INITIATED_LOG, *PNVME_TELEMETRY_HOST_INITIATED_LOG;
+
+typedef struct _NVME_TELEMETRY_CONTROLLER_INITIATED_LOG {
+    UCHAR LogIdentifier;
+    UCHAR Reserved0[4];
+    UCHAR OrganizationID[3];
+    USHORT Area1LastBlock;
+    USHORT Area2LastBlock;
+    USHORT Area3LastBlock;
+    UCHAR Reserved1[2];
+    ULONG Area4LastBlock;
+    UCHAR Reserved2[362];
+    UCHAR ControllerInitiatedDataAvailable;
+    UCHAR ControllerInitiatedDataGenerationNumber;
+    UCHAR ReasonIdentifier[128];
+} NVME_TELEMETRY_CONTROLLER_INITIATED_LOG, 
*PNVME_TELEMETRY_CONTROLLER_INITIATED_LOG;
+
+typedef struct {
+    struct {
+        UCHAR ActiveSlot : 3;
+        UCHAR Reserved0 : 1;
+        UCHAR PendingActivateSlot : 3;
+        UCHAR Reserved1 : 1;
+    } AFI;
+    UCHAR Reserved0[7];
+    ULONGLONG FRS[7];
+    UCHAR Reserved1[448];
+} NVME_FIRMWARE_SLOT_INFO_LOG, *PNVME_FIRMWARE_SLOT_INFO_LOG;
+
+typedef struct {
+    ULONG NSID[1024];
+} NVME_CHANGED_NAMESPACE_LIST_LOG, *PNVME_CHANGED_NAMESPACE_LIST_LOG;
+
+typedef struct {
+    USHORT ZoneIdentifiersCount;
+    UCHAR Reserved[6];
+    ULONGLONG ZoneIdentifier[511];
+} NVME_CHANGED_ZONE_LIST_LOG, *PNVME_CHANGED_ZONE_LIST_LOG;
+
+typedef enum {
+    NVME_COMMAND_EFFECT_SBUMISSION_EXECUTION_LIMIT_NONE = 0,
+    NVME_COMMAND_EFFECT_SBUMISSION_EXECUTION_LIMIT_SINGLE_PER_NAMESPACE = 1,
+    NVME_COMMAND_EFFECT_SBUMISSION_EXECUTION_LIMIT_SINGLE_PER_CONTROLLER = 2
+} NVME_COMMAND_EFFECT_SBUMISSION_EXECUTION_LIMITS;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG CSUPP : 1;
+        ULONG LBCC : 1;
+        ULONG NCC : 1;
+        ULONG NIC : 1;
+        ULONG CCC : 1;
+        ULONG Reserved0 : 11;
+        ULONG CSE : 3;
+        ULONG Reserved1 : 13;
+    };
+    ULONG AsUlong;
+} NVME_COMMAND_EFFECTS_DATA, *PNVME_COMMAND_EFFECTS_DATA;
+
+typedef struct {
+    NVME_COMMAND_EFFECTS_DATA ACS[256];
+    NVME_COMMAND_EFFECTS_DATA IOCS[256];
+    UCHAR Reserved[2048];
+} NVME_COMMAND_EFFECTS_LOG, *PNVME_COMMAND_EFFECTS_LOG;
+
+#pragma pack(push, 1)
+typedef struct {
+    struct {
+        UCHAR Result : 4;
+        UCHAR CodeValue : 4;
+    } Status;
+    UCHAR SegmentNumber;
+    struct {
+        UCHAR NSIDValid : 1;
+        UCHAR FLBAValid : 1;
+        UCHAR SCTValid : 1;
+        UCHAR SCValid : 1;
+        UCHAR Reserved : 4;
+    } ValidDiagnostics;
+    UCHAR Reserved;
+    ULONGLONG POH;
+    ULONG NSID;
+    ULONGLONG FailingLBA;
+    struct {
+        UCHAR AdditionalInfo : 3;
+        UCHAR Reserved : 5;
+    } StatusCodeType;
+    UCHAR StatusCode;
+    USHORT VendorSpecific;
+} NVME_DEVICE_SELF_TEST_RESULT_DATA, *PNVME_DEVICE_SELF_TEST_RESULT_DATA;
+
+typedef struct {
+     struct {
+        UCHAR Status : 4;
+        UCHAR Reserved : 4;
+     } CurrentOperation;
+     struct {
+        UCHAR CompletePercent : 7;
+        UCHAR Reserved : 1;
+     } CurrentCompletion;
+     UCHAR Reserved[2];
+     NVME_DEVICE_SELF_TEST_RESULT_DATA ResultData[20];
+} NVME_DEVICE_SELF_TEST_LOG, *PNVME_DEVICE_SELF_TEST_LOG;
+
+typedef struct {
+    ULONG Reserved0;
+    UCHAR AvailableSpareThreshold;
+    UCHAR PercentageUsed;
+    UCHAR Reserved1[26];
+    UCHAR EnduranceEstimate[16];
+    UCHAR DataUnitsRead[16];
+    UCHAR DataUnitsWritten[16];
+    UCHAR MediaUnitsWritten[16];
+    UCHAR Reserved2[416];
+} NVME_ENDURANCE_GROUP_LOG, *PNVME_ENDURANCE_GROUP_LOG;
+
+typedef struct {
+    UCHAR LogIdentifier;
+    UCHAR Reserved0[3];
+    ULONG TotalNumberOfEvents;
+    ULONGLONG TotalLogLength;
+    UCHAR LogRevision;
+    UCHAR Reserved1;
+    USHORT LogHeaderLength;
+    ULONGLONG Timestamp;
+    UCHAR PowerOnHours[16];
+    ULONGLONG PowerCycleCount;
+    USHORT PciVendorId;
+    USHORT PciSubsystemVendorId;
+    UCHAR SerialNumber[20];
+    UCHAR ModelNumber[40];
+    UCHAR NVMSubsystemNVMeQualifiedName[256];
+    UCHAR Reserved[108];
+    UCHAR SupportedEventsBitmap[32];
+} NVME_PERSISTENT_EVENT_LOG_HEADER, *PNVME_PERSISTENT_EVENT_LOG_HEADER;
+
+typedef struct {
+    UCHAR EventType;
+    UCHAR EventTypeRevision;
+    UCHAR EventHeaderLength;
+    UCHAR Reserved0;
+    USHORT ControllerIdentifier;
+    ULONGLONG EventTimestamp;
+    UCHAR Reserved1[6];
+    USHORT VendorSpecificInformationLength;
+    USHORT EventLength;
+} NVME_PERSISTENT_EVENT_LOG_EVENT_HEADER, 
*PNVME_PERSISTENT_EVENT_LOG_EVENT_HEADER;
+
+typedef enum {
+    NVME_PERSISTENT_EVENT_TYPE_RESERVED0 = 0x00,
+    NVME_PERSISTENT_EVENT_TYPE_SMART_HEALTH_LOG_SNAPSHOT = 0x01,
+    NVME_PERSISTENT_EVENT_TYPE_FIRMWARE_COMMIT = 0x02,
+    NVME_PERSISTENT_EVENT_TYPE_TIMESTAMP_CHANGE = 0x03,
+    NVME_PERSISTENT_EVENT_TYPE_POWER_ON_OR_RESET = 0x04,
+    NVME_PERSISTENT_EVENT_TYPE_NVM_SUBSYSTEM_HARDWARE_ERROR = 0x05,
+    NVME_PERSISTENT_EVENT_TYPE_CHANGE_NAMESPACE = 0x06,
+    NVME_PERSISTENT_EVENT_TYPE_FORMAT_NVM_START = 0x07,
+    NVME_PERSISTENT_EVENT_TYPE_FORMAT_NVM_COMPLETION = 0x08,
+    NVME_PERSISTENT_EVENT_TYPE_SANITIZE_START = 0x09,
+    NVME_PERSISTENT_EVENT_TYPE_SANITIZE_COMPLETION = 0x0A,
+    NVME_PERSISTENT_EVENT_TYPE_SET_FEATURE = 0x0B,
+    NVME_PERSISTENT_EVENT_TYPE_TELEMETRY_LOG_CREATED = 0x0C,
+    NVME_PERSISTENT_EVENT_TYPE_THERMAL_EXCURSION = 0x0D,
+    NVME_PERSISTENT_EVENT_TYPE_RESERVED1_BEGIN = 0x0E,
+    NVME_PERSISTENT_EVENT_TYPE_RESERVED1_END = 0xDD,
+    NVME_PERSISTENT_EVENT_TYPE_VENDOR_SPECIFIC_EVENT = 0xDE,
+    NVME_PERSISTENT_EVENT_TYPE_TCG_DEFINED = 0xDF,
+    NVME_PERSISTENT_EVENT_TYPE_RESERVED2_BEGIN = 0xE0,
+    NVME_PERSISTENT_EVENT_TYPE_RESERVED2_END = 0xFF,
+    NVME_PERSISTENT_EVENT_TYPE_MAX = 0xFF
+} NVME_PERSISTENT_EVENT_LOG_EVENT_TYPES;
+
+#pragma pack(pop)
+
+typedef enum {
+    NVME_RESERVATION_NOTIFICATION_TYPE_EMPTY_LOG_PAGE = 0,
+    NVME_RESERVATION_NOTIFICATION_TYPE_REGISTRATION_PREEMPTED = 1,
+    NVME_RESERVATION_NOTIFICATION_TYPE_REGISTRATION_RELEASED = 2,
+    NVME_RESERVATION_NOTIFICATION_TYPE_RESERVATION_PREEPMPTED = 3
+} NVME_RESERVATION_NOTIFICATION_TYPES;
+
+typedef struct {
+    ULONGLONG LogPageCount;
+    UCHAR LogPageType;
+    UCHAR AvailableLogPageCount;
+    UCHAR Reserved0[2];
+    ULONG NameSpaceId;
+    UCHAR Reserved1[48];
+} NVME_RESERVATION_NOTIFICATION_LOG, *PNVME_RESERVATION_NOTIFICATION_LOG;
+
+typedef enum {
+    NVME_SANITIZE_OPERATION_NONE = 0,
+    NVME_SANITIZE_OPERATION_SUCCEEDED = 1,
+    NVME_SANITIZE_OPERATION_IN_PROGRESS = 2,
+    NVME_SANITIZE_OPERATION_FAILED = 3,
+    NVME_SANITIZE_OPERATION_SUCCEEDED_WITH_FORCED_DEALLOCATION = 4
+} NVME_SANITIZE_OPERATION_STATUS, *PNVME_SANITIZE_OPERATION_STATUS;
+
+typedef struct {
+    USHORT MostRecentSanitizeOperationStatus : 3;
+    USHORT NumberCompletedPassesOfOverwrite : 4;
+    USHORT GlobalDataErased : 1;
+    USHORT Reserved : 8;
+} NVME_SANITIZE_STATUS, *PNVME_SANITIZE_STATUS;
+
+typedef struct {
+    USHORT SPROG;
+    NVME_SANITIZE_STATUS SSTAT;
+    ULONG SCDW10;
+    ULONG EstimatedTimeForOverwrite;
+    ULONG EstimatedTimeForBlockErase;
+    ULONG EstimatedTimeForCryptoErase;
+    ULONG EstimatedTimeForOverwriteWithNoDeallocateMediaModification;
+    ULONG EstimatedTimeForBlockEraseWithNoDeallocateMediaModification;
+    ULONG EstimatedTimeForCryptoEraseWithNoDeallocateMediaModification;
+    UCHAR Reserved[480];
+} NVME_SANITIZE_STATUS_LOG, *PNVME_SANITIZE_STATUS_LOG;
+
+typedef struct {
+    ULONG NUMD;
+} NVME_CDW10_FIRMWARE_DOWNLOAD, *PNVME_CDW10_FIRMWARE_DOWNLOAD;
+
+typedef struct {
+    ULONG OFST;
+} NVME_CDW11_FIRMWARE_DOWNLOAD, *PNVME_CDW11_FIRMWARE_DOWNLOAD;
+
+typedef enum {
+    NVME_FIRMWARE_ACTIVATE_ACTION_DOWNLOAD_TO_SLOT = 0,
+    NVME_FIRMWARE_ACTIVATE_ACTION_DOWNLOAD_TO_SLOT_AND_ACTIVATE = 1,
+    NVME_FIRMWARE_ACTIVATE_ACTION_ACTIVATE = 2,
+    NVME_FIRMWARE_ACTIVATE_ACTION_DOWNLOAD_TO_SLOT_AND_ACTIVATE_IMMEDIATE = 3
+} NVME_FIRMWARE_ACTIVATE_ACTIONS;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG FS : 3;
+        ULONG AA : 2;
+        ULONG Reserved : 27;
+    };
+    ULONG AsUlong;
+} NVME_CDW10_FIRMWARE_ACTIVATE, *PNVME_CDW10_FIRMWARE_ACTIVATE;
+
+typedef enum {
+    NVME_PROTECTION_INFORMATION_NOT_ENABLED = 0,
+    NVME_PROTECTION_INFORMATION_TYPE1 = 1,
+    NVME_PROTECTION_INFORMATION_TYPE2 = 2,
+    NVME_PROTECTION_INFORMATION_TYPE3 = 3
+} NVME_PROTECTION_INFORMATION_TYPES;
+
+typedef enum {
+    NVME_SECURE_ERASE_NONE = 0,
+    NVME_SECURE_ERASE_USER_DATA = 1,
+    NVME_SECURE_ERASE_CRYPTOGRAPHIC = 2
+} NVME_SECURE_ERASE_SETTINGS;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG LBAF : 4;
+        ULONG MS : 1;
+        ULONG PI : 3;
+        ULONG PIL : 1;
+        ULONG SES : 3;
+        ULONG ZF : 2;
+        ULONG Reserved : 18;
+    };
+    ULONG AsUlong;
+} NVME_CDW10_FORMAT_NVM, *PNVME_CDW10_FORMAT_NVM;
+
+typedef enum {
+    NVME_MEDIA_ADDITIONALLY_MODIFIED_AFTER_SANITIZE_NOT_DEFINED = 0,
+    NVME_MEDIA_NOT_ADDITIONALLY_MODIFIED_AFTER_SANITIZE = 1,
+    NVME_MEDIA_ADDITIONALLY_MOFIDIED_AFTER_SANITIZE = 2
+} NVME_NO_DEALLOCATE_MODIFIES_MEDIA_AFTER_SANITIZE, 
*PNVME_NO_DEALLOCATE_MODIFIES_MEDIA_AFTER_SANITIZE;
+
+typedef enum {
+    NVME_SANITIZE_ACTION_RESERVED = 0,
+    NVME_SANITIZE_ACTION_EXIT_FAILURE_MODE = 1,
+    NVME_SANITIZE_ACTION_START_BLOCK_ERASE_SANITIZE = 2,
+    NVME_SANITIZE_ACTION_START_OVERWRITE_SANITIZE = 3,
+    NVME_SANITIZE_ACTION_START_CRYPTO_ERASE_SANITIZE = 4
+} NVME_SANITIZE_ACTION, *PNVME_SANITIZE_ACTION;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG SANACT : 3;
+        ULONG AUSE : 1;
+        ULONG OWPASS : 4;
+        ULONG OIPBP : 1;
+        ULONG NDAS : 1;
+        ULONG Reserved : 22;
+    };
+    ULONG AsUlong;
+} NVME_CDW10_SANITIZE, *PNVME_CDW10_SANITIZE;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG OVRPAT;
+    };
+    ULONG AsUlong;
+} NVME_CDW11_SANITIZE;
+
+typedef enum {
+    NVME_RESERVATION_TYPE_RESERVED = 0,
+    NVME_RESERVATION_TYPE_WRITE_EXCLUSIVE = 1,
+    NVME_RESERVATION_TYPE_EXCLUSIVE_ACCESS = 2,
+    NVME_RESERVATION_TYPE_WRITE_EXCLUSIVE_REGISTRANTS_ONLY = 3,
+    NVME_RESERVATION_TYPE_EXCLUSIVE_ACCESS_REGISTRANTS_ONLY = 4,
+    NVME_RESERVATION_TYPE_WRITE_EXCLUSIVE_ALL_REGISTRANTS = 5,
+    NVME_RESERVATION_TYPE_EXCLUSIVE_ACCESS_ALL_REGISTRANTS = 6
+} NVME_RESERVATION_TYPES;
+
+typedef enum {
+    NVME_RESERVATION_ACQUIRE_ACTION_ACQUIRE = 0,
+    NVME_RESERVATION_ACQUIRE_ACTION_PREEMPT = 1,
+    NVME_RESERVATION_ACQUIRE_ACTION_PREEMPT_AND_ABORT = 2
+} NVME_RESERVATION_ACQUIRE_ACTIONS;
+
+typedef struct {
+    ULONG PTPL : 1;
+    ULONG Reserved : 31;
+} NVME_CDW0_RESERVATION_PERSISTENCE, *PNVME_CDW0_RESERVATION_PERSISTENCE;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG RACQA : 3;
+        ULONG IEKEY : 1;
+        ULONG Reserved : 4;
+        ULONG RTYPE : 8;
+        ULONG Reserved1 : 16;
+    };
+    ULONG AsUlong;
+} NVME_CDW10_RESERVATION_ACQUIRE, *PNVME_CDW10_RESERVATION_ACQUIRE;
+
+typedef struct {
+    ULONGLONG CRKEY;
+    ULONGLONG PRKEY;
+} NVME_RESERVATION_ACQUIRE_DATA_STRUCTURE, 
*PNVME_RESERVATION_ACQUIRE_DATA_STRUCTURE;
+
+typedef enum {
+    NVME_RESERVATION_REGISTER_ACTION_REGISTER = 0,
+    NVME_RESERVATION_REGISTER_ACTION_UNREGISTER = 1,
+    NVME_RESERVATION_REGISTER_ACTION_REPLACE = 2
+} NVME_RESERVATION_REGISTER_ACTIONS;
+
+typedef enum {
+  NVME_RESERVATION_REGISTER_PTPL_STATE_NO_CHANGE = 0,
+  NVME_RESERVATION_REGISTER_PTPL_STATE_RESERVED = 1,
+  NVME_RESERVATION_REGISTER_PTPL_STATE_SET_TO_0 = 2,
+  NVME_RESERVATION_REGISTER_PTPL_STATE_SET_TO_1 = 3
+} NVME_RESERVATION_REGISTER_PTPL_STATE_CHANGES;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG RREGA : 3;
+        ULONG IEKEY : 1;
+        ULONG Reserved : 26;
+        ULONG CPTPL : 2;
+    };
+    ULONG AsUlong;
+} NVME_CDW10_RESERVATION_REGISTER, *PNVME_CDW10_RESERVATION_REGISTER;
+
+typedef struct {
+    ULONGLONG CRKEY;
+    ULONGLONG NRKEY;
+} NVME_RESERVATION_REGISTER_DATA_STRUCTURE, 
*PNVME_RESERVATION_REGISTER_DATA_STRUCTURE;
+
+typedef enum {
+    NVME_RESERVATION_RELEASE_ACTION_RELEASE = 0,
+    NVME_RESERVATION_RELEASE_ACTION_CLEAR = 1
+} NVME_RESERVATION_RELEASE_ACTIONS;
+
+typedef union {
+    struct {
+        ULONG RRELA : 3;
+        ULONG IEKEY : 1;
+        ULONG Reserved : 4;
+        ULONG RTYPE : 8;
+        ULONG Reserved1 : 16;
+    };
+    ULONG AsUlong;
+} NVME_CDW10_RESERVATION_RELEASE, *PNVME_CDW10_RESERVATION_RELEASE;
+
+typedef struct {
+    ULONGLONG CRKEY;
+} NVME_RESERVATION_RELEASE_DATA_STRUCTURE, 
*PNVME_RESERVATION_RELEASE_DATA_STRUCTURE;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG NUMD;
+    };
+    ULONG AsUlong;
+} NVME_CDW10_RESERVATION_REPORT, *PNVME_CDW10_RESERVATION_REPORT;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG EDS : 1;
+        ULONG Reserved : 31;
+    };
+    ULONG AsUlong;
+} NVME_CDW11_RESERVATION_REPORT, *PNVME_CDW11_RESERVATION_REPORT;
+
+#pragma pack(push, 1)
+typedef struct {
+    ULONG GEN;
+    UCHAR RTYPE;
+    USHORT REGCTL;
+    UCHAR Reserved[2];
+    UCHAR PTPLS;
+    UCHAR Reserved1[14];
+} NVME_RESERVATION_REPORT_STATUS_HEADER, 
*PNVME_RESERVATION_REPORT_STATUS_HEADER;
+#pragma pack(pop)
+
+C_ASSERT(sizeof(NVME_RESERVATION_REPORT_STATUS_HEADER) == 24);
+
+typedef struct {
+    USHORT CNTLID;
+    struct {
+        UCHAR HoldReservation : 1;
+        UCHAR Reserved : 7;
+    } RCSTS;
+    UCHAR Reserved[5];
+    UCHAR HOSTID[8];
+    ULONGLONG RKEY;
+} NVME_REGISTERED_CONTROLLER_DATA, *PNVME_REGISTERED_CONTROLLER_DATA;
+
+C_ASSERT(sizeof(NVME_REGISTERED_CONTROLLER_DATA) == 24);
+
+typedef struct {
+    NVME_RESERVATION_REPORT_STATUS_HEADER Header;
+    NVME_REGISTERED_CONTROLLER_DATA RegisteredControllersData[ANYSIZE_ARRAY];
+} NVME_RESERVATION_REPORT_STATUS_DATA_STRUCTURE, 
*PNVME_RESERVATION_REPORT_STATUS_DATA_STRUCTURE;
+
+typedef struct {
+    USHORT CNTLID;
+    struct {
+        UCHAR HoldReservation : 1;
+        UCHAR Reserved : 7;
+    } RCSTS;
+    UCHAR Reserved[5];
+    ULONGLONG RKEY;
+    UCHAR HOSTID[16];
+    UCHAR Reserved1[32];
+} NVME_REGISTERED_CONTROLLER_EXTENDED_DATA, 
*PNVME_REGISTERED_CONTROLLER_EXTENDED_DATA;
+
+C_ASSERT(sizeof(NVME_REGISTERED_CONTROLLER_EXTENDED_DATA) == 64);
+
+typedef struct {
+    NVME_RESERVATION_REPORT_STATUS_HEADER Header;
+    UCHAR Reserved1[40];
+    NVME_REGISTERED_CONTROLLER_EXTENDED_DATA 
RegisteredControllersExtendedData[ANYSIZE_ARRAY];
+} NVME_RESERVATION_REPORT_STATUS_EXTENDED_DATA_STRUCTURE, 
*PNVME_RESERVATION_REPORT_STATUS_EXTENDED_DATA_STRUCTURE;
+
+typedef enum {
+    NVME_DIRECTIVE_TYPE_IDENTIFY = 0x00,
+    NVME_DIRECTIVE_TYPE_STREAMS = 0x01
+} NVME_DIRECTIVE_TYPES;
+
+#define NVME_STREAMS_ID_MIN 1
+#define NVME_STREAMS_ID_MAX 0xFFFF
+
+typedef struct {
+    ULONG NUMD;
+} NVME_CDW10_DIRECTIVE_RECEIVE, *PNVME_CDW10_DIRECTIVE_RECEIVE;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG DOPER : 8;
+        ULONG DTYPE : 8;
+        ULONG DSPEC : 16;
+    };
+    ULONG AsUlong;
+} NVME_CDW11_DIRECTIVE_RECEIVE, *PNVME_CDW11_DIRECTIVE_RECEIVE;
+
+typedef struct {
+    ULONG NUMD;
+} NVME_CDW10_DIRECTIVE_SEND, *PNVME_CDW10_DIRECTIVE_SEND;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG DOPER : 8;
+        ULONG DTYPE : 8;
+        ULONG DSPEC : 16;
+    };
+    ULONG AsUlong;
+} NVME_CDW11_DIRECTIVE_SEND, *PNVME_CDW11_DIRECTIVE_SEND;
+
+typedef enum {
+    NVME_DIRECTIVE_RECEIVE_IDENTIFY_OPERATION_RETURN_PARAMETERS = 1
+} NVME_DIRECTIVE_RECEIVE_IDENTIFY_OPERATIONS;
+
+typedef enum {
+    NVME_DIRECTIVE_SEND_IDENTIFY_OPERATION_ENABLE_DIRECTIVE = 1
+} NVME_DIRECTIVE_SEND_IDENTIFY_OPERATIONS;
+
+typedef struct {
+    UCHAR Identify : 1;
+    UCHAR Streams : 1;
+    UCHAR Reserved0 : 6;
+    UCHAR Reserved1[31];
+} NVME_DIRECTIVE_IDENTIFY_RETURN_PARAMETERS_DESCRIPTOR, 
*PNVME_DIRECTIVE_IDENTIFY_RETURN_PARAMETERS_DESCRIPTOR;
+
+typedef struct {
+    NVME_DIRECTIVE_IDENTIFY_RETURN_PARAMETERS_DESCRIPTOR DirectivesSupported;
+    NVME_DIRECTIVE_IDENTIFY_RETURN_PARAMETERS_DESCRIPTOR DirectivesEnabled;
+} NVME_DIRECTIVE_IDENTIFY_RETURN_PARAMETERS, 
*PNVME_DIRECTIVE_IDENTIFY_RETURN_PARAMETERS;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG ENDIR : 1;
+        ULONG Reserved0 : 7;
+        ULONG DTYPE : 8;
+        ULONG Reserved1 : 16;
+    };
+    ULONG AsUlong;
+} NVME_CDW12_DIRECTIVE_SEND_IDENTIFY_ENABLE_DIRECTIVE, 
*PNVME_CDW12_DIRECTIVE_SEND_IDENTIFY_ENABLE_DIRECTIVE;
+
+typedef enum {
+    NVME_DIRECTIVE_RECEIVE_STREAMS_OPERATION_RETURN_PARAMETERS = 1,
+    NVME_DIRECTIVE_RECEIVE_STREAMS_OPERATION_GET_STATUS = 2,
+    NVME_DIRECTIVE_RECEIVE_STREAMS_OPERATION_ALLOCATE_RESOURCES = 3
+} NVME_DIRECTIVE_RECEIVE_STREAMS_OPERATIONS;
+
+typedef enum {
+    NVME_DIRECTIVE_SEND_STREAMS_OPERATION_RELEASE_IDENTIFIER = 1,
+    NVME_DIRECTIVE_SEND_STREAMS_OPERATION_RELEASE_RESOURCES = 2
+} NVME_DIRECTIVE_SEND_STREAMS_OPERATIONS;
+
+typedef struct {
+    USHORT MSL;
+    USHORT NSSA;
+    USHORT NSSO;
+    UCHAR Reserved0[10];
+    ULONG SWS;
+    USHORT SGS;
+    USHORT NSA;
+    USHORT NSO;
+    UCHAR Reserved1[6];
+} NVME_DIRECTIVE_STREAMS_RETURN_PARAMETERS, 
*PNVME_DIRECTIVE_STREAMS_RETURN_PARAMETERS;
+
+#define NVME_STREAMS_GET_STATUS_MAX_IDS 65535
+
+typedef struct {
+    USHORT OpenStreamCount;
+    USHORT StreamIdentifiers[NVME_STREAMS_GET_STATUS_MAX_IDS];
+} NVME_DIRECTIVE_STREAMS_GET_STATUS_DATA, 
*PNVME_DIRECTIVE_STREAMS_GET_STATUS_DATA;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG NSR : 16;
+        ULONG Reserved : 16;
+    };
+    ULONG AsUlong;
+} NVME_CDW12_DIRECTIVE_RECEIVE_STREAMS_ALLOCATE_RESOURCES, 
*PNVME_CDW12_DIRECTIVE_RECEIVE_STREAMS_ALLOCATE_RESOURCES;
+
+typedef struct {
+    __C89_NAMELESS struct {
+        ULONG NSA : 16;
+        ULONG Reserved : 16;
+    };
+    ULONG AsUlong;
+} NVME_COMPLETION_DW0_DIRECTIVE_RECEIVE_STREAMS_ALLOCATE_RESOURCES, 
*PNVME_COMPLETION_DW0_DIRECTIVE_RECEIVE_STREAMS_ALLOCATE_RESOURCES;
+
+typedef union {
+    NVME_CDW12_DIRECTIVE_SEND_IDENTIFY_ENABLE_DIRECTIVE EnableDirective;
+    ULONG AsUlong;
+} NVME_CDW12_DIRECTIVE_SEND;
+
+typedef union {
+    NVME_CDW12_DIRECTIVE_RECEIVE_STREAMS_ALLOCATE_RESOURCES AllocateResources;
+    ULONG AsUlong;
+} NVME_CDW12_DIRECTIVE_RECEIVE;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG Reserved0 : 8;
+        ULONG SPSP : 16;
+        ULONG SECP : 8;
+    };
+    ULONG AsUlong;
+} NVME_CDW10_SECURITY_SEND_RECEIVE, *PNVME_CDW10_SECURITY_SEND_RECEIVE;
+
+typedef struct {
+    ULONG TL;
+} NVME_CDW11_SECURITY_SEND, *PNVME_CDW11_SECURITY_SEND;
+
+typedef struct {
+    ULONG AL;
+} NVME_CDW11_SECURITY_RECEIVE, *PNVME_CDW11_SECURITY_RECEIVE;
+
+typedef enum {
+    NVME_NVM_COMMAND_FLUSH = 0x00,
+    NVME_NVM_COMMAND_WRITE = 0x01,
+    NVME_NVM_COMMAND_READ = 0x02,
+    NVME_NVM_COMMAND_WRITE_UNCORRECTABLE = 0x04,
+    NVME_NVM_COMMAND_COMPARE = 0x05,
+    NVME_NVM_COMMAND_WRITE_ZEROES = 0x08,
+    NVME_NVM_COMMAND_DATASET_MANAGEMENT = 0x09,
+    NVME_NVM_COMMAND_VERIFY = 0x0C,
+    NVME_NVM_COMMAND_RESERVATION_REGISTER = 0x0D,
+    NVME_NVM_COMMAND_RESERVATION_REPORT = 0x0E,
+    NVME_NVM_COMMAND_RESERVATION_ACQUIRE = 0x11,
+    NVME_NVM_COMMAND_RESERVATION_RELEASE = 0x15,
+    NVME_NVM_COMMAND_COPY = 0x19,
+    NVME_NVM_COMMAND_ZONE_MANAGEMENT_SEND = 0x79,
+    NVME_NVM_COMMAND_ZONE_MANAGEMENT_RECEIVE = 0x7A,
+    NVME_NVM_COMMAND_ZONE_APPEND = 0x7D
+} NVME_NVM_COMMANDS;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG NLB : 16;
+        ULONG Reserved0 : 4;
+        ULONG DTYPE : 4;
+        ULONG Reserved1 : 2;
+        ULONG PRINFO : 4;
+        ULONG FUA : 1;
+        ULONG LR : 1;
+    };
+    ULONG AsUlong;
+} NVME_CDW12_READ_WRITE, *PNVME_CDW12_READ_WRITE;
+
+typedef enum {
+    NVME_ACCESS_FREQUENCY_NONE = 0,
+    NVME_ACCESS_FREQUENCY_TYPICAL = 1,
+    NVME_ACCESS_FREQUENCY_INFR_WRITE_INFR_READ = 2,
+    NVME_ACCESS_FREQUENCY_INFR_WRITE_FR_READ = 3,
+    NVME_ACCESS_FREQUENCY_FR_WRITE_INFR_READ = 4,
+    NVME_ACCESS_FREQUENCY_FR_WRITE_FR_READ = 5,
+    NVME_ACCESS_FREQUENCY_ONE_TIME_READ = 6,
+    NVME_ACCESS_FREQUENCY_SPECULATIVE_READ = 7,
+    NVME_ACCESS_FREQUENCY_WILL_BE_OVERWRITTEN = 8
+} NVME_ACCESS_FREQUENCIES;
+
+typedef enum {
+    NVME_ACCESS_LATENCY_NONE = 0,
+    NVME_ACCESS_LATENCY_IDLE = 1,
+    NVME_ACCESS_LATENCY_NORMAL = 2,
+    NVME_ACCESS_LATENCY_LOW = 3
+} NVME_ACCESS_LATENCIES;
+
+typedef union {
+    __C89_NAMELESS struct {
+        struct {
+            UCHAR AccessFrequency : 4;
+            UCHAR AccessLatency : 2;
+            UCHAR SequentialRequest : 1;
+            UCHAR Incompressible : 1;
+        } DSM;
+        UCHAR Reserved;
+        USHORT DSPEC;
+    };
+    ULONG AsUlong;
+} NVME_CDW13_READ_WRITE, *PNVME_CDW13_READ_WRITE;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG ELBAT : 16;
+        ULONG ELBATM : 16;
+    };
+    ULONG AsUlong;
+} NVME_CDW15_READ_WRITE, *PNVME_CDW15_READ_WRITE;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG AccessFrequency : 4;
+        ULONG AccessLatency : 2;
+        ULONG Reserved0 : 2;
+        ULONG SequentialReadRange : 1;
+        ULONG SequentialWriteRange : 1;
+        ULONG WritePrepare : 1;
+        ULONG Reserved1 : 13;
+        ULONG CommandAccessSize : 8;
+    };
+    ULONG AsUlong;
+} NVME_CONTEXT_ATTRIBUTES, *PNVME_CONTEXT_ATTRIBUTES;
+
+typedef struct {
+    NVME_CONTEXT_ATTRIBUTES Attributes;
+    ULONG LogicalBlockCount;
+    ULONGLONG StartingLBA;
+} NVME_LBA_RANGE, *PNVME_LBA_RANGE;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG NR : 8;
+        ULONG Reserved : 24;
+    };
+    ULONG AsUlong;
+} NVME_CDW10_DATASET_MANAGEMENT, *PNVME_CDW10_DATASET_MANAGEMENT;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG IDR : 1;
+        ULONG IDW : 1;
+        ULONG AD : 1;
+        ULONG Reserved : 29;
+    };
+    ULONG AsUlong;
+} NVME_CDW11_DATASET_MANAGEMENT, *PNVME_CDW11_DATASET_MANAGEMENT;
+
+typedef struct {
+    __C89_NAMELESS struct {
+        UCHAR ZT : 4;
+        UCHAR Reserved1 : 4;
+    };
+    __C89_NAMELESS struct {
+        UCHAR Reserved2 : 4;
+        UCHAR ZS : 4;
+    };
+    struct {
+        UCHAR ZFC : 1;
+        UCHAR FZR : 1;
+        UCHAR RZR : 1;
+        UCHAR Reserved : 4;
+        UCHAR ZDEV : 1;
+    } ZA;
+    UCHAR Reserved3[5];
+    ULONGLONG ZCAP;
+    ULONGLONG ZSLBA;
+    ULONGLONG WritePointer;
+    UCHAR Reserved4[32];
+} NVME_ZONE_DESCRIPTOR, *PNVME_ZONE_DESCRIPTOR;
+
+typedef enum {
+    NVME_STATE_ZSE = 0x1,
+    NVME_STATE_ZSIO = 0x2,
+    NVME_STATE_ZSEO = 0x3,
+    NVME_STATE_ZSC = 0x4,
+    NVME_STATE_ZSRO = 0xD,
+    NVME_STATE_ZSF = 0xE,
+    NVME_STATE_ZSO = 0xF
+} ZONE_STATE;
+
+typedef enum {
+    NVME_ZONE_SEND_CLOSE = 1,
+    NVME_ZONE_SEND_FINISH = 2,
+    NVME_ZONE_SEND_OPEN = 3,
+    NVME_ZONE_SEND_RESET = 4,
+    NVME_ZONE_SEND_OFFLINE = 5,
+    NVME_ZONE_SEND_SET_ZONE_DESCRIPTOR = 0x10
+} NVME_ZONE_SEND_ACTION;
+
+typedef struct {
+    ULONGLONG SLBA;
+} NVME_CDW10_ZONE_MANAGEMENT_SEND, *PNVME_CDW10_ZONE_MANAGEMENT_SEND;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG ZSA : 8;
+        ULONG SelectAll : 1;
+        ULONG Reserved : 23;
+    };
+    ULONG AsUlong;
+} NVME_CDW13_ZONE_MANAGEMENT_SEND, *PNVME_CDW13_ZONE_MANAGEMENT_SEND;
+
+typedef struct {
+    ULONGLONG ZoneCount;
+    ULONGLONG Reserved[7];
+    NVME_ZONE_DESCRIPTOR ZoneDescriptor[ANYSIZE_ARRAY];
+} NVME_REPORT_ZONE_INFO, *PNVME_REPORT_ZONE_INFO;
+
+typedef struct{
+    UCHAR ZoneDescriptorExtensionInfo[64];
+} NVME_ZONE_DESCRIPTOR_EXTENSION, *PNVME_ZONE_DESCRIPTOR_EXTENSION;
+
+typedef struct {
+    NVME_ZONE_DESCRIPTOR ZoneDescriptor;
+    NVME_ZONE_DESCRIPTOR_EXTENSION ZoneDescriptorExtension[ANYSIZE_ARRAY];
+} NVME_ZONE_EXTENDED_REPORT_ZONE_DESC, *PNVME_ZONE_EXTENDED_REPORT_ZONE_DESC;
+
+typedef struct {
+    ULONGLONG ZoneCount;
+    ULONGLONG Reserved[7];
+    NVME_ZONE_EXTENDED_REPORT_ZONE_DESC Desc[ANYSIZE_ARRAY];
+} NVME_EXTENDED_REPORT_ZONE_INFO, *PNVME_EXTENDED_REPORT_ZONE_INFO;
+
+typedef enum {
+    NVME_ZONE_RECEIVE_REPORT_ZONES = 0,
+    NVME_ZONE_RECEIVE_EXTENDED_REPORT_ZONES = 1
+} NVME_ZONE_RECEIVE_ACTION;
+
+typedef enum {
+    NVME_ZRA_ALL_ZONES = 0,
+    NVME_ZRA_EMPTY_STATE_ZONES = 1,
+    NVME_ZRA_IO_STATE_ZONES = 2,
+    NVME_ZRA_EO_STATE_ZONES = 3,
+    NVME_ZRA_CLOSED_STATE_ZONES = 4,
+    NVME_ZRA_FULL_STATE_ZONES = 5,
+    NVME_ZRA_RO_STATE_ZONES = 6,
+    NVME_ZRA_OFFLINE_STATE_ZONES = 7
+} NVME_ZONE_RECEIVE_ACTION_SPECIFIC;
+
+typedef struct {
+    ULONGLONG SLBA;
+} NVME_CDW10_ZONE_MANAGEMENT_RECEIVE, *PNVME_CDW10_ZONE_MANAGEMENT_RECEIVE;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG ZRA : 8;
+        ULONG ZRASpecific : 8;
+        ULONG Partial : 1;
+        ULONG Reserved : 15;
+    };
+    ULONG AsUlong;
+} NVME_CDW13_ZONE_MANAGEMENT_RECEIVE, *PNVME_CDW13_ZONE_MANAGEMENT_RECEIVE;
+
+typedef struct {
+    ULONGLONG SLBA;
+} NVME_CDW10_ZONE_APPEND, *PNVME_CDW10_ZONE_APPEND;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG NLB : 16;
+        ULONG Reserved : 9;
+        ULONG PIREMAP : 1;
+        ULONG PRINFO : 4;
+        ULONG FUA : 1;
+        ULONG LR : 1;
+    };
+    ULONG AsUlong;
+} NVME_CDW12_ZONE_APPEND, *PNVME_CDW12_ZONE_APPEND;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG LBAT : 16;
+        ULONG LBATM : 16;
+    };
+    ULONG AsUlong;
+} NVME_CDW15_ZONE_APPEND, *PNVME_CDW15_ZONE_APPEND;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONG OPC : 8;
+        ULONG FUSE : 2;
+        ULONG Reserved0 : 5;
+        ULONG PSDT : 1;
+        ULONG CID : 16;
+    };
+    ULONG AsUlong;
+} NVME_COMMAND_DWORD0, *PNVME_COMMAND_DWORD0;
+
+typedef enum {
+    NVME_FUSED_OPERATION_NORMAL = 0,
+    NVME_FUSED_OPERATION_FIRST_CMD = 1,
+    NVME_FUSED_OPERATION_SECOND_CMD = 2
+} NVME_FUSED_OPERATION_CODES;
+
+typedef union {
+    __C89_NAMELESS struct {
+        ULONGLONG Reserved0 : 2;
+        ULONGLONG PBAO : 62;
+    };
+    ULONGLONG AsUlonglong;
+} NVME_PRP_ENTRY, *PNVME_PRP_ENTRY;
+
+#define NVME_NAMESPACE_ALL 0xFFFFFFFF
+
+typedef struct {
+    NVME_COMMAND_DWORD0 CDW0;
+    ULONG NSID;
+    ULONG Reserved0[2];
+    ULONGLONG MPTR;
+    ULONGLONG PRP1;
+    ULONGLONG PRP2;
+    union {
+        struct {
+            ULONG CDW10;
+            ULONG CDW11;
+            ULONG CDW12;
+            ULONG CDW13;
+            ULONG CDW14;
+            ULONG CDW15;
+        } GENERAL;
+        struct {
+            NVME_CDW10_IDENTIFY CDW10;
+            NVME_CDW11_IDENTIFY CDW11;
+            ULONG CDW12;
+            ULONG CDW13;
+            ULONG CDW14;
+            ULONG CDW15;
+        } IDENTIFY;
+        struct {
+            NVME_CDW10_ABORT CDW10;
+            ULONG CDW11;
+            ULONG CDW12;
+            ULONG CDW13;
+            ULONG CDW14;
+            ULONG CDW15;
+        } ABORT;
+        struct {
+            NVME_CDW10_GET_FEATURES CDW10;
+            NVME_CDW11_FEATURES CDW11;
+            ULONG CDW12;
+            ULONG CDW13;
+            ULONG CDW14;
+            ULONG CDW15;
+        } GETFEATURES;
+        struct {
+            NVME_CDW10_SET_FEATURES CDW10;
+            NVME_CDW11_FEATURES CDW11;
+            NVME_CDW12_FEATURES CDW12;
+            NVME_CDW13_FEATURES CDW13;
+            NVME_CDW14_FEATURES CDW14;
+            NVME_CDW15_FEATURES CDW15;
+        } SETFEATURES;
+        struct {
+            union {
+                NVME_CDW10_GET_LOG_PAGE CDW10;
+                NVME_CDW10_GET_LOG_PAGE_V13 CDW10_V13;
+            };
+            NVME_CDW11_GET_LOG_PAGE CDW11;
+            NVME_CDW12_GET_LOG_PAGE CDW12;
+            NVME_CDW13_GET_LOG_PAGE CDW13;
+            NVME_CDW14_GET_LOG_PAGE CDW14;
+            ULONG CDW15;
+        } GETLOGPAGE;
+        struct {
+            NVME_CDW10_CREATE_IO_QUEUE CDW10;
+            NVME_CDW11_CREATE_IO_CQ CDW11;
+            ULONG CDW12;
+            ULONG CDW13;
+            ULONG CDW14;
+            ULONG CDW15;
+        } CREATEIOCQ;
+        struct {
+            NVME_CDW10_CREATE_IO_QUEUE CDW10;
+            NVME_CDW11_CREATE_IO_SQ CDW11;
+            ULONG CDW12;
+            ULONG CDW13;
+            ULONG CDW14;
+            ULONG CDW15;
+        } CREATEIOSQ;
+        struct {
+            NVME_CDW10_DATASET_MANAGEMENT CDW10;
+            NVME_CDW11_DATASET_MANAGEMENT CDW11;
+            ULONG CDW12;
+            ULONG CDW13;
+            ULONG CDW14;
+            ULONG CDW15;
+        } DATASETMANAGEMENT;
+        struct {
+            NVME_CDW10_SECURITY_SEND_RECEIVE CDW10;
+            NVME_CDW11_SECURITY_SEND CDW11;
+            ULONG CDW12;
+            ULONG CDW13;
+            ULONG CDW14;
+            ULONG CDW15;
+        } SECURITYSEND;
+        struct {
+            NVME_CDW10_SECURITY_SEND_RECEIVE CDW10;
+            NVME_CDW11_SECURITY_RECEIVE CDW11;
+            ULONG CDW12;
+            ULONG CDW13;
+            ULONG CDW14;
+            ULONG CDW15;
+        } SECURITYRECEIVE;
+        struct {
+            NVME_CDW10_FIRMWARE_DOWNLOAD CDW10;
+            NVME_CDW11_FIRMWARE_DOWNLOAD CDW11;
+            ULONG CDW12;
+            ULONG CDW13;
+            ULONG CDW14;
+            ULONG CDW15;
+        } FIRMWAREDOWNLOAD;
+        struct {
+            NVME_CDW10_FIRMWARE_ACTIVATE CDW10;
+            ULONG CDW11;
+            ULONG CDW12;
+            ULONG CDW13;
+            ULONG CDW14;
+            ULONG CDW15;
+        } FIRMWAREACTIVATE;
+        struct {
+            NVME_CDW10_FORMAT_NVM CDW10;
+            ULONG CDW11;
+            ULONG CDW12;
+            ULONG CDW13;
+            ULONG CDW14;
+            ULONG CDW15;
+        } FORMATNVM;
+        struct {
+            NVME_CDW10_DIRECTIVE_RECEIVE CDW10;
+            NVME_CDW11_DIRECTIVE_RECEIVE CDW11;
+            NVME_CDW12_DIRECTIVE_RECEIVE CDW12;
+            ULONG CDW13;
+            ULONG CDW14;
+            ULONG CDW15;
+        } DIRECTIVERECEIVE;
+        struct {
+            NVME_CDW10_DIRECTIVE_SEND CDW10;
+            NVME_CDW11_DIRECTIVE_SEND CDW11;
+            NVME_CDW12_DIRECTIVE_SEND CDW12;
+            ULONG CDW13;
+            ULONG CDW14;
+            ULONG CDW15;
+        } DIRECTIVESEND;
+        struct {
+            NVME_CDW10_SANITIZE CDW10;
+            NVME_CDW11_SANITIZE CDW11;
+            ULONG CDW12;
+            ULONG CDW13;
+            ULONG CDW14;
+            ULONG CDW15;
+        } SANITIZE;
+        struct {
+            ULONG LBALOW;
+            ULONG LBAHIGH;
+            NVME_CDW12_READ_WRITE CDW12;
+            NVME_CDW13_READ_WRITE CDW13;
+            ULONG CDW14;
+            NVME_CDW15_READ_WRITE CDW15;
+        } READWRITE;
+        struct {
+            NVME_CDW10_RESERVATION_ACQUIRE CDW10;
+            ULONG CDW11;
+            ULONG CDW12;
+            ULONG CDW13;
+            ULONG CDW14;
+            ULONG CDW15;
+        } RESERVATIONACQUIRE;
+        struct {
+            NVME_CDW10_RESERVATION_REGISTER CDW10;
+            ULONG CDW11;
+            ULONG CDW12;
+            ULONG CDW13;
+            ULONG CDW14;
+            ULONG CDW15;
+        } RESERVATIONREGISTER;
+        struct {
+            NVME_CDW10_RESERVATION_RELEASE CDW10;
+            ULONG CDW11;
+            ULONG CDW12;
+            ULONG CDW13;
+            ULONG CDW14;
+            ULONG CDW15;
+        } RESERVATIONRELEASE;
+        struct {
+            NVME_CDW10_RESERVATION_REPORT CDW10;
+            NVME_CDW11_RESERVATION_REPORT CDW11;
+            ULONG CDW12;
+            ULONG CDW13;
+            ULONG CDW14;
+            ULONG CDW15;
+        } RESERVATIONREPORT;
+        struct {
+            NVME_CDW10_ZONE_MANAGEMENT_SEND CDW1011;
+            ULONG CDW12;
+            NVME_CDW13_ZONE_MANAGEMENT_SEND CDW13;
+            ULONG CDW14;
+            ULONG CDW15;
+        } ZONEMANAGEMENTSEND;
+        struct {
+            NVME_CDW10_ZONE_MANAGEMENT_RECEIVE CDW1011;
+            ULONG DWORDCOUNT;
+            NVME_CDW13_ZONE_MANAGEMENT_RECEIVE CDW13;
+            ULONG CDW14;
+            ULONG CDW15;
+        } ZONEMANAGEMENTRECEIVE;
+        struct {
+            NVME_CDW10_ZONE_APPEND CDW1011;
+            NVME_CDW12_ZONE_APPEND CDW12;
+            ULONG CDW13;
+            ULONG ILBRT;
+            NVME_CDW15_ZONE_APPEND CDW15;
+        } ZONEAPPEND;
+    } u;
+} NVME_COMMAND, *PNVME_COMMAND;
+
+C_ASSERT(sizeof(NVME_COMMAND) == 64);
+
+typedef struct {
+    CHAR PCIVendorID[4];
+    CHAR ModelNumber[40];
+    CHAR NamespaceID[4];
+    CHAR SerialNumber[20];
+} NVME_SCSI_NAME_STRING, *PNVME_SCSI_NAME_STRING;
+
+#endif /* WINAPI_PARTITION_DESKTOP */
+
+#endif /* NVME_INCLUDED */
-- 
2.33.0

_______________________________________________
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to