ddk/scsi: add missing enum and define entries

Signed-off-by: Biswapriyo Nath <nathbappai@gmail.com>
Signed-off-by: Liu Hao <lh_mouse@126.com>
diff --git a/mingw-w64-headers/ddk/include/ddk/scsi.h b/mingw-w64-headers/ddk/include/ddk/scsi.h
index 962b2a9..94f20b4 100644
--- a/mingw-w64-headers/ddk/include/ddk/scsi.h
+++ b/mingw-w64-headers/ddk/include/ddk/scsi.h
@@ -113,12 +113,15 @@
 #define NOTIFICATION_BUSY_EVENT_NO_EVENT            0x0
 #define NOTIFICATION_BUSY_EVENT_NO_CHANGE           0x0
 #define NOTIFICATION_BUSY_EVENT_BUSY                0x1
+#define NOTIFICATION_BUSY_EVENT_LO_CHANGE           0x2
 
 #define NOTIFICATION_BUSY_STATUS_NO_EVENT           0x0
 #define NOTIFICATION_BUSY_STATUS_POWER              0x1
 #define NOTIFICATION_BUSY_STATUS_IMMEDIATE          0x2
 #define NOTIFICATION_BUSY_STATUS_DEFERRED           0x3
 
+#define SECURITY_PROTOCOL_IEEE1667  0xEE
+
 #define DVD_FORMAT_LEAD_IN          0x00
 #define DVD_FORMAT_COPYRIGHT        0x01
 #define DVD_FORMAT_DISK_KEY         0x02
@@ -292,6 +295,7 @@
 #define SCSIOP_CHANGE_DEFINITION        0x40
 #define SCSIOP_WRITE_SAME               0x41
 #define SCSIOP_READ_SUB_CHANNEL         0x42
+#define SCSIOP_UNMAP                    0x42
 #define SCSIOP_READ_TOC                 0x43
 #define SCSIOP_READ_HEADER              0x44
 #define SCSIOP_REPORT_DENSITY_SUPPORT   0x44
@@ -299,6 +303,7 @@
 #define SCSIOP_GET_CONFIGURATION        0x46
 #define SCSIOP_PLAY_AUDIO_MSF           0x47
 #define SCSIOP_PLAY_TRACK_INDEX         0x48
+#define SCSIOP_SANITIZE                 0x48
 #define SCSIOP_PLAY_TRACK_RELATIVE      0x49
 #define SCSIOP_GET_EVENT_STATUS         0x4A
 #define SCSIOP_PAUSE_RESUME             0x4B
@@ -330,6 +335,7 @@
 #define SCSIOP_BLANK                    0xA1
 #define SCSIOP_ATA_PASSTHROUGH12        0xA1
 #define SCSIOP_SEND_EVENT               0xA2
+#define SCSIOP_SECURITY_PROTOCOL_IN     0xA2
 #define SCSIOP_SEND_KEY                 0xA3
 #define SCSIOP_MAINTENANCE_IN           0xA3
 #define SCSIOP_REPORT_KEY               0xA4
@@ -355,6 +361,7 @@
 #define SCSIOP_SET_LIMITS12             0xB3
 #define SCSIOP_READ_ELEMENT_STATUS_ATTACHED 0xB4
 #define SCSIOP_REQUEST_VOL_ELEMENT      0xB5
+#define SCSIOP_SECURITY_PROTOCOL_OUT    0xB5
 #define SCSIOP_SEND_VOLUME_TAG          0xB6
 #define SCSIOP_SET_STREAMING            0xB6
 #define SCSIOP_READ_DEFECT_DATA         0xB7
@@ -380,11 +387,15 @@
 #define SCSIOP_READ_REVERSE16           0x81
 #define SCSIOP_REGENERATE16             0x82
 #define SCSIOP_EXTENDED_COPY            0x83
+#define SCSIOP_POPULATE_TOKEN           0x83
+#define SCSIOP_WRITE_USING_TOKEN        0x83
 #define SCSIOP_RECEIVE_COPY_RESULTS     0x84
+#define SCSIOP_RECEIVE_ROD_TOKEN_INFORMATION 0x84
 #define SCSIOP_ATA_PASSTHROUGH16        0x85
 #define SCSIOP_ACCESS_CONTROL_IN        0x86
 #define SCSIOP_ACCESS_CONTROL_OUT       0x87
 #define SCSIOP_READ16                   0x88
