1 #ifndef SCSI_STRUCTS_H
\r
2 #define SCSI_STRUCTS_H
\r
7 // Force the compiler to NOT add padding bytes
\r
8 #pragma pack(push, 8)
\r
10 typedef struct _SCSI_PASS_THROUGH {
\r
17 uint8_t SenseInfoLength;
\r
19 uint32_t DataTransferLength;
\r
20 uint32_t TimeOutValue;
\r
21 uint32_t DataBufferOffset;
\r
22 uint32_t SenseInfoOffset;
\r
24 } SCSI_PASS_THROUGH, *PSCSI_PASS_THROUGH;
\r
26 typedef struct _SCSI_PASS_THROUGH_DIRECT {
\r
33 uint8_t SenseInfoLength;
\r
35 uint32_t DataTransferLength;
\r
36 uint32_t TimeOutValue;
\r
38 uint32_t SenseInfoOffset;
\r
40 } SCSI_PASS_THROUGH_DIRECT, *PSCSI_PASS_THROUGH_DIRECT;
\r
42 typedef struct _SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER {
\r
43 SCSI_PASS_THROUGH_DIRECT Spt;
\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
50 // Manually define SCSI constants if headers are missing
\r
52 #ifndef IOCTL_SCSI_PASS_THROUGH_DIRECT
\r
53 #define IOCTL_SCSI_PASS_THROUGH_DIRECT 0x4D014
\r
56 #ifndef IOCTL_SCSI_PASS_THROUGH
\r
57 #define IOCTL_SCSI_PASS_THROUGH 0x0004D004
\r
60 #ifndef SCSI_IOCTL_DATA_OUT
\r
61 #define SCSI_IOCTL_DATA_OUT 0
\r
64 #ifndef SCSI_IOCTL_DATA_IN
\r
65 #define SCSI_IOCTL_DATA_IN 1
\r
68 #ifndef SCSI_IOCTL_DATA_UNSPECIFIED
\r
69 #define SCSI_IOCTL_DATA_UNSPECIFIED 2
\r
72 #ifndef FSCTL_LOCK_VOLUME
\r
73 #define FSCTL_LOCK_VOLUME 0x00090018
\r
75 #ifndef FSCTL_DISMOUNT_VOLUME
\r
76 #define FSCTL_DISMOUNT_VOLUME 0x00090020
\r
79 #ifndef FSCTL_UNLOCK_VOLUME
\r
80 #define FSCTL_UNLOCK_VOLUME 0x0009001c
\r