]> FriiDump Source - friidump.git/blob - libfriidump/xbox_ref/scsi_structs.h
FriiDump 0.5.3.16: finalize release identity and documentation
[friidump.git] / libfriidump / xbox_ref / scsi_structs.h
1 #ifndef SCSI_STRUCTS_H\r
2 #define SCSI_STRUCTS_H\r
3 \r
4 #include <windows.h>\r
5 #include <stdint.h>\r
6 \r
7 // Force the compiler to NOT add padding bytes\r
8 #pragma pack(push, 8)\r
9 \r
10 typedef struct _SCSI_PASS_THROUGH {\r
11     uint16_t Length;\r
12     uint8_t  ScsiStatus;\r
13     uint8_t  PathId;\r
14     uint8_t  TargetId;\r
15     uint8_t  Lun;\r
16     uint8_t  CdbLength;\r
17     uint8_t  SenseInfoLength;\r
18     uint8_t  DataIn;\r
19     uint32_t DataTransferLength;\r
20     uint32_t TimeOutValue;\r
21     uint32_t DataBufferOffset;\r
22     uint32_t SenseInfoOffset;\r
23     uint8_t  Cdb[16];\r
24 } SCSI_PASS_THROUGH, *PSCSI_PASS_THROUGH;\r
25 \r
26 typedef struct _SCSI_PASS_THROUGH_DIRECT {\r
27     uint16_t Length;\r
28     uint8_t  ScsiStatus;\r
29     uint8_t  PathId;\r
30     uint8_t  TargetId;\r
31     uint8_t  Lun;\r
32     uint8_t  CdbLength;\r
33     uint8_t  SenseInfoLength;\r
34     uint8_t  DataIn;\r
35     uint32_t DataTransferLength;\r
36     uint32_t TimeOutValue;\r
37     void* DataBuffer;\r
38     uint32_t SenseInfoOffset;\r
39     uint8_t  Cdb[16];\r
40 } SCSI_PASS_THROUGH_DIRECT, *PSCSI_PASS_THROUGH_DIRECT;\r
41 \r
42 typedef struct _SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER {\r
43     SCSI_PASS_THROUGH_DIRECT Spt;\r
44     uint32_t Filler;\r
45     uint8_t  SenseBuf[32]; // Note: Ensure your code uses SenseBuf, not SenseBuffer\r
46 } SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER, *PSCSI_PASS_THROUGH_DIRECT_WITH_BUFFER;\r
47 \r
48 #pragma pack(pop)\r
49 \r
50 // Manually define SCSI constants if headers are missing\r
51 \r
52 #ifndef IOCTL_SCSI_PASS_THROUGH_DIRECT\r
53 #define IOCTL_SCSI_PASS_THROUGH_DIRECT 0x4D014\r
54 #endif\r
55 \r
56 #ifndef IOCTL_SCSI_PASS_THROUGH\r
57 #define IOCTL_SCSI_PASS_THROUGH 0x0004D004\r
58 #endif\r
59 \r
60 #ifndef SCSI_IOCTL_DATA_OUT\r
61 #define SCSI_IOCTL_DATA_OUT 0\r
62 #endif\r
63 \r
64 #ifndef SCSI_IOCTL_DATA_IN\r
65 #define SCSI_IOCTL_DATA_IN 1\r
66 #endif\r
67 \r
68 #ifndef SCSI_IOCTL_DATA_UNSPECIFIED\r
69 #define SCSI_IOCTL_DATA_UNSPECIFIED 2\r
70 #endif\r
71 \r
72 #ifndef FSCTL_LOCK_VOLUME\r
73 #define FSCTL_LOCK_VOLUME 0x00090018\r
74 #endif\r
75 #ifndef FSCTL_DISMOUNT_VOLUME\r
76 #define FSCTL_DISMOUNT_VOLUME 0x00090020\r
77 #endif\r
78 \r
79 #ifndef FSCTL_UNLOCK_VOLUME\r
80 #define FSCTL_UNLOCK_VOLUME 0x0009001c\r
81 #endif\r
82 \r
83 #endif