+#define SCSIOP_COMPARE_AND_WRITE        0x89
 #define SCSIOP_WRITE16                  0x8A
 #define SCSIOP_READ_ATTRIBUTES          0x8C
 #define SCSIOP_WRITE_ATTRIBUTES         0x8D
@@ -397,10 +408,62 @@
 #define SCSIOP_LOCATE16                 0x92
 #define SCSIOP_WRITE_SAME16             0x93
 #define SCSIOP_ERASE16                  0x93
+#define SCSIOP_ZBC_OUT                  0x94
+#define SCSIOP_ZBC_IN                   0x95
+#define SCSIOP_READ_DATA_BUFF16         0x9B
 #define SCSIOP_READ_CAPACITY16          0x9E
+#define SCSIOP_GET_LBA_STATUS           0x9E
+#define SCSIOP_GET_PHYSICAL_ELEMENT_STATUS 0x9E
+#define SCSIOP_REMOVE_ELEMENT_AND_TRUNCATE 0x9E
 #define SCSIOP_SERVICE_ACTION_IN16      0x9E
 #define SCSIOP_SERVICE_ACTION_OUT16     0x9F
 
+#define SCSIOP_OPERATION32              0x7F
+
+#define SERVICE_ACTION_OVERWRITE        0x01
+#define SERVICE_ACTION_BLOCK_ERASE      0x02
+#define SERVICE_ACTION_CRYPTO_ERASE     0x03
+#define SERVICE_ACTION_EXIT_FAILURE     0x1f
+
+#define SERVICE_ACTION_XDWRITE          0x0004
+#define SERVICE_ACTION_XPWRITE          0x0006
+#define SERVICE_ACTION_XDWRITEREAD      0x0007
+#define SERVICE_ACTION_WRITE            0x000B
+#define SERVICE_ACTION_WRITE_VERIFY     0x000C
+#define SERVICE_ACTION_WRITE_SAME       0x000D
+#define SERVICE_ACTION_ORWRITE          0x000E
+
+#define SERVICE_ACTION_POPULATE_TOKEN     0x10
+#define SERVICE_ACTION_WRITE_USING_TOKEN 0x11
+
+#define SERVICE_ACTION_RECEIVE_TOKEN_INFORMATION 0x07
+
+#define SERVICE_ACTION_CLOSE_ZONE           0x01
+#define SERVICE_ACTION_FINISH_ZONE          0x02
+#define SERVICE_ACTION_OPEN_ZONE            0x03
+#define SERVICE_ACTION_RESET_WRITE_POINTER  0x04
+
+#define SERVICE_ACTION_REPORT_ZONES         0x00
+
+#define REPORT_ZONES_OPTION_LIST_ALL_ZONES               0x00
+#define REPORT_ZONES_OPTION_LIST_EMPTY_ZONES             0x01
+#define REPORT_ZONES_OPTION_LIST_IMPLICITLY_OPENED_ZONES 0x02
+#define REPORT_ZONES_OPTION_LIST_EXPLICITLY_OPENED_ZONES 0x03
+#define REPORT_ZONES_OPTION_LIST_CLOSED_ZONES            0x04
+#define REPORT_ZONES_OPTION_LIST_FULL_ZONES              0x05
+#define REPORT_ZONES_OPTION_LIST_READ_ONLY_ZONES         0x06
+#define REPORT_ZONES_OPTION_LIST_OFFLINE_ZONES           0x07
+#define REPORT_ZONES_OPTION_LIST_RWP_ZONES               0x10
+#define REPORT_ZONES_OPTION_LIST_NON_SEQUENTIAL_WRITE_RESOURCES_ACTIVE_ZONES 0x11
+#define REPORT_ZONES_OPTION_LIST_NOT_WRITE_POINTER_ZONES 0x3F
+
+#define SERVICE_ACTION_READ_CAPACITY16              0x10
+#define SERVICE_ACTION_GET_LBA_STATUS               0x12
+#define SERVICE_ACTION_GET_PHYSICAL_ELEMENT_STATUS  0x17
+#define SERVICE_ACTION_REMOVE_ELEMENT_AND_TRUNCATE  0x18
+#define SERVICE_ACTION_REPORT_TIMESTAMP             0x0F
+#define SERVICE_ACTION_SET_TIMESTAMP                0x0F
+
 #define CDB_RETURN_ON_COMPLETION   0
 #define CDB_RETURN_IMMEDIATE       1
 
