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];