@@ -454,6 +517,9 @@
 #define START_UNIT_CODE 0x01
 #define STOP_UNIT_CODE 0x00
 
+#define OFFSET_VER_DESCRIPTOR_ONE (FIELD_OFFSET(INQUIRYDATA, VersionDescriptors[0]))
+#define OFFSET_VER_DESCRIPTOR_EIGHT (FIELD_OFFSET(INQUIRYDATA, VersionDescriptors[8]))
+
 /* INQUIRYDATA.DeviceType constants */
 #define DIRECT_ACCESS_DEVICE              0x00
 #define SEQUENTIAL_ACCESS_DEVICE          0x01
@@ -471,6 +537,8 @@
 #define OPTICAL_CARD_READER_WRITER_DEVICE 0x0F
 #define BRIDGE_CONTROLLER_DEVICE          0x10
 #define OBJECT_BASED_STORAGE_DEVICE       0x11
+#define HOST_MANAGED_ZONED_BLOCK_DEVICE   0x14
+#define UNKNOWN_OR_NO_DEVICE              0x1F
 #define LOGICAL_UNIT_NOT_PRESENT_DEVICE   0x7F
 
 #define DEVICE_QUALIFIER_ACTIVE           0x00
@@ -785,6 +853,26 @@
     UCHAR VerificationLength[3];
     UCHAR Control;
   } CDB6VERIFY;
+  struct _RECEIVE_DIAGNOSTIC {
+    UCHAR OperationCode;
+    UCHAR PageCodeValid:1;
+    UCHAR Reserved:7;
+    UCHAR PageCode;
+    UCHAR AllocationLength[2];
+    UCHAR Control;
+  } RECEIVE_DIAGNOSTIC;
+  struct _SEND_DIAGNOSTIC {
+    UCHAR OperationCode;
+    UCHAR UnitOffline:1;
+    UCHAR DeviceOffline:1;
+    UCHAR SelfTest:1;
+    UCHAR Reserved1:1;
+    UCHAR PageFormat:1;
+    UCHAR SelfTestCode:3;
+    UCHAR Reserved2;
+    UCHAR ParameterListLength[2];
+    UCHAR Control;
+  } SEND_DIAGNOSTIC;
   struct _CDB6FORMAT {
     UCHAR OperationCode;
     UCHAR FormatControl:5;
@@ -833,6 +921,66 @@
      UCHAR Reserved2;
      UCHAR Control;
   } CDB16;
+  struct _READ_BUFFER_10 {
+    UCHAR OperationCode;
+    UCHAR Mode:5;
+    UCHAR ModeSpecific:3;
+    UCHAR BufferId;
+    UCHAR BufferOffset[3];
+    UCHAR AllocationLength[3];
+    UCHAR Control;
+  } READ_BUFFER_10;
+  struct _READ_BUFFER_16 {
+    UCHAR OperationCode;
+    UCHAR Mode:5;
+    UCHAR ModeSpecific:3;
+    UCHAR BufferOffset[8];
+    UCHAR AllocationLength[4];
+    UCHAR BufferId;
+    UCHAR Control;
+  } READ_BUFFER_16;
+  struct _SECURITY_PROTOCOL_IN {
+    UCHAR OperationCode;
+    UCHAR SecurityProtocol;
+    UCHAR SecurityProtocolSpecific[2];
+    UCHAR Reserved1:7;
+    UCHAR INC_512:1;
+    UCHAR Reserved2;
+    UCHAR AllocationLength[4];
+    UCHAR Reserved3;
+    UCHAR Control;
+  } SECURITY_PROTOCOL_IN;
+  struct _SECURITY_PROTOCOL_OUT {
+    UCHAR OperationCode;
+    UCHAR SecurityProtocol;
+    UCHAR SecurityProtocolSpecific[2];
+    UCHAR Reserved1:7;
+    UCHAR INC_512:1;
+    UCHAR Reserved2;
+    UCHAR AllocationLength[4];
+    UCHAR Reserved3;
+    UCHAR Control;
+  } SECURITY_PROTOCOL_OUT;
+  struct _UNMAP {
+    UCHAR OperationCode;
+    UCHAR Anchor:1;
+    UCHAR Reserved1:7;
+    UCHAR Reserved2[4];
+    UCHAR GroupNumber:5;
+    UCHAR Reserved3:3;
+    UCHAR AllocationLength[2];
+    UCHAR Control;
+  } UNMAP;
+  struct _SANITIZE {
+    UCHAR OperationCode;
+    UCHAR ServiceAction:5;
+    UCHAR AUSE:1;
+    UCHAR Reserved1:1;
+    UCHAR Immediate:1;
+    UCHAR Reserved2[5];
+    UCHAR ParameterListLength[2];
+    UCHAR Control;
+  } SANITIZE;
   struct _PAUSE_RESUME {
     UCHAR OperationCode;
     UCHAR Reserved1:5;
@@ -865,9 +1013,8 @@
   } READ_DISK_INFORMATION;
   struct _READ_TRACK_INFORMATION {
     UCHAR OperationCode;
-    UCHAR Track:1;
-    UCHAR Reserved1:3;
-    UCHAR Reserved2:1;
+    UCHAR Track:2;
+    UCHAR Reserved4:3;
     UCHAR Lun:3;
     UCHAR BlockAddress[4];
     UCHAR Reserved3;
@@ -975,24 +1122,22 @@
     UCHAR CMSF:1;
     UCHAR ExpectedSectorType:3;
     UCHAR Lun:3;
-    struct _LBA {
-      UCHAR StartingBlockAddress[4];
-      UCHAR PlayLength[4];
-    };
-    struct _MSF {
-      UCHAR Reserved1;
-      UCHAR StartingM;
-      UCHAR StartingS;
-      UCHAR StartingF;
-      UCHAR EndingM;
-      UCHAR EndingS;
-      UCHAR EndingF;
-      UCHAR Reserved2;
-    };
     _ANONYMOUS_UNION union {
-      struct _LBA LBA;
-      struct _MSF MSF;
-    } DUMMYUNIONNAME;
+      struct {
+        UCHAR StartingBlockAddress[4];
+        UCHAR PlayLength[4];
+      } LBA;
+      struct {
+        UCHAR Reserved1;
+        UCHAR StartingM;
+        UCHAR StartingS;
+        UCHAR StartingF;
+        UCHAR EndingM;
+        UCHAR EndingS;
+        UCHAR EndingF;
+        UCHAR Reserved2;
+      } MSF;
+    };
     UCHAR Audio:1;
     UCHAR Composite:1;
     UCHAR Port1:1;
@@ -1105,10 +1250,36 @@
     UCHAR TransferBlockByte1;
     UCHAR Control;
   } NEC_READ_CDDA;
+#if NTDDI_VERSION >= NTDDI_WIN8
   struct _MODE_SENSE {
     UCHAR OperationCode;
     UCHAR Reserved1:3;
     UCHAR Dbd:1;
+    UCHAR Reserved2:4;
+    UCHAR PageCode:6;
+    UCHAR Pc:2;
+    UCHAR SubPageCode;
+    UCHAR AllocationLength;
+    UCHAR Control;
+  } MODE_SENSE;
+  struct _MODE_SENSE10 {
+    UCHAR OperationCode;
+    UCHAR Reserved1:3;
+    UCHAR Dbd:1;
+    UCHAR LongLBAAccepted:1;
+    UCHAR Reserved2:3;
+    UCHAR PageCode:6;
+    UCHAR Pc:2;
+    UCHAR SubPageCode;
+    UCHAR Reserved3[3];
+    UCHAR AllocationLength[2];
+    UCHAR Control;
+  } MODE_SENSE10;
+#else
+    struct _MODE_SENSE {
+    UCHAR OperationCode;
+    UCHAR Reserved1:3;
+    UCHAR Dbd:1;
     UCHAR Reserved2:1;
     UCHAR LogicalUnitNumber:3;
     UCHAR PageCode:6;
@@ -1129,6 +1300,7 @@
     UCHAR AllocationLength[2];
     UCHAR Control;
   } MODE_SENSE10;
+#endif /* NTDDI_VERSION >= NTDDI_WIN8 */
   struct _MODE_SELECT {
     UCHAR OperationCode;
     UCHAR SPBit:1;
@@ -1170,7 +1342,10 @@
     UCHAR LogicalUnitNumber:3;
     UCHAR PageCode:6;
     UCHAR PCBit:2;
-    UCHAR Reserved2;
+    _ANONYMOUS_UNION union {
+      UCHAR SubPageCode;
+      UCHAR Reserved2;
+    };
     UCHAR Reserved3;
     UCHAR ParameterPointer[2];
     UCHAR AllocationLength[2];
@@ -1548,10 +1723,28 @@
     UCHAR ParameterListLength[2];
     UCHAR Control;
   } PERSISTENT_RESERVE_OUT;
+  struct _REPORT_TIMESTAMP {
+    UCHAR OperationCode;
+    UCHAR ServiceAction:5;
+    UCHAR Reserved1:3;
+    UCHAR Reserved2[4];
+    UCHAR AllocationLength[4];
+    UCHAR Reserved3;
+    UCHAR Control;
+  } REPORT_TIMESTAMP;
+  struct _SET_TIMESTAMP {
+    UCHAR OperationCode;
+    UCHAR ServiceAction:5;
+    UCHAR Reserved1:3;
+    UCHAR Reserved2[4];
+    UCHAR ParameterListLength[4];
+    UCHAR Reserved3;
+    UCHAR Control;
+  } SET_TIMESTAMP;
   struct _GET_CONFIGURATION {
     UCHAR OperationCode;
-    UCHAR RequestType:1;
-    UCHAR Reserved1:7;
+    UCHAR RequestType:2;
+    UCHAR Reserved1:6;
     UCHAR StartingFeature[2];
     UCHAR Reserved2[3];
     UCHAR AllocationLength[2];
@@ -1598,6 +1791,27 @@
     UCHAR Streaming:1;
     UCHAR Control;
   } WRITE12;
+  struct _ATA_PASSTHROUGH12 {
+    UCHAR OperationCode;
+    UCHAR Reserved1:1;
+    UCHAR Protocol:4;
+    UCHAR MultipleCount:3;
+    UCHAR TLength:2;
+    UCHAR ByteBlock:1;
+    UCHAR TDir:1;
+    UCHAR Reserved2:1;
+    UCHAR CkCond:1;
+    UCHAR Offline:2;
+    UCHAR Features;
+    UCHAR SectorCount;
+    UCHAR LbaLow;
+    UCHAR LbaMid;
+    UCHAR LbaHigh;
+    UCHAR Device;
+    UCHAR Command;
+    UCHAR Reserved3;
+    UCHAR Control;
+  } ATA_PASSTHROUGH12;
   struct _READ16 {
     UCHAR OperationCode;
     UCHAR Reserved1:3;
@@ -1656,6 +1870,142 @@
     UCHAR Reserved2:7;
     UCHAR Control;
   } READ_CAPACITY16;
+  struct _ATA_PASSTHROUGH16 {
+    UCHAR OperationCode;
+    UCHAR Extend:1;
+    UCHAR Protocol:4;
+    UCHAR MultipleCount:3;
+    UCHAR TLength:2;
+    UCHAR ByteBlock:1;
+    UCHAR TDir:1;
+    UCHAR Reserved1:1;
+    UCHAR CkCond:1;
+    UCHAR Offline:2;
+    UCHAR Features15_8;
+    UCHAR Features7_0;
+    UCHAR SectorCount15_8;
+    UCHAR SectorCount7_0;
+    UCHAR LbaLow15_8;
+    UCHAR LbaLow7_0;
+    UCHAR LbaMid15_8;
+    UCHAR LbaMid7_0;
+    UCHAR LbaHigh15_8;
+    UCHAR LbaHigh7_0;
+    UCHAR Device;
+    UCHAR Command;
+    UCHAR Control;
+  } ATA_PASSTHROUGH16;
+  struct _GET_LBA_STATUS {
+    UCHAR OperationCode;
+    UCHAR ServiceAction:5;
+    UCHAR Reserved1:3;
+    UCHAR StartingLBA[8];
+    UCHAR AllocationLength[4];
+    UCHAR Reserved2;
+    UCHAR Control;
+  } GET_LBA_STATUS;
+  struct _TOKEN_OPERATION {
+    UCHAR OperationCode;
+    UCHAR ServiceAction:5;
+    UCHAR Reserved1:3;
+    UCHAR Reserved2[4];
+    UCHAR ListIdentifier[4];
+    UCHAR ParameterListLength[4];
+    UCHAR GroupNumber: 5;
+    UCHAR Reserved3: 3;
+    UCHAR Control;
+  } TOKEN_OPERATION;
+  struct _RECEIVE_TOKEN_INFORMATION {
+    UCHAR OperationCode;
+    UCHAR ServiceAction:5;
+    UCHAR Reserved1:3;
+    UCHAR ListIdentifier[4];
+    UCHAR Reserved2[4];
+    UCHAR AllocationLength[4];
+    UCHAR Reserved3;
+    UCHAR Control;
+  } RECEIVE_TOKEN_INFORMATION;
+  struct _WRITE_BUFFER {
+    UCHAR OperationCode;
+    UCHAR Mode:5;
+    UCHAR ModeSpecific:3;
+    UCHAR BufferID;
+    UCHAR BufferOffset[3];
+    UCHAR ParameterListLength[3];
+    UCHAR Control;
+  } WRITE_BUFFER;
+  struct _CLOSE_ZONE {
+    UCHAR OperationCode;
+    UCHAR ServiceAction:5;
+    UCHAR Reserved1:3;
+    UCHAR ZoneId[8];
+    UCHAR Reserved2[4];
+    UCHAR All:1;
+    UCHAR Reserved3:7;
+    UCHAR Control;
+  } CLOSE_ZONE;
+  struct _FINISH_ZONE {
+    UCHAR OperationCode;
+    UCHAR ServiceAction:5;
+    UCHAR Reserved1:3;
+    UCHAR ZoneId[8];
+    UCHAR Reserved2[4];
+    UCHAR All:1;
+    UCHAR Reserved3:7;
+    UCHAR Control;
+  } FINISH_ZONE;
+  struct _OPEN_ZONE {
+    UCHAR OperationCode;
+    UCHAR ServiceAction:5;
+    UCHAR Reserved1:3;
+    UCHAR ZoneId[8];
+    UCHAR Reserved2[4];
+    UCHAR All:1;
+    UCHAR Reserved3:7;
+    UCHAR Control;
+  } OPEN_ZONE;
+  struct _RESET_WRITE_POINTER {
+    UCHAR OperationCode;
+    UCHAR ServiceAction:5;
+    UCHAR Reserved1:3;
+    UCHAR ZoneId[8];
+    UCHAR Reserved2[4];
+    UCHAR All:1;
+    UCHAR Reserved3:7;
+    UCHAR Control;
+  } RESET_WRITE_POINTER;
+  struct _REPORT_ZONES {
+    UCHAR OperationCode;
+    UCHAR ServiceAction:5;
+    UCHAR Reserved1:3;
+    UCHAR ZoneStartLBA[8];
+    UCHAR AllocationLength[4];
+    UCHAR ReportingOptions:6;
+    UCHAR Reserved3:1;
+    UCHAR Partial:1;
+    UCHAR Control;
+  } REPORT_ZONES;
+  struct _GET_PHYSICAL_ELEMENT_STATUS {
+    UCHAR OperationCode;
+    UCHAR ServiceAction:5;
+    UCHAR Reserved1:3;
+    UCHAR Reserved2[4];
+    UCHAR StartingElement[4];
+    UCHAR AllocationLength[4];
+    UCHAR ReportType:4;
+    UCHAR Reserved3:2;
+    UCHAR Filter:2;
+    UCHAR Control;
+  } GET_PHYSICAL_ELEMENT_STATUS;
+  struct _REMOVE_ELEMENT_AND_TRUNCATE {
+    UCHAR OperationCode;
+    UCHAR ServiceAction:5;
+    UCHAR Reserved1:3;
+    UCHAR RequestedCapacity[8];
+    UCHAR ElementIdentifier[4];
+    UCHAR Reserved2;
+    UCHAR Control;
+  } REMOVE_ELEMENT_AND_TRUNCATE;
   ULONG AsUlong[4];
   UCHAR AsByte[16];
 } CDB, *PCDB;
@@ -1726,6 +2076,12 @@
   UCHAR Time[2];
 } NOTIFICATION_BUSY_STATUS, *PNOTIFICATION_BUSY_STATUS;
 
+typedef struct _SUPPORTED_SECURITY_PROTOCOLS_PARAMETER_DATA {
+  UCHAR Reserved1[6];
+  UCHAR SupportedSecurityListLength[2];
+  UCHAR SupportedSecurityProtocol[0];
+} SUPPORTED_SECURITY_PROTOCOLS_PARAMETER_DATA, *PSUPPORTED_SECURITY_PROTOCOLS_PARAMETER_DATA;
+
 typedef struct _READ_DVD_STRUCTURES_HEADER {
   UCHAR Length[2];
   UCHAR Reserved[